element-ui-wbi 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,11 +19,11 @@
19
19
  return /******/ (function() { // webpackBootstrap
20
20
  /******/ var __webpack_modules__ = ({
21
21
 
22
- /***/ 5501:
22
+ /***/ 4884:
23
23
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
24
24
 
25
25
  "use strict";
26
- eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=d8da1446&scoped=true\nvar Indexvue_type_template_id_d8da1446_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n ...newVal\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n ...this.defaultParams\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n this.params = {\n ...this.params,\n ...params,\n page: 1\n };\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_d8da1446_scoped_true_render,\n Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns,\n false,\n null,\n \"d8da1446\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(9274);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=0c5de06e&scoped=true\nvar Indexvue_type_template_id_0c5de06e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(\" \" + _vm._s(_vm.title) + \" \")]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\"\n }\n }, [_c('div', {\n staticStyle: {\n \"position\": \"absolute\",\n \"right\": \"0px\",\n \"top\": \"-14px\",\n \"width\": \"100%\",\n \"text-align\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)])]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=0c5de06e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_0c5de06e_scoped_true_render,\n Indexvue_type_template_id_0c5de06e_scoped_true_staticRenderFns,\n false,\n null,\n \"0c5de06e\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n tokenKey: 'token',\n storage: 'session',\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n let token = '';\n if (_classPrivateFieldGet2(_config, this).storage === 'session') {\n token = sessionStorage.getItem(_classPrivateFieldGet2(_config, this).tokenKey);\n } else if (_classPrivateFieldGet2(_config, this).storage === 'local') {\n token = localStorage.getItem(_classPrivateFieldGet2(_config, this).tokenKey);\n }\n config.headers[_classPrivateFieldGet2(_config, this).tokenKey] = token;\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(5506);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU8sRUFBQztJQUNoQixLQUFLLENBQUNBLE9BQU8sQ0FBQztFQUNsQjtBQUNKLEM7O0FDckJ3QjtBQUNBO0FBQ3hCLDhDQUFlLFVBQUc7QUFDSSIsInNvdXJjZXMiOlsid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0B2dWUvY2xpLXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL3NldFB1YmxpY1BhdGguanM/NjljYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlPzI3MzMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/M2M1ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2Y5NmUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mMTViIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/YzE1ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/MmY4NSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2ZiMWQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8wOGJhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzVkMDMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT9jZWU5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/Y2Y1YSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlP2Y5ZTciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8zOGEwIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8wZTcxIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy1kcmFnLmpzPzVlYmQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT80ZGI2Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT9mZmM5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8xNDBkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT9lODY3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT82MTE4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZTdmYSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9jMWZiIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZGEyMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlPzU3MjUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9iNGFiIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjMzNSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlPzkwOWMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL3RyZWUuanM/NDJjNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9iZjY2Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/YmRlYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlP2E2NTgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT85MTBhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/N2EwMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uLmpzP2I4NWYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYy5qcz9jZmRhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydENsYXNzQnJhbmQuanM/MTlmOCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZFNldDIuanM/NDRiZiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZEdldDIuanM/OTI5ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzPzRiZWEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzP2M5ZWIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz8yMDI3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanM/MWE5NCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzPzliYTMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/OTNlMiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcz9jMTc4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcz9jNzkyIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/MjdhNCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcz9hMGVkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanM/MWRiOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanM/NmQ3OCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcz9iMmU0Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanM/YmY4YyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/NzhmMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzPzhmZTkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanM/ZjQzNyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanM/ZmYxMCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NTRlOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanM/OTU5NyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzc2NjIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9jMTdhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcz82OGE0Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz84NzY4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/MWQzZiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzP2EyMjciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/NmJjNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzP2YwMmQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzg3OTUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcz85ZmFjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzPzU5YzAiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz8xYTVjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz83ODI1Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcz80ZGM5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzP2JkMTMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzExMGYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzPzAxMzIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/MjlmYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzPzI3MjkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzP2JkOWQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YzZmMyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanM/ZmFkNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2h0dHAvaW5kZXguanM/Y2M2YSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzPzE1NjgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQHZ1ZS9jbGktc2VydmljZS9saWIvY29tbWFuZHMvYnVpbGQvZW50cnktbGliLmpzPzhhOTciXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBUaGlzIGZpbGUgaXMgaW1wb3J0ZWQgaW50byBsaWIvd2MgY2xpZW50IGJ1bmRsZXMuXG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgY3VycmVudFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gIGlmIChwcm9jZXNzLmVudi5ORUVEX0NVUlJFTlRTQ1JJUFRfUE9MWUZJTEwpIHtcbiAgICB2YXIgZ2V0Q3VycmVudFNjcmlwdCA9IHJlcXVpcmUoJ0Bzb2RhL2dldC1jdXJyZW50LXNjcmlwdCcpXG4gICAgY3VycmVudFNjcmlwdCA9IGdldEN1cnJlbnRTY3JpcHQoKVxuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJlY2F1c2UgcHJldmlvdXNseSB3ZSBkaXJlY3RseSBpbmNsdWRlZCB0aGUgcG9seWZpbGxcbiAgICBpZiAoISgnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICdjdXJyZW50U2NyaXB0JywgeyBnZXQ6IGdldEN1cnJlbnRTY3JpcHQgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgc3JjID0gY3VycmVudFNjcmlwdCAmJiBjdXJyZW50U2NyaXB0LnNyYy5tYXRjaCgvKC4rXFwvKVteL10rXFwuanMoXFw/LiopPyQvKVxuICBpZiAoc3JjKSB7XG4gICAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBzcmNbMV0gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG59XG5cbi8vIEluZGljYXRlIHRvIHdlYnBhY2sgdGhhdCB0aGlzIGZpbGUgY2FuIGJlIGNvbmNhdGVuYXRlZFxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0udG90YWw+MCk/X2MoJ2RpdicsW19jKCdlbC1wYWdpbmF0aW9uJyxfdm0uX2Ioe2F0dHJzOntcImJhY2tncm91bmRcIjpcIlwiLFwiY3VycmVudC1wYWdlXCI6X3ZtLmN1cnJlbnRQYWdlLFwicGFnZS1zaXplXCI6X3ZtLnBhZ2VTaXplLFwicGFnZS1zaXplc1wiOl92bS5wYWdlU2l6ZXMsXCJ0b3RhbFwiOl92bS50b3RhbCxcImxheW91dFwiOlwicHJldiwgcGFnZXIsIG5leHRcIn0sb246e1wic2l6ZS1jaGFuZ2VcIjpfdm0uaGFuZGxlU2l6ZUNoYW5nZSxcImN1cnJlbnQtY2hhbmdlXCI6X3ZtLmhhbmRsZUN1cnJlbnRDaGFuZ2V9fSwnZWwtcGFnaW5hdGlvbicsX3ZtLiRhdHRycyxmYWxzZSkpXSwxKTpfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZGl2IHYtaWY9XCJ0b3RhbD4wXCI+XHJcbiAgICAgICAgPGVsLXBhZ2luYXRpb25cclxuICAgICAgICAgICAgYmFja2dyb3VuZCBcclxuICAgICAgICAgICAgOmN1cnJlbnQtcGFnZT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZXM9XCJwYWdlU2l6ZXNcIlxyXG4gICAgICAgICAgICA6dG90YWw9XCJ0b3RhbFwiXHJcbiAgICAgICAgICAgIGxheW91dD1cInByZXYsIHBhZ2VyLCBuZXh0XCJcclxuICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgQHNpemUtY2hhbmdlPVwiaGFuZGxlU2l6ZUNoYW5nZVwiXHJcbiAgICAgICAgICAgIEBjdXJyZW50LWNoYW5nZT1cImhhbmRsZUN1cnJlbnRDaGFuZ2VcIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgICBleHBvcnQgZGVmYXVsdCB7XHJcbiAgICAgICAgbmFtZTogJ1BhZ2luYXRpb24nLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIHRvdGFsOiB7XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsaW1pdDoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMjBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemVzOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsxMCwgMTUsIDIwLCAzMCwgNTBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBjdXJyZW50UGFnZToge1xyXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGltaXRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOmxpbWl0JywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbENvdW50OiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRvdGFsJywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIGhhbmRsZVNpemVDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCBsaW1pdDogdmFsIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB2YWwsIGxpbWl0OiB0aGlzLnBhZ2VTaXplIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uZWwtcGFnaW5hdGlvbntcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNmI3MGZiNCZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yNmI3MGZiNCZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIyNmI3MGZiNFwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJwYWdlLXRhYmxlXCIsYXR0cnM6e1wiaWRcIjp0aGlzLnRhYmxlSWR9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidGFibGVcIn0sW19jKCdlbC1zY3JvbGxiYXInLHtzdGF0aWNTdHlsZTp7XCJoZWlnaHRcIjpcIjEwMCVcIn19LFtfYygnZWwtdGFibGUnLF92bS5fYih7cmVmOl92bS50YWJsZUlkLGF0dHJzOntcInN0cmlwZVwiOlwiXCIsXCJkYXRhXCI6X3ZtLmxpc3QsXCJyb3cta2V5XCI6X3ZtLnJvd0tleSxcImxvYWRcIjpfdm0ubG9hZCxcImhpZ2hsaWdodC1jdXJyZW50LXJvd1wiOl92bS5obGlnaHRDdXJyZW50Um93LFwiZGVmYXVsdC1leHBhbmQtYWxsXCI6X3ZtLmRlZmF1bHRFeHBhbmRBbGx9LG9uOntcInNlbGVjdFwiOl92bS5oYW5kZWxTZWxlY3Rpb25DaGFuZ2UsXCJzZWxlY3QtYWxsXCI6X3ZtLnNlbGVjdEFsbCxcInJvdy1jbGlja1wiOl92bS5oYW5kbGVSb3dDbGljayxcImV4cGFuZC1jaGFuZ2VcIjp2YWw9Pl92bS4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbCl9fSwnZWwtdGFibGUnLF92bS4kYXR0cnMsZmFsc2UpLFsoX3ZtLnNob3dDaGVja0JveCk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcInNlbGVjdGlvblwiLFwid2lkdGhcIjpcIjYwcHhcIixcImFsaWduXCI6XCJjZW50ZXJcIn19KTpfdm0uX2UoKSwoX3ZtLnNvcnROdW0pP19jKCdlbC10YWJsZS1jb2x1bW4nLHthdHRyczp7XCJ0eXBlXCI6XCJpbmRleFwiLFwid2lkdGhcIjpcIjYwcHhcIixcImxhYmVsXCI6XCLluo/lj7dcIixcImFsaWduXCI6XCJjZW50ZXJcIn0sc2NvcGVkU2xvdHM6X3ZtLl91KFt7a2V5OlwiZGVmYXVsdFwiLGZuOmZ1bmN0aW9uKHNjb3BlKXtyZXR1cm4gWyhfdm0ucGFnZSk/X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKChfdm0ucGFyYW1zLnBhZ2UtMSkqX3ZtLnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMSkpXSk6X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKHNjb3BlLiRpbmRleCsxKSldKV19fV0sbnVsbCxmYWxzZSwyNzg2MDA4MDIxKX0pOl92bS5fZSgpLF92bS5fdChcImRlZmF1bHRcIildLDIpXSwxKV0sMSksKF92bS5wYWdlKT9fYygnUGFnaW5hdGlvbicse2F0dHJzOntcInRvdGFsXCI6X3ZtLnRvdGFsLFwicGFnZVwiOl92bS5wYXJhbXMucGFnZSxcImxpbWl0XCI6X3ZtLnBhcmFtcy5saW1pdH0sb246e1widXBkYXRlOnBhZ2VcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJHNldChfdm0ucGFyYW1zLCBcInBhZ2VcIiwgJGV2ZW50KX0sXCJwYWdpbmF0aW9uXCI6X3ZtLmdldExpc3R9fSk6X3ZtLl9lKCldLDEpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLXRhYmxlXCIgOmlkPVwidGhpcy50YWJsZUlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxlbC1zY3JvbGxiYXIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxlbC10YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIHYtYmluZD1cIiRhdHRyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBlXHJcbiAgICAgICAgICAgICAgICAgICAgOnJlZj1cInRhYmxlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkYXRhPVwibGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnJvdy1rZXk9XCJyb3dLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpsb2FkPVwibG9hZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmhpZ2hsaWdodC1jdXJyZW50LXJvdz1cImhsaWdodEN1cnJlbnRSb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3Q9XCJoYW5kZWxTZWxlY3Rpb25DaGFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3QtYWxsPVwic2VsZWN0QWxsXCJcclxuICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdC1leHBhbmQtYWxsPVwiZGVmYXVsdEV4cGFuZEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHJvdy1jbGljaz1cImhhbmRsZVJvd0NsaWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBAZXhwYW5kLWNoYW5nZT1cInZhbD0+JGVtaXQoJ2V4cGFuZC1jaGFuZ2UnLCB2YWwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic2hvd0NoZWNrQm94XCIgdHlwZT1cInNlbGVjdGlvblwiIHdpZHRoPVwiNjBweFwiIGFsaWduPVwiY2VudGVyXCI+PC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic29ydE51bVwiIHR5cGU9XCJpbmRleFwiIHdpZHRoPVwiNjBweFwiIGxhYmVsPVwi5bqP5Y+3XCIgYWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHNsb3Qtc2NvcGU9XCJzY29wZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInBhZ2VcIj57eyhwYXJhbXMucGFnZS0xKSpwYXJhbXMubGltaXQrc2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57e3Njb3BlLiRpbmRleCsxfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9lbC10YWJsZT5cclxuICAgICAgICAgICAgPC9lbC1zY3JvbGxiYXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPFBhZ2luYXRpb24gdi1pZj1cInBhZ2VcIiA6dG90YWw9XCJ0b3RhbFwiIDpwYWdlLnN5bmM9XCJwYXJhbXMucGFnZVwiIDpsaW1pdD1cInBhcmFtcy5saW1pdFwiIEBwYWdpbmF0aW9uPVwiZ2V0TGlzdFwiIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ1BhZ2VUYWJsZScsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIC8vIOiHquWumuS5ieaVsOaNrlxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguWcsOWdgFxyXG4gICAgICAgIHVybDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDor7fmsYLmlrnlvI9cclxuICAgICAgICBtZXRob2Q6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnZ2V0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5piv5ZCm5pi+56S65bqP5Y+3XHJcbiAgICAgICAgc29ydE51bToge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbliIbpobVcclxuICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOagkeW9ouihqOagvOaXtu+8jOaYr+WQpuWFqOmDqOWxleW8gFxyXG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWIneWni+ivt+axguWPguaVsFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXM6IHtcclxuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+KHt9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6buY6K6k6YCJ5Lit5pWw5o2uXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PltdXHJcbiAgICAgICAgfSxcclxuICAgICAgICByb3dLZXk6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnaWQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBobGlnaHRDdXJyZW50Um93OiB7XHJcbiAgICAgICAgICAgIHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBkYXRhKG5ld1ZhbCl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IG5ld1ZhbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRTZWxlY3Q6IHtcclxuICAgICAgICAgICAgaGFuZGxlcigpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlZXA6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXMobmV3VmFsLCBvbGRWYWwpe1xyXG4gICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG5ld1ZhbCl7XHJcbiAgICAgICAgICAgICAgICBpZihuZXdWYWxba2V5XSAhPSBvbGRWYWxba2V5XSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7cGFnZTogMSwgbGltaXQ6IDE1LCAuLi5uZXdWYWx9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiAxNSxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFBhcmFtc1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgbGlzdDogW10sXHJcbiAgICAgICAgICAgIHRhYmxlSWQ6IGB0YWJsZV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNil9YCxcclxuICAgICAgICAgICAgc2VsZWN0RGF0YToge30sXHJcbiAgICAgICAgICAgIHNlbGVjdElkczogW11cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBpZih0aGlzLiRsaXN0ZW5lcnNbJ3NlbGVjdGlvbi1jaGFuZ2UnXSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5kYXRhKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gdGhpcy5kYXRhO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMuZGVmYXVsdFNlbGVjdCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV0gPSBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldExpc3QoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgLy8g6I635Y+W5pWw5o2uXHJcbiAgICAgICAgZ2V0TGlzdChwYWdlT3B0aW9uKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMudXJsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwYWdlT3B0aW9uKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlT3B0aW9uLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5saW1pdCA9IHBhZ2VPcHRpb24ubGltaXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIXRoaXMucGFnZSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJhbXMucGFnZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtcy5saW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlUGFyYW1zID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLiRyb3V0ZS5wYXRoKTtcclxuICAgICAgICAgICAgaWYoc3RvcmFnZVBhcmFtcyl7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuJHJvdXRlLnBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYW1zKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3dpdGNoKHRoaXMubWV0aG9kKXtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2dldCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaHR0cC5nZXQodGhpcy51cmwsIHRoaXMucGFyYW1zLCAocmVzKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwb3N0JzpcclxuICAgICAgICAgICAgICAgICAgICBodHRwLnBvc3QodGhpcy51cmwsIHRoaXMucGFyYW1zLCAocmVzKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfc2V0RGF0YShyZXMpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gcmVzLmRhdGEucmVjb3JkcztcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWwgPSByZXMuZGF0YS50b3RhbDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOiuvue9rum7mOiupOmAieS4rVxyXG4gICAgICAgIHNldENoZWNrZWQoKXtcclxuICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0U2VsZWN0Lmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gdGhpcy5kZWZhdWx0U2VsZWN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2hvd0NoZWNrQm94ICYmIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6buY6K6k6YCJ5Lit5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0SWRzLmluY2x1ZGVzKGl0ZW1bdGhpcy5yb3dLZXldKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOadoeS7tuafpeivolxyXG4gICAgICAgIHF1ZXJ5KHBhcmFtcz17fSl7XHJcbiAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7Li4udGhpcy5wYXJhbXMsIC4uLnBhcmFtcywgcGFnZTogMX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDngrnlh7vooYxcclxuICAgICAgICBoYW5kbGVSb3dDbGljayhyb3csIGNvbHVtbiwgZXZlbnQpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdyb3ctY2xpY2snLCByb3csIGNvbHVtbiwgZXZlbnQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGVsU2VsZWN0aW9uQ2hhbmdlKF8sIHJvdyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXSA9IHJvdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25MaXN0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHNlbGVjdGlvbkxpc3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uTGlzdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDlhajpgIkv5YWo5LiN6YCJXHJcbiAgICAgICAgc2VsZWN0QWxsKHNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgIGlmKHNlbGVjdGlvbi5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiBzZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTGlzdCA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3REYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBzZWxlY3Rpb25MaXN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsIHNlbGVjdGlvbkxpc3QpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0Q3VycmVudChpbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0uc2V0Q3VycmVudFJvdyh0aGlzLmxpc3RbaW5kZXhdKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldERhdGEoKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxvYWQodHJlZSwgdHJlZU5vZGUsIHJlc29sdmUpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdsb2FkJywgdHJlZSwgdHJlZU5vZGUsIHJlc29sdmUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuICAgIC5wYWdlLXRhYmxle1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBmbGV4OiAxIDEgYXV0bztcclxuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAudGFibGV7XHJcbiAgICAgICAgICAgIGZsZXg6IGF1dG8gMSAxO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUgdGhlYWR7XHJcbiAgICAgICAgY29sb3I6ICMzMzMzMzM7XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGx7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjdGQTtcclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZS0tbWluaSAuZWwtdGFibGVfX2NlbGx7XHJcbiAgICAgICAgcGFkZGluZzogM3B4IDA7XHJcbiAgICB9XHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1kOGRhMTQ0NiZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDhkYTE0NDYmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZDhkYTE0NDYmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiZDhkYTE0NDZcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gX2MoJ2VsLWRpYWxvZycsX3ZtLl9iKHtkaXJlY3RpdmVzOlt7bmFtZTpcImRpYWxvZ0RyYWdcIixyYXdOYW1lOlwidi1kaWFsb2dEcmFnXCJ9XSxzdGF0aWNTdHlsZTp7XCJtYXJnaW4tdG9wXCI6XCIwXCJ9LGF0dHJzOntcInRpdGxlXCI6X3ZtLnRpdGxlLFwidmlzaWJsZVwiOl92bS5kaWFsb2dWaXNpYmxlLFwiYmVmb3JlLWNsb3NlXCI6X3ZtLmhhbmRsZUNsb3NlLFwiY2VudGVyXCI6XCJcIixcImNsb3NlLW9uLWNsaWNrLW1vZGFsXCI6ZmFsc2UsXCJzaG93LWNsb3NlXCI6X3ZtLnNob3dDbG9zZSxcImFwcGVuZC10by1ib2R5XCI6XCJcIn19LCdlbC1kaWFsb2cnLF92bS4kYXR0cnMsZmFsc2UpLFtfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wib3ZlcmZsb3cteVwiOlwiYXV0b1wiLFwib3ZlcmZsb3cteFwiOlwiaGlkZGVuXCIsXCJwb3NpdGlvblwiOlwicmVsYXRpdmVcIn0sc3R5bGU6KHttYXhIZWlnaHQ6IF92bS5tYXhIZWlnaHQsIG1pbkhlaWdodDogX3ZtLm1pbkhlaWdodH0pfSxbX3ZtLl90KFwiZGVmYXVsdFwiKV0sMiksX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcInRleHQtYWxpZ25cIjpcImNlbnRlclwifSxhdHRyczp7XCJzbG90XCI6XCJmb290ZXJcIn0sc2xvdDpcImZvb3RlclwifSxbX3ZtLl90KFwiZm9vdGVyXCIpXSwyKV0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8vIHYtZGlhbG9nRHJhZzog5by556qX5ouW5ou9XHJcbmltcG9ydCBWdWUgZnJvbSAndnVlJztcclxuVnVlLmRpcmVjdGl2ZSgnZGlhbG9nRHJhZycsIHtcclxuICAgIGJpbmQoZWwpIHtcclxuXHRcdGNvbnN0IGRpYWxvZ0hlYWRlckVsID0gZWwucXVlcnlTZWxlY3RvcignLmVsLWRpYWxvZ19faGVhZGVyJyk7XHJcblx0XHRjb25zdCBkcmFnRG9tID0gZWwucXVlcnlTZWxlY3RvcignLmVsLWRpYWxvZycpO1xyXG5cdFx0ZGlhbG9nSGVhZGVyRWwuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xyXG5cclxuXHRcdC8vIOiOt+WPluWOn+acieWxnuaApyBpZSBkb23lhYPntKAuY3VycmVudFN0eWxlIOeBq+eLkOiwt+atjCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb23lhYPntKAsIG51bGwpO1xyXG5cdFx0Y29uc3Qgc3R5ID0gZHJhZ0RvbS5jdXJyZW50U3R5bGUgfHwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZHJhZ0RvbSwgbnVsbCk7XHJcblxyXG5cdFx0ZGlhbG9nSGVhZGVyRWwub25tb3VzZWRvd24gPSAoZXZlbnQpPT57XHJcblx0XHRcdC8vIOm8oOagh+aMieS4i++8jOiuoeeul+W9k+WJjeWFg+e0oOi3neemu+WPr+inhuWMuueahOi3neemu1xyXG5cdFx0XHRjb25zdCBkaXNYID0gZXZlbnQuY2xpZW50WCAtIGRpYWxvZ0hlYWRlckVsLm9mZnNldExlZnQ7XHJcblx0XHRcdGNvbnN0IGRpc1kgPSBldmVudC5jbGllbnRZIC0gZGlhbG9nSGVhZGVyRWwub2Zmc2V0VG9wO1xyXG5cclxuXHRcdFx0Ly8g6I635Y+W5Yiw55qE5YC85bimcHgg5q2j5YiZ5Yy56YWN5pu/5o2iXHJcblx0XHRcdGxldCBzdHlMPW51bGw7XHJcblx0XHRcdGxldCBzdHlUPW51bGw7XHJcblxyXG5cdFx0XHQvLyDms6jmhI/lnKhpZeS4rSDnrKzkuIDmrKHojrflj5bliLDnmoTlgLzkuLrnu4Tku7boh6rluKY1MCUg56e75Yqo5LmL5ZCO6LWL5YC85Li6cHhcclxuXHRcdFx0aWYgKHN0eS5sZWZ0LmluY2x1ZGVzKCdcXCUnKSkge1xyXG5cdFx0XHRcdHN0eUwgPSArZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCAqICgrc3R5LmxlZnQucmVwbGFjZSgvXFwlL2csICcnKSAvIDEwMCk7XHJcblx0XHRcdFx0c3R5VCA9ICtkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAqICgrc3R5LnRvcC5yZXBsYWNlKC9cXCUvZywgJycpIC8gMTAwKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRzdHlMID0gK3N0eS5sZWZ0LnJlcGxhY2UoL1xccHgvZywgJycpO1xyXG5cdFx0XHRcdHN0eVQgPSArc3R5LnRvcC5yZXBsYWNlKC9cXHB4L2csICcnKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0Ly8g6YCa6L+H5LqL5Lu25aeU5omY77yM6K6h566X56e75Yqo55qE6Led56a7XHJcblx0XHRcdFx0Y29uc3QgbCA9IGUuY2xpZW50WCAtIGRpc1g7XHJcblx0XHRcdFx0Y29uc3QgdCA9IGUuY2xpZW50WSAtIGRpc1k7XHJcblxyXG5cdFx0XHRcdC8vIOenu+WKqOW9k+WJjeWFg+e0oFxyXG5cdFx0XHRcdGRyYWdEb20uc3R5bGUubGVmdCA9IGAke2wgKyBzdHlMfXB4YDtcclxuXHRcdFx0XHRkcmFnRG9tLnN0eWxlLnRvcCA9IGAke3QgKyBzdHlUfXB4YDtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcclxuXHRcdFx0XHRkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHR9XHJcbn0pO1xyXG5cclxuVnVlLmRpcmVjdGl2ZSgncmVtb3ZlQXJpYUhpZGRlbicsIHtcclxuXHRiaW5kKGVsKSB7XHJcblx0XHRsZXQgYXJpYUVscyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC1yYWRpb19fb3JpZ2luYWwnKTtcclxuXHRcdGFyaWFFbHMuZm9yRWFjaCgoaXRlbSk9PntcclxuXHRcdFx0aXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pOyIsIjx0ZW1wbGF0ZT5cclxuICAgIDxlbC1kaWFsb2cgdi1iaW5kPVwiJGF0dHJzXCIgOnRpdGxlPVwidGl0bGVcIiA6dmlzaWJsZT1cImRpYWxvZ1Zpc2libGVcIiB2LWRpYWxvZ0RyYWcgOmJlZm9yZS1jbG9zZT1cImhhbmRsZUNsb3NlXCIgY2VudGVyIDpjbG9zZS1vbi1jbGljay1tb2RhbD1cImZhbHNlXCIgOnNob3ctY2xvc2U9XCJzaG93Q2xvc2VcIiBhcHBlbmQtdG8tYm9keSBzdHlsZT1cIm1hcmdpbi10b3A6IDA7XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87b3ZlcmZsb3cteDogaGlkZGVuO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIiA6c3R5bGU9XCJ7bWF4SGVpZ2h0LCBtaW5IZWlnaHR9XCI+XHJcbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHNsb3Q9XCJmb290ZXJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImZvb3RlclwiPjwvc2xvdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZWwtZGlhbG9nPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0ICcuL2RpYWxvZy1kcmFnJztcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ0RpYWxvZycsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJ+aPkOekuidcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1heEhlaWdodDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICc2MHZoJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWluSGVpZ2h0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJzE1MHB4J1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBkYXRhKCl7XHJcbiAgICAgICAgcmV0dXJue1xyXG4gICAgICAgICAgICBkaWFsb2dWaXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2xvc2U6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBtb3VudGVkKCl7XHJcbiAgICAgICAgaWYodGhpcy4kbGlzdGVuZXJzWydjbG9zZSddKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaGFuZGxlQ2xvc2UoKXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4vZGVlcC8uZWwtZGlhbG9nX19oZWFkZXJ7XHJcbiAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XHJcbn1cclxuL2RlZXAvLmVsLWRpYWxvZy0tY2VudGVyIC5lbC1kaWFsb2dfX2JvZHl7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG59XHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00MTQ4NzYyZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDE0ODc2MmUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDE0ODc2MmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNDE0ODc2MmVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gX2MoJ2VsLWNhcmQnLHtzdGF0aWNTdHlsZTp7XCJoZWlnaHRcIjpcImNhbGMoMTAwJSAtIDJweClcIixcIm92ZXJmbG93XCI6XCJhdXRvXCJ9LGF0dHJzOntcInNoYWRvd1wiOl92bS5zaGFkb3d9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwiY2xlYXJmaXhcIixhdHRyczp7XCJzbG90XCI6XCJoZWFkZXJcIn0sc2xvdDpcImhlYWRlclwifSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcImZvbnQtc2l6ZVwiOlwiMTZweFwifX0sWyhfdm0uJHNsb3RzWydjYXJkLXRpdGxlJ10pP1tfdm0uX3QoXCJjYXJkLXRpdGxlXCIpXTpbX3ZtLl92KFwiIFwiK192bS5fcyhfdm0udGl0bGUpK1wiIFwiKV1dLDIpLF9jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJmbGV4XCI6XCIxXCIsXCJwb3NpdGlvblwiOlwicmVsYXRpdmVcIn19LFtfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wicG9zaXRpb25cIjpcImFic29sdXRlXCIsXCJyaWdodFwiOlwiMHB4XCIsXCJ0b3BcIjpcIi0xNHB4XCIsXCJ3aWR0aFwiOlwiMTAwJVwiLFwidGV4dC1hbGlnblwiOlwicmlnaHRcIn19LFtfdm0uX3QoXCJjYXJkLXRvb2xzXCIpXSwyKV0pXSksX3ZtLl90KFwiZGVmYXVsdFwiKV0sMilcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxyXG4gICAgPGVsLWNhcmQgOnNoYWRvdz1cInNoYWRvd1wiIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSAycHgpO292ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgIDxkaXYgc2xvdD1cImhlYWRlclwiIGNsYXNzPVwiY2xlYXJmaXhcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweDtcIj5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiJHNsb3RzWydjYXJkLXRpdGxlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiY2FyZC10aXRsZVwiPjwvc2xvdD5cclxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7cG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTtyaWdodDogMHB4O3RvcDogLTE0cHg7d2lkdGg6IDEwMCU7dGV4dC1hbGlnbjogcmlnaHQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNhcmQtdG9vbHNcIj48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgPC9lbC1jYXJkPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ0NhcmQnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaGFkb3c6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XHJcbi5jbGVhcmZpeHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0wYzVkZTA2ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM1ZGUwNmUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MGM1ZGUwNmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiMGM1ZGUwNmVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gKF92bS5zaG93KT9fYygnZGl2JyxbKF92bS5kYXRhLmxlbmd0aCA+IDApP192bS5fbCgoX3ZtLmRhdGEpLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiBfYygnYXV0aC10cmVlJyx7a2V5Oml0ZW0uaWQsYXR0cnM6e1wiZGF0YVwiOml0ZW0sXCJwcm9wc1wiOl92bS5wcm9wc30sb246e1wib24tbm9kZS1leHBhbmRcIjooZGF0YSk9Pl92bS5vbkV4cGFuZChkYXRhKSxcIm9uLW5vZGUtY2hlY2tlZFwiOihkYXRhKT0+X3ZtLm9uQ2hlY2tlZChkYXRhKX19KX0pOl92bS5fZSgpXSwyKTpfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvLyDmmK/lkKbmnInlrZDoioLngrlcbmNvbnN0IGhhc0NoaWxkcmVuID0gKGRhdGEpPT57XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YS5jaGlsZHJlbikgJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwO1xufTtcblxuLy8g5Yib5bu66IqC54K5XG5leHBvcnQgY29uc3QgcmVuZGVyTGFiZWwgPSAoaCwgZGF0YSwgY29udGV4dCk9PntcbiAgICBjb25zdCB7cHJvcHMsIGxpc3RlbmVyc30gPSBjb250ZXh0O1xuICAgIGNvbnN0IGNsaWNrSGFuZGxlciA9IGxpc3RlbmVyc1snb24tbm9kZS1leHBhbmQnXTtcbiAgICBjb25zdCBjaGVja2VkSGFuZGxlciA9IGxpc3RlbmVyc1snb24tbm9kZS1jaGVja2VkJ107XG4gICAgY29uc3QgbGFiZWwgPSBkYXRhW3Byb3BzLnByb3BzLmxhYmVsXTtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgY2hpbGROb2Rlcy5wdXNoKGxhYmVsKTtcblxuICAgIGNvbnN0IGljb0NsYXNzID0gW107XG4gICAgaWYoaGFzQ2hpbGRyZW4oZGF0YSkpe1xuICAgICAgICBpZihkYXRhLmV4cGFuZCl7XG4gICAgICAgICAgICBpY29DbGFzcy5wdXNoKCdpY29uLWljb24tZHdvbicpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGljb0NsYXNzLnB1c2goJ2ljb24taWNvbl9yaWdodCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoKCdsaScsIHtcbiAgICB9LCBbXG4gICAgICAgIGgoJ2knLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogYGljb25mb250ICR7aWNvQ2xhc3Muam9pbignICcpfWBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IGAkezE0KmRhdGEuX2xldmV9cHhgLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMnB4KScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICcjNjY2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpPT57XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrSGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICcnKSxcbiAgICAgICAgaCgnaScsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBkYXRhLmNoZWNrZWQ/J2ljb25mb250IGljb24tZmFuZ3hpbmd4dWFuemhvbmdmaWwnOidpY29uZm9udCBpY29uLWZhbmd4aW5nd2VpeHVhbnpob25nJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICcjNjY2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpPT57XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRIYW5kbGVyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJycpLFxuICAgICAgICBoKCdzcGFuJywge1xuXG4gICAgICAgIH0sIGNoaWxkTm9kZXMpXG4gICAgXSk7XG59O1xuXG4vLyDliJvlu7ogbm9kZSDlrZDoioLngrlcbmV4cG9ydCBjb25zdCByZW5kZXJDaGlsZHJlbiA9IChoLCBsaXN0LCBleHBhbmQsIGNvbnRleHQpPT57XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkgJiYgbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBsaXN0Lm1hcChpdGVtPT57XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyTm9kZShoLCBpdGVtLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjbHMgPSBbJ3RyZWUtbm9kZS1jaGlsZHJlbiddO1xuICAgICAgICBpZighZXhwYW5kKXtcbiAgICAgICAgICAgIGNscy5wdXNoKCdleHBhbmQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaCgnZGl2Jywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNscy5qb2luKCcgJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyTm9kZSA9IChoLCBkYXRhLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBbXTtcbiAgICBjaGlsZE5vZGVzLnB1c2gocmVuZGVyTGFiZWwoaCwgZGF0YSwgY29udGV4dCkpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbjtcbiAgICBpZihoYXNDaGlsZHJlbihkYXRhKSl7XG4gICAgICAgIGNoaWxkTm9kZXMucHVzaChyZW5kZXJDaGlsZHJlbihoLCBjaGlsZHJlbiwgZGF0YS5leHBhbmQsIGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaCgndWwnLCB7XG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdub2RlJ1xuICAgICAgICB9XG4gICAgfSwgY2hpbGROb2Rlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKGgsIGNvbnRleHQpPT57XG4gICAgY29uc3Qge3Byb3BzfSA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIHJlbmRlck5vZGUoaCwgcHJvcHMuZGF0YSwgY29udGV4dCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZW5kZXI7IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgdi1pZj1cInNob3dcIj5cbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJkYXRhLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxhdXRoLXRyZWUgdi1mb3I9XCJpdGVtIGluIGRhdGFcIlxuICAgICAgICAgICAgICAgIDprZXk9XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpwcm9wcz1cInByb3BzXCJcbiAgICAgICAgICAgICAgICBAb24tbm9kZS1leHBhbmQ9XCIoZGF0YSk9Pm9uRXhwYW5kKGRhdGEpXCJcbiAgICAgICAgICAgICAgICBAb24tbm9kZS1jaGVja2VkPVwiKGRhdGEpPT5vbkNoZWNrZWQoZGF0YSlcIlxuICAgICAgICAgICAgPjwvYXV0aC10cmVlPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCByZW5kZXIgZnJvbSAnLi90cmVlJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnVHJlZScsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBBdXRoVHJlZToge1xuICAgICAgICAgICAgcmVuZGVyLFxuICAgICAgICAgICAgZnVuY3Rpb25hbDogdHJ1ZVxuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ25hbWUnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF0YSgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogMSxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgbGlzdDogW10sXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBpbml0KGRhdGEsIGxldmUpe1xuICAgICAgICAgICAgZGF0YS5fbGV2ZSA9IGxldmU7XG4gICAgICAgICAgICBpZihkYXRhLmNoaWxkcmVuICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgbGV2ZSsrO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEuY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoZGF0YS5jaGlsZHJlbltpXSwgbGV2ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDliLfmlrBcbiAgICAgICAgcmVmcmVzaCgpe1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5bGV5byAL+makOiXj1xuICAgICAgICBvbkV4cGFuZChkYXRhKXtcbiAgICAgICAgICAgIGRhdGEuZXhwYW5kID0gIWRhdGEuZXhwYW5kO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmAieS4rS/lj5bmtojpgInkuK1cbiAgICAgICAgb25DaGVja2VkKGRhdGEpe1xuICAgICAgICAgICAgZGF0YS5jaGVja2VkID0gIWRhdGEuY2hlY2tlZDtcbiAgICAgICAgICAgIHRoaXMudG9vbGVyQ2hlY2tlZCh0aGlzLmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRDaGVja2VkKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbGVyQ2hlY2tlZChsaXN0LCBub2RlKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGxpc3Qpe1xuICAgICAgICAgICAgICAgIGlmKGxpc3RbaV0uaWQgPT09IG5vZGUuaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoaWxkQ2hlY2tlZChsaXN0W2ldLmNoaWxkcmVuLCBsaXN0W2ldLmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xlckNoZWNrZWQobGlzdFtpXS5jaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDpgInkuK3oioLngrnml7bvvIzorr7nva7lrZDoioLngrnlhajpgIlcbiAgICAgICAgc2V0Q2hpbGRDaGVja2VkKGNoaWxkcmVuLCBjaGVja2VkKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoaWxkQ2hlY2tlZChjaGlsZHJlbltpXS5jaGlsZHJlbiwgY2hlY2tlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiuvue9rueItuiKgueCuemAieS4rVxuICAgICAgICBzZXRQYXJlbnRDaGVja2VkKGRhdGEpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkSXNDaGVja2VkKGRhdGFbaV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5Yik5pat6IqC54K555qE5a2Q6IqC54K55piv5ZCm5pyJ6YCJ5LitXG4gICAgICAgIGNoaWxkSXNDaGVja2VkKGNoaWxkcmVuKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZElzQ2hlY2tlZChjaGlsZHJlbltpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDorr7nva7pu5jorqTpgInkuK1cbiAgICAgICAgc2V0RGVmYXVsdENoZWNrZWQoZGVmYXVsdElkcyl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkZWZhdWx0SWRzKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQodGhpcy5kYXRhLCBkZWZhdWx0SWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZCh0aGlzLmRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDmoLnmja7miYDnu5nnmoRpZO+8jOiuvue9ruaUuemhuemAieS4rVxuICAgICAgICBzZXRDaGVja2VkKGRhdGEsIGlkKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uaWQgPT09IGlkKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiOt+WPlumAieS4remAieeahGtleVxuICAgICAgICBnZXRDaGVja2VkS2V5cygpe1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZEtleXModGhpcy5kYXRhLCBrZXlzKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgY3ljoblh7rpgInkuK3pgInnmoRrZXlcbiAgICAgICAgX2dldENoZWNrZWRLZXlzKGRhdGEsIGtleXMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRhdGFbaV0uaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWRLZXlzKGRhdGFbaV0uY2hpbGRyZW4sIGtleXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6I635Y+W6YCJ5Lit6YCJ55qE6IqC54K5XG4gICAgICAgIGdldENoZWNrZWROb2Rlcygpe1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWROb2Rlcyh0aGlzLmRhdGEsIG5vZGVzKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YGN5Y6G5Ye66YCJ5Lit6YCJ55qE6IqC54K5XG4gICAgICAgIF9nZXRDaGVja2VkTm9kZXMoZGF0YSwgbm9kZXMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChkYXRhW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkTm9kZXMoZGF0YVtpXS5jaGlsZHJlbiwgbm9kZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2F0Y2g6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaSBpbiB0aGlzLmRhdGEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQodGhpcy5kYXRhW2ldLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICB9XG4gICAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIiBzY29wZWQ+XG5AaW1wb3J0IHVybCguL2ljb24vaWNvbmZvbnQuY3NzKTtcbnVse1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgIGxpe1xuICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIC5jaGVjay1pY297XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBoZWlnaHQ6IDVweDtcbiAgICAgICAgICAgIHdpZHRoOiA1cHg7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpOmhvdmVye1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRjb2xvcjogIzAwMDAwMCwgJGFscGhhOiAwLjEpO1xuICAgIH1cblxuICAgIC5leHBhbmR7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVlODFlMDVlJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZTgxZTA1ZSZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01ZTgxZTA1ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI1ZTgxZTA1ZVwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHtcbiAgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpO1xuICB9XG59IiwiaW1wb3J0IGNoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24gZnJvbSBcIi4vY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICBjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7XG4gIHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7XG59IiwiaW1wb3J0IGFzc2VydENsYXNzQnJhbmQgZnJvbSBcIi4vYXNzZXJ0Q2xhc3NCcmFuZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0MihzLCBhLCByKSB7XG4gIHJldHVybiBzLnNldChhc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjtcbn0iLCJpbXBvcnQgYXNzZXJ0Q2xhc3NCcmFuZCBmcm9tIFwiLi9hc3NlcnRDbGFzc0JyYW5kLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQyKHMsIGEpIHtcbiAgcmV0dXJuIHMuZ2V0KGFzc2VydENsYXNzQnJhbmQocywgYSkpO1xufSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsXG4iLCJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnZcbn1cbiIsImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuL25vZGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9jb21tb24vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChkYXRhICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi8uLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuLy4uL2hlbHBlcnMvY29va2llcy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi8uLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBzcGVlZG9tZXRlciBmcm9tICcuLi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzJztcblxuZnVuY3Rpb24gcHJvZ3Jlc3NFdmVudFJlZHVjZXIobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0pIHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZVxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9O1xufVxuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCB3aXRoWFNSRlRva2VufSA9IGNvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKGZhbHNlKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSByZXF1ZXN0SGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZihwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4oY29uZmlnKSk7XG5cbiAgICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSkge1xuICAgICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgICAgY29uc3QgeHNyZlZhbHVlID0gY29uZmlnLnhzcmZIZWFkZXJOYW1lICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKTtcblxuICAgICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KGNvbmZpZy54c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tIFwiLi4vYWRhcHRlcnMvYWRhcHRlcnMuanNcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB0aGluZy50b0pTT04oKSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjYuN1wiOyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuXG4gICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iLCJjb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwe1xyXG4gICAgI2F4aW9zO1xyXG4gICAgI3JlcXVlc3RDb3VudCA9IDA7IC8vIOivt+axguasoeaVsFxyXG4gICAgI2xvYWRpbmdJbnN0YW5jZSA9IG51bGw7XHJcbiAgICAjY29uZmlnID0ge1xyXG4gICAgICAgIGJhc2VVUkw6ICcnLFxyXG4gICAgICAgIHRpbWVvdXQ6IDYwICogMTAwMCxcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxyXG4gICAgICAgIHN1Y2Nlc3NDb2RlOiAyMDAsXHJcbiAgICAgICAgZXJyb3JDb2RlOiA1MDAsXHJcbiAgICAgICAgdG9rZW5LZXk6ICd0b2tlbicsXHJcbiAgICAgICAgc3RvcmFnZTogJ3Nlc3Npb24nLFxyXG4gICAgICAgIGNhbGxCYWNrQ29kZTogW10sXHJcbiAgICAgICAgY2FsbDogbnVsbFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICAgICAgZm9yKGNvbnN0IGsgaW4gdGhpcy4jY29uZmlnKXtcclxuICAgICAgICAgICAgaWYob3B0aW9uc1trXSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb25maWdba10gPSBvcHRpb25zW2tdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgICAgYXhpb3MuZGVmYXVsdHMuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MgPSBheGlvcy5jcmVhdGUodGhpcy4jY29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxyXG4gICAgICAgICAgICBjb25maWc9PntcclxuICAgICAgICAgICAgICAgIGlmKCFjb25maWcucGFyYW1zKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlID0gbG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG9rZW4gPSAnJztcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI2NvbmZpZy5zdG9yYWdlID09PSAnc2Vzc2lvbicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLiNjb25maWcudG9rZW5LZXkpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodGhpcy4jY29uZmlnLnN0b3JhZ2UgPT09ICdsb2NhbCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy4jY29uZmlnLnRva2VuS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzW3RoaXMuI2NvbmZpZy50b2tlbktleV0gPSB0b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yPT57XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLiNheGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxyXG4gICAgICAgICAgICByZXNwb25zZT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50LS07XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNyZXF1ZXN0Q291bnQtLTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI3JlcXVlc3RDb3VudCA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZ0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyl7XHJcbiAgICAgICAgaWYoIXJlcyl7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzLmNvZGUgPT09IHRoaXMuI2NvbmZpZy5zdWNjZXNzQ29kZSl7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYocmVzLmNvZGUgPT09IHRoaXMuI2NvbmZpZy5lcnJvckNvZGUpe1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZXJyKHJlcyk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZXJyb3IocmVzLm1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZSBpZih0aGlzLiNjb25maWcuY2FsbEJhY2tDb2RlLmluY2x1ZGVzKHJlcy5jb2RlKSAmJiB0eXBlb2YgdGhpcy4jY29uZmlnLmNhbGwgPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICB0aGlzLiNjb25maWcuY2FsbChyZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwb3N0KHVybCxwYXJhbXMsc3VjY2VzcyxlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnBvc3QodXJsLHBhcmFtcykudGhlbihyZXM9PntcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUodXJsLHBhcmFtcyxzdWNjZXNzLGVycil7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MudXBkYXRlKHVybCxwYXJhbXMpLnRoZW4ocmVzPT57XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KHVybCwgcGFyYW1zLCBzdWNjZXNzLCBlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLmdldCh1cmwsIHsgcGFyYW1zOiBwYXJhbXN9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKHVybCwgcGFyYW1zLCBzdWNjZXNzLCBlcnIpe1xyXG5cdFx0dGhpcy4jYXhpb3MuZGVsZXRlKHVybCwgeyBwYXJhbXM6IHBhcmFtc30pLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0dGhpcy5faGFuZGxlUmVzdWx0KHN1Y2Nlc3MsZXJyLHJlcyk7XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcbiAgICBkb3duTG9hZCh1cmwsIHBhcmFtcz17fSl7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MucG9zdCh1cmwsIHBhcmFtcywgeydyZXNwb25zZVR5cGUnOiAnYmxvYid9KS50aGVuKHJlcz0+e1xyXG5cdFx0XHRpZihyZXMpe1xyXG5cdFx0XHRcdGxldCBmaWxlTmFtZSA9IHBhcmFtcy5maWxlTmFtZTtcclxuXHRcdFx0XHRpZighZmlsZU5hbWUpe1xyXG5cdFx0XHRcdFx0ZmlsZU5hbWUgPSByZXMuaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddLnNwbGl0KCdmaWxlbmFtZT0nKVsxXS5yZXBsYWNlKC9cIi9nLCAnJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmRhdGFdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtjaGFyc2V0PVVURi04J30pO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcblx0XHRcdFx0bGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHRcdGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cdFx0XHRcdGxpbmsuZG93bmxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpO1xyXG5cdFx0XHRcdGxpbmsuY2xpY2soKTtcclxuXHRcdFx0XHR3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChsaW5rLmhyZWYpO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJyZXF1aXJlKCcuL21lc3NhZ2UvaW5kZXguanMnKTtcclxuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSAnLi9wYWdpbmF0aW9uL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBQYWdlVGFibGUgZnJvbSAnLi9wYWdlLXRhYmxlL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi9kaWFsb2cvSW5kZXgudnVlJztcclxuaW1wb3J0IENhcmQgZnJvbSAnLi9jYXJkL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBUcmVlIGZyb20gJy4vdHJlZS9JbmRleC52dWUnO1xyXG5pbXBvcnQgX0h0dHAgZnJvbSAnLi9odHRwL2luZGV4LmpzJztcclxuY29uc3QgY29tcyA9IFtQYWdpbmF0aW9uLCBQYWdlVGFibGUsIERpYWxvZywgQ2FyZCwgVHJlZV07XHJcbmNvbnN0IGluc3RhbGwgPSBmdW5jdGlvbihWdWUpe1xyXG4gICAgY29tcy5mb3JFYWNoKGNvbSA9PiB7XHJcbiAgICAgICAgVnVlLmNvbXBvbmVudChjb20ubmFtZSwgY29tKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbi8vIOWvvOWHuue7hOS7tlxyXG5leHBvcnQgZGVmYXVsdCBpbnN0YWxsO1xyXG5cclxuZXhwb3J0IGNsYXNzIEh0dHAgZXh0ZW5kcyBfSHR0cHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0ICcuL3NldFB1YmxpY1BhdGgnXG5pbXBvcnQgbW9kIGZyb20gJ35lbnRyeSdcbmV4cG9ydCBkZWZhdWx0IG1vZFxuZXhwb3J0ICogZnJvbSAnfmVudHJ5J1xuIl0sIm5hbWVzIjpbInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJ0b3RhbCIsIl9iIiwiYXR0cnMiLCJjdXJyZW50UGFnZSIsInBhZ2VTaXplIiwicGFnZVNpemVzIiwib24iLCJoYW5kbGVTaXplQ2hhbmdlIiwiaGFuZGxlQ3VycmVudENoYW5nZSIsIiRhdHRycyIsIl9lIiwic3RhdGljUmVuZGVyRm5zIiwibmFtZSIsInByb3BzIiwicmVxdWlyZWQiLCJ0eXBlIiwiTnVtYmVyIiwiZGVmYXVsdCIsInBhZ2UiLCJsaW1pdCIsIkFycmF5IiwiY29tcHV0ZWQiLCJnZXQiLCJzZXQiLCJ2YWwiLCIkZW1pdCIsInRvdGFsQ291bnQiLCJtZXRob2RzIiwic3RhdGljQ2xhc3MiLCJ0YWJsZUlkIiwic3RhdGljU3R5bGUiLCJyZWYiLCJsaXN0Iiwicm93S2V5IiwibG9hZCIsImhsaWdodEN1cnJlbnRSb3ciLCJkZWZhdWx0RXhwYW5kQWxsIiwiaGFuZGVsU2VsZWN0aW9uQ2hhbmdlIiwic2VsZWN0QWxsIiwiaGFuZGxlUm93Q2xpY2siLCJzaG93Q2hlY2tCb3giLCJzb3J0TnVtIiwic2NvcGVkU2xvdHMiLCJfdSIsImtleSIsImZuIiwic2NvcGUiLCJfdiIsIl9zIiwicGFyYW1zIiwiJGluZGV4IiwiX3QiLCJ1cGRhdGU6cGFnZSIsIiRldmVudCIsIiRzZXQiLCJnZXRMaXN0IiwiZGF0YSIsInVybCIsIlN0cmluZyIsIm1ldGhvZCIsIkJvb2xlYW4iLCJkZWZhdWx0UGFyYW1zIiwiT2JqZWN0IiwiZGVmYXVsdFNlbGVjdCIsInlwZSIsIndhdGNoIiwibmV3VmFsIiwiaGFuZGxlciIsInNldENoZWNrZWQiLCJkZWVwIiwib2xkVmFsIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyaW5nIiwic2VsZWN0RGF0YSIsInNlbGVjdElkcyIsIm1vdW50ZWQiLCIkbGlzdGVuZXJzIiwiaXRlbSIsInBhZ2VPcHRpb24iLCJzdG9yYWdlUGFyYW1zIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiJHJvdXRlIiwicGF0aCIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiaHR0cCIsInJlcyIsIl9zZXREYXRhIiwicG9zdCIsInJlY29yZHMiLCJsZW5ndGgiLCJtYXAiLCIkbmV4dFRpY2siLCIkcmVmcyIsImluY2x1ZGVzIiwidG9nZ2xlUm93U2VsZWN0aW9uIiwicXVlcnkiLCJrZXlzIiwicm93IiwiY29sdW1uIiwiZXZlbnQiLCJfIiwic2VsZWN0aW9uTGlzdCIsInZhbHVlcyIsInNlbGVjdGlvbiIsInNldEN1cnJlbnQiLCJpbmRleCIsInNldEN1cnJlbnRSb3ciLCJnZXREYXRhIiwidHJlZSIsInRyZWVOb2RlIiwicmVzb2x2ZSIsImRpcmVjdGl2ZXMiLCJyYXdOYW1lIiwidGl0bGUiLCJkaWFsb2dWaXNpYmxlIiwiaGFuZGxlQ2xvc2UiLCJzaG93Q2xvc2UiLCJzdHlsZSIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsInNsb3QiLCJWdWUiLCJkaXJlY3RpdmUiLCJiaW5kIiwiZWwiLCJkaWFsb2dIZWFkZXJFbCIsInF1ZXJ5U2VsZWN0b3IiLCJkcmFnRG9tIiwiY3Vyc29yIiwic3R5IiwiY3VycmVudFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm9ubW91c2Vkb3duIiwiZGlzWCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwiZGlzWSIsImNsaWVudFkiLCJvZmZzZXRUb3AiLCJzdHlMIiwic3R5VCIsImxlZnQiLCJkb2N1bWVudCIsImJvZHkiLCJjbGllbnRXaWR0aCIsInJlcGxhY2UiLCJjbGllbnRIZWlnaHQiLCJ0b3AiLCJvbm1vdXNlbW92ZSIsImUiLCJsIiwidCIsIm9ubW91c2V1cCIsImFyaWFFbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInJlbW92ZUF0dHJpYnV0ZSIsInNoYWRvdyIsIiRzbG90cyIsInNob3ciLCJfbCIsImlkIiwib25FeHBhbmQiLCJvbkNoZWNrZWQiLCJoYXNDaGlsZHJlbiIsImlzQXJyYXkiLCJjaGlsZHJlbiIsInJlbmRlckxhYmVsIiwiaCIsImNvbnRleHQiLCJsaXN0ZW5lcnMiLCJjbGlja0hhbmRsZXIiLCJjaGVja2VkSGFuZGxlciIsImxhYmVsIiwiY2hpbGROb2RlcyIsInB1c2giLCJpY29DbGFzcyIsImV4cGFuZCIsImRvbVByb3BzIiwiY2xhc3NOYW1lIiwiam9pbiIsIm1hcmdpbkxlZnQiLCJfbGV2ZSIsImZvbnRTaXplIiwidHJhbnNmb3JtIiwiY29sb3IiLCJjbGljayIsImNoZWNrZWQiLCJyZW5kZXJDaGlsZHJlbiIsInJlbmRlck5vZGUiLCJjbHMiLCJjb21wb25lbnRzIiwiQXV0aFRyZWUiLCJmdW5jdGlvbmFsIiwiaW5pdCIsImxldmUiLCJpIiwicmVmcmVzaCIsInRvb2xlckNoZWNrZWQiLCJzZXRQYXJlbnRDaGVja2VkIiwibm9kZSIsInNldENoaWxkQ2hlY2tlZCIsImNoaWxkSXNDaGVja2VkIiwic2V0RGVmYXVsdENoZWNrZWQiLCJkZWZhdWx0SWRzIiwiZ2V0Q2hlY2tlZEtleXMiLCJfZ2V0Q2hlY2tlZEtleXMiLCJnZXRDaGVja2VkTm9kZXMiLCJub2RlcyIsIl9nZXRDaGVja2VkTm9kZXMiLCJpbW1lZGlhdGUiLCJfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIm9iaiIsInByaXZhdGVDb2xsZWN0aW9uIiwiaGFzIiwiVHlwZUVycm9yIiwiY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbiIsIl9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjIiwicHJpdmF0ZU1hcCIsInZhbHVlIiwiX2Fzc2VydENsYXNzQnJhbmQiLCJuIiwiYXJndW1lbnRzIiwiYXNzZXJ0Q2xhc3NCcmFuZCIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldDIiLCJzIiwiYSIsInIiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQyIiwidGhpc0FyZyIsIndyYXAiLCJhcHBseSIsInByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInN0ciIsImNhbGwiLCJzbGljZSIsInRvTG93ZXJDYXNlIiwiY3JlYXRlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiaXNBcnJheUJ1ZmZlciIsImlzQXJyYXlCdWZmZXJWaWV3IiwicmVzdWx0IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc0Jvb2xlYW4iLCJpc1BsYWluT2JqZWN0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1N0cmVhbSIsInBpcGUiLCJpc0Zvcm1EYXRhIiwia2luZCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJ0cmltIiwiYWxsT3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsImdsb2JhbCIsImlzQ29udGV4dERlZmluZWQiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydHkiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsInByb3AiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwidW5kZWZpbmVkIiwibGFzdEluZGV4IiwiaW5kZXhPZiIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImZvckVhY2hFbnRyeSIsImdlbmVyYXRvciIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJpc0hUTUxGb3JtIiwidG9DYW1lbENhc2UiLCJyZXBsYWNlciIsIm0iLCJwMSIsInAyIiwidG9VcHBlckNhc2UiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZnJlZXplTWV0aG9kcyIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsIkVycm9yIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwic3BsaXQiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJpc0Zpbml0ZSIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQUJFVCIsIkFMUEhBX0RJR0lUIiwiZ2VuZXJhdGVTdHJpbmciLCJzaXplIiwiYWxwaGFiZXQiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInNvdXJjZSIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzQXN5bmNGbiIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJoYXNPd25Qcm9wIiwidXRpbHMiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhdHVzIiwiZnJvbSIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJQbGF0Zm9ybUZvcm1EYXRhIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJjb25jYXQiLCJlYWNoIiwidG9rZW4iLCJpc0ZsYXRBcnJheSIsInNvbWUiLCJwcmVkaWNhdGVzIiwidGVzdCIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm9wdGlvbnMiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsImRlZmluZWQiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJfQmxvYiIsIkJsb2IiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwidG9JU09TdHJpbmciLCJCdWZmZXIiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGVyIiwiX2VuY29kZSIsImJ1aWxkVVJMIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiZm9yRWFjaEhhbmRsZXIiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsIlVSTFNlYXJjaFBhcmFtcyIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsInBsYXRmb3JtIiwidG9VUkxFbmNvZGVkRm9ybSIsImhlbHBlcnMiLCJpc05vZGUiLCJwYXJzZVByb3BQYXRoIiwiYXJyYXlUb09iamVjdCIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiZW50cmllcyIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic3RyaW5naWZ5U2FmZWx5IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJpZ25vcmVEdXBsaWNhdGVPZiIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsImhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwicGFyc2VUb2tlbnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsImlzVmFsaWRIZWFkZXJOYW1lIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsImZvcm1hdEhlYWRlciIsInciLCJjaGFyIiwiYnVpbGRBY2Nlc3NvcnMiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZSIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJhY2Nlc3NvciIsImludGVybmFscyIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImZsb29yIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsImJ1aWxkRnVsbFBhdGgiLCJyZXF1ZXN0ZWRVUkwiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsImlzVVJMU2FtZU9yaWdpbiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJwYXJzZVByb3RvY29sIiwic3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJoZWFkIiwidGFpbCIsImZpcnN0U2FtcGxlVFMiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsImNvb2tpZXMiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJpblJhbmdlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJkaXNwYXRjaFhoclJlcXVlc3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwid2l0aFhTUkZUb2tlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWxUb2tlbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJidG9hIiwiZnVsbFBhdGgiLCJvcGVuIiwicGFyYW1zU2VyaWFsaXplciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlRGF0YSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJlcnIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJoYW5kbGVFcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJ4c3JmVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2l0aENyZWRlbnRpYWxzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJzZW5kIiwiaHR0cEFkYXB0ZXIiLCJ4aHJBZGFwdGVyIiwia25vd25BZGFwdGVycyIsInhociIsInJlbmRlclJlYXNvbiIsInJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJnZXRBZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwib25BZGFwdGVyUmVqZWN0aW9uIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJ0aW1lb3V0TWVzc2FnZSIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbXB1dGVDb25maWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiVkVSU0lPTiIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiX3JlcXVlc3QiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJ1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInB1c2hSZXNwb25zZUludGVyY2VwdG9ycyIsInByb21pc2UiLCJjaGFpbiIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZvckVhY2hNZXRob2ROb0RhdGEiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJodHRwTWV0aG9kIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZUV4ZWN1dG9yIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwic3BsaWNlIiwiYyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsIkh0dHBTdGF0dXNDb2RlIiwiQ29udGludWUiLCJTd2l0Y2hpbmdQcm90b2NvbHMiLCJQcm9jZXNzaW5nIiwiRWFybHlIaW50cyIsIk9rIiwiQ3JlYXRlZCIsIkFjY2VwdGVkIiwiTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIiwiTm9Db250ZW50IiwiUmVzZXRDb250ZW50IiwiUGFydGlhbENvbnRlbnQiLCJNdWx0aVN0YXR1cyIsIkFscmVhZHlSZXBvcnRlZCIsIkltVXNlZCIsIk11bHRpcGxlQ2hvaWNlcyIsIk1vdmVkUGVybWFuZW50bHkiLCJGb3VuZCIsIlNlZU90aGVyIiwiTm90TW9kaWZpZWQiLCJVc2VQcm94eSIsIlVudXNlZCIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiUGVybWFuZW50UmVkaXJlY3QiLCJCYWRSZXF1ZXN0IiwiVW5hdXRob3JpemVkIiwiUGF5bWVudFJlcXVpcmVkIiwiRm9yYmlkZGVuIiwiTm90Rm91bmQiLCJNZXRob2ROb3RBbGxvd2VkIiwiTm90QWNjZXB0YWJsZSIsIlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsIlJlcXVlc3RUaW1lb3V0IiwiQ29uZmxpY3QiLCJHb25lIiwiTGVuZ3RoUmVxdWlyZWQiLCJQcmVjb25kaXRpb25GYWlsZWQiLCJQYXlsb2FkVG9vTGFyZ2UiLCJVcmlUb29Mb25nIiwiVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLCJSYW5nZU5vdFNhdGlzZmlhYmxlIiwiRXhwZWN0YXRpb25GYWlsZWQiLCJJbUFUZWFwb3QiLCJNaXNkaXJlY3RlZFJlcXVlc3QiLCJVbnByb2Nlc3NhYmxlRW50aXR5IiwiTG9ja2VkIiwiRmFpbGVkRGVwZW5kZW5jeSIsIlRvb0Vhcmx5IiwiVXBncmFkZVJlcXVpcmVkIiwiUHJlY29uZGl0aW9uUmVxdWlyZWQiLCJUb29NYW55UmVxdWVzdHMiLCJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLCJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsIkludGVybmFsU2VydmVyRXJyb3IiLCJOb3RJbXBsZW1lbnRlZCIsIkJhZEdhdGV3YXkiLCJTZXJ2aWNlVW5hdmFpbGFibGUiLCJHYXRld2F5VGltZW91dCIsIkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIiwiVmFyaWFudEFsc29OZWdvdGlhdGVzIiwiSW5zdWZmaWNpZW50U3RvcmFnZSIsIkxvb3BEZXRlY3RlZCIsIk5vdEV4dGVuZGVkIiwiTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJmb3JtVG9KU09OIiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwiX2F4aW9zIiwiV2Vha01hcCIsIl9yZXF1ZXN0Q291bnQiLCJfbG9hZGluZ0luc3RhbmNlIiwiX2NvbmZpZyIsIkh0dHAiLCJzdWNjZXNzQ29kZSIsImVycm9yQ29kZSIsInRva2VuS2V5Iiwic3RvcmFnZSIsImNhbGxCYWNrQ29kZSIsImsiLCJfdGhpcyRyZXF1ZXN0Q291bnQiLCJfdGhpcyRyZXF1ZXN0Q291bnQyIiwibG9hZGluZyIsImxvY2FsU3RvcmFnZSIsIl90aGlzJHJlcXVlc3RDb3VudDMiLCJfdGhpcyRyZXF1ZXN0Q291bnQ0IiwiY2xvc2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQ1IiwiX3RoaXMkcmVxdWVzdENvdW50NiIsIl9oYW5kbGVSZXN1bHQiLCJzdWNjZXNzIiwibXNnIiwidXBkYXRlIiwiZG93bkxvYWQiLCJibG9iIiwibGluayIsImRpc3BsYXkiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJkb3dubG9hZCIsInJldm9rZU9iamVjdFVSTCIsInJlcXVpcmUiLCJQYWdpbmF0aW9uIiwiUGFnZVRhYmxlIiwiRGlhbG9nIiwiQ2FyZCIsIlRyZWUiLCJfSHR0cCIsImNvbXMiLCJpbnN0YWxsIiwiY29tIiwiY29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5501\n");
26
+ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n Http: function() { return /* reexport */ Http; },\n \"default\": function() { return /* binding */ entry_lib; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/axios/lib/platform/common/utils.js\nvar common_utils_namespaceObject = {};\n__webpack_require__.r(common_utils_namespaceObject);\n__webpack_require__.d(common_utils_namespaceObject, {\n hasBrowserEnv: function() { return hasBrowserEnv; },\n hasStandardBrowserEnv: function() { return hasStandardBrowserEnv; },\n hasStandardBrowserWebWorkerEnv: function() { return hasStandardBrowserWebWorkerEnv; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=template&id=26b70fb4&scoped=true\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.total > 0 ? _c('div', [_c('el-pagination', _vm._b({\n attrs: {\n \"background\": \"\",\n \"current-page\": _vm.currentPage,\n \"page-size\": _vm.pageSize,\n \"page-sizes\": _vm.pageSizes,\n \"total\": _vm.total,\n \"layout\": \"prev, pager, next\"\n },\n on: {\n \"size-change\": _vm.handleSizeChange,\n \"current-change\": _vm.handleCurrentChange\n }\n }, 'el-pagination', _vm.$attrs, false))], 1) : _vm._e();\n};\nvar staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var Indexvue_type_script_lang_js = ({\n name: 'Pagination',\n props: {\n total: {\n required: true,\n type: Number,\n default: 0\n },\n page: {\n type: Number,\n default: 1\n },\n limit: {\n type: Number,\n default: 20\n },\n pageSizes: {\n type: Array,\n default() {\n return [10, 15, 20, 30, 50];\n }\n }\n },\n computed: {\n currentPage: {\n get() {\n return this.page;\n },\n set(val) {\n this.$emit('update:page', val);\n }\n },\n pageSize: {\n get() {\n return this.limit;\n },\n set(val) {\n this.$emit('update:limit', val);\n }\n },\n totalCount: {\n get() {\n return this.total;\n },\n set(val) {\n this.$emit('update:total', val);\n }\n }\n },\n methods: {\n handleSizeChange(val) {\n this.$emit('pagination', {\n page: this.currentPage,\n limit: val\n });\n },\n handleCurrentChange(val) {\n this.$emit('pagination', {\n page: val,\n limit: this.pageSize\n });\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var pagination_Indexvue_type_script_lang_js = (Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue?vue&type=style&index=0&id=26b70fb4&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n;// CONCATENATED MODULE: ./src/components/pagination/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n pagination_Indexvue_type_script_lang_js,\n render,\n staticRenderFns,\n false,\n null,\n \"26b70fb4\",\n null\n \n)\n\n/* harmony default export */ var Index = (component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=template&id=d8da1446&scoped=true\nvar Indexvue_type_template_id_d8da1446_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('div', {\n staticClass: \"page-table\",\n attrs: {\n \"id\": this.tableId\n }\n }, [_c('div', {\n staticClass: \"table\"\n }, [_c('el-scrollbar', {\n staticStyle: {\n \"height\": \"100%\"\n }\n }, [_c('el-table', _vm._b({\n ref: _vm.tableId,\n attrs: {\n \"stripe\": \"\",\n \"data\": _vm.list,\n \"row-key\": _vm.rowKey,\n \"load\": _vm.load,\n \"highlight-current-row\": _vm.hlightCurrentRow,\n \"default-expand-all\": _vm.defaultExpandAll\n },\n on: {\n \"select\": _vm.handelSelectionChange,\n \"select-all\": _vm.selectAll,\n \"row-click\": _vm.handleRowClick,\n \"expand-change\": val => _vm.$emit('expand-change', val)\n }\n }, 'el-table', _vm.$attrs, false), [_vm.showCheckBox ? _c('el-table-column', {\n attrs: {\n \"type\": \"selection\",\n \"width\": \"60px\",\n \"align\": \"center\"\n }\n }) : _vm._e(), _vm.sortNum ? _c('el-table-column', {\n attrs: {\n \"type\": \"index\",\n \"width\": \"60px\",\n \"label\": \"序号\",\n \"align\": \"center\"\n },\n scopedSlots: _vm._u([{\n key: \"default\",\n fn: function (scope) {\n return [_vm.page ? _c('span', [_vm._v(_vm._s((_vm.params.page - 1) * _vm.params.limit + scope.$index + 1))]) : _c('span', [_vm._v(_vm._s(scope.$index + 1))])];\n }\n }], null, false, 2786008021)\n }) : _vm._e(), _vm._t(\"default\")], 2)], 1)], 1), _vm.page ? _c('Pagination', {\n attrs: {\n \"total\": _vm.total,\n \"page\": _vm.params.page,\n \"limit\": _vm.params.limit\n },\n on: {\n \"update:page\": function ($event) {\n return _vm.$set(_vm.params, \"page\", $event);\n },\n \"pagination\": _vm.getList\n }\n }) : _vm._e()], 1);\n};\nvar Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var page_table_Indexvue_type_script_lang_js = ({\n name: 'PageTable',\n props: {\n // 自定义数据\n data: {\n type: Array,\n default: null\n },\n // 请求地址\n url: {\n type: String,\n default: ''\n },\n // 请求方式\n method: {\n type: String,\n default: 'get'\n },\n // 是否显示序号\n sortNum: {\n type: Boolean,\n default: true\n },\n // 是否分页\n page: {\n type: Boolean,\n default: true\n },\n // 树形表格时,是否全部展开\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n // 初始请求参数\n defaultParams: {\n type: Object,\n default: () => ({})\n },\n // 默认选中数据\n defaultSelect: {\n type: Array,\n default: () => []\n },\n rowKey: {\n type: String,\n default: 'id'\n },\n hlightCurrentRow: {\n ype: Boolean,\n default: false\n }\n },\n watch: {\n data(newVal) {\n this.list = newVal;\n },\n defaultSelect: {\n handler() {\n this.setChecked();\n },\n deep: true\n },\n defaultParams(newVal, oldVal) {\n for (const key in newVal) {\n if (newVal[key] != oldVal[key]) {\n this.params = {\n page: 1,\n limit: 15,\n ...newVal\n };\n this.getList();\n break;\n }\n }\n }\n },\n data() {\n return {\n showCheckBox: false,\n params: {\n page: 1,\n limit: 15,\n ...this.defaultParams\n },\n total: 0,\n list: [],\n tableId: `table_${Math.random().toString(36).substring(2, 16)}`,\n selectData: {},\n selectIds: []\n };\n },\n mounted() {\n if (this.$listeners['selection-change']) {\n this.showCheckBox = true;\n }\n if (this.data) {\n this.list = this.data;\n return;\n }\n for (const item of this.defaultSelect) {\n this.selectData[item[this.rowKey]] = item;\n }\n this.getList();\n },\n methods: {\n // 获取数据\n getList(pageOption) {\n if (!this.url) {\n return;\n }\n if (pageOption) {\n this.params.page = pageOption.page;\n this.params.limit = pageOption.limit;\n }\n if (!this.page) {\n delete this.params.page;\n delete this.params.limit;\n }\n const storageParams = sessionStorage.getItem(this.$route.path);\n if (storageParams) {\n sessionStorage.setItem(this.$route.path, JSON.stringify(this.params));\n }\n switch (this.method) {\n case 'get':\n http.get(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n case 'post':\n http.post(this.url, this.params, res => {\n this._setData(res);\n });\n break;\n default:\n break;\n }\n },\n _setData(res) {\n if (this.page) {\n this.list = res.data.records;\n this.total = res.data.total;\n } else {\n this.list = res.data;\n }\n this.setChecked();\n },\n // 设置默认选中\n setChecked() {\n if (this.defaultSelect.length > 0) {\n this.selectIds = this.defaultSelect.map(item => item[this.rowKey]);\n if (this.showCheckBox && this.list) {\n this.$nextTick(() => {\n // 默认选中数据\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n if (this.selectIds.includes(item[this.rowKey])) {\n this.$refs[this.tableId].toggleRowSelection(item, true);\n this.selectData[item[this.rowKey]] = item;\n } else {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n delete this.selectData[item[this.rowKey]];\n }\n }\n }\n });\n }\n } else {\n this.selectIds = [];\n this.selectData = {};\n if (this.$refs[this.tableId]) {\n for (const item of this.list) {\n this.$refs[this.tableId].toggleRowSelection(item, false);\n }\n }\n }\n },\n // 条件查询\n query(params = {}) {\n if (Object.keys(params).length > 0) {\n this.params = {\n ...this.params,\n ...params,\n page: 1\n };\n }\n this.getList();\n },\n // 点击行\n handleRowClick(row, column, event) {\n this.$emit('row-click', row, column, event);\n },\n handelSelectionChange(_, row) {\n if (this.selectData[row[this.rowKey]]) {\n delete this.selectData[row[this.rowKey]];\n } else {\n this.selectData[row[this.rowKey]] = row;\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n // 全选/全不选\n selectAll(selection) {\n if (selection.length > 0) {\n for (const item of selection) {\n this.selectData[item[this.rowKey]] = item;\n }\n } else {\n for (const item of this.list) {\n delete this.selectData[item[this.rowKey]];\n }\n }\n const selectionList = Object.values(this.selectData);\n this.selectIds = selectionList.map(item => item[this.rowKey]);\n this.$emit('selection-change', selectionList);\n },\n setCurrent(index) {\n this.$refs[this.tableId].setCurrentRow(this.list[index]);\n },\n getData() {\n return this.list;\n },\n load(tree, treeNode, resolve) {\n this.$emit('load', tree, treeNode, resolve);\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_page_table_Indexvue_type_script_lang_js = (page_table_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue?vue&type=style&index=0&id=d8da1446&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/page-table/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar Index_component = normalizeComponent(\n components_page_table_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_d8da1446_scoped_true_render,\n Indexvue_type_template_id_d8da1446_scoped_true_staticRenderFns,\n false,\n null,\n \"d8da1446\",\n null\n \n)\n\n/* harmony default export */ var page_table_Index = (Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=template&id=4148762e&scoped=true\nvar Indexvue_type_template_id_4148762e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-dialog', _vm._b({\n directives: [{\n name: \"dialogDrag\",\n rawName: \"v-dialogDrag\"\n }],\n staticStyle: {\n \"margin-top\": \"0\"\n },\n attrs: {\n \"title\": _vm.title,\n \"visible\": _vm.dialogVisible,\n \"before-close\": _vm.handleClose,\n \"center\": \"\",\n \"close-on-click-modal\": false,\n \"show-close\": _vm.showClose,\n \"append-to-body\": \"\"\n }\n }, 'el-dialog', _vm.$attrs, false), [_c('div', {\n staticStyle: {\n \"overflow-y\": \"auto\",\n \"overflow-x\": \"hidden\",\n \"position\": \"relative\"\n },\n style: {\n maxHeight: _vm.maxHeight,\n minHeight: _vm.minHeight\n }\n }, [_vm._t(\"default\")], 2), _c('div', {\n staticStyle: {\n \"text-align\": \"center\"\n },\n attrs: {\n \"slot\": \"footer\"\n },\n slot: \"footer\"\n }, [_vm._t(\"footer\")], 2)]);\n};\nvar Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(9274);\nvar external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);\n;// CONCATENATED MODULE: ./src/components/dialog/dialog-drag.js\n// v-dialogDrag: 弹窗拖拽\n\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('dialogDrag', {\n bind(el) {\n const dialogHeaderEl = el.querySelector('.el-dialog__header');\n const dragDom = el.querySelector('.el-dialog');\n dialogHeaderEl.style.cursor = 'move';\n\n // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);\n const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);\n dialogHeaderEl.onmousedown = event => {\n // 鼠标按下,计算当前元素距离可视区的距离\n const disX = event.clientX - dialogHeaderEl.offsetLeft;\n const disY = event.clientY - dialogHeaderEl.offsetTop;\n\n // 获取到的值带px 正则匹配替换\n let styL = null;\n let styT = null;\n\n // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px\n if (sty.left.includes('\\%')) {\n styL = +document.body.clientWidth * (+sty.left.replace(/\\%/g, '') / 100);\n styT = +document.body.clientHeight * (+sty.top.replace(/\\%/g, '') / 100);\n } else {\n styL = +sty.left.replace(/\\px/g, '');\n styT = +sty.top.replace(/\\px/g, '');\n }\n document.onmousemove = function (e) {\n // 通过事件委托,计算移动的距离\n const l = e.clientX - disX;\n const t = e.clientY - disY;\n\n // 移动当前元素\n dragDom.style.left = `${l + styL}px`;\n dragDom.style.top = `${t + styT}px`;\n };\n document.onmouseup = function () {\n document.onmousemove = null;\n document.onmouseup = null;\n };\n };\n }\n});\nexternal_commonjs_vue_commonjs2_vue_root_Vue_default().directive('removeAriaHidden', {\n bind(el) {\n let ariaEls = el.querySelectorAll('.el-radio__original');\n ariaEls.forEach(item => {\n item.removeAttribute('aria-hidden');\n });\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=script&lang=js\n\n/* harmony default export */ var dialog_Indexvue_type_script_lang_js = ({\n name: 'Dialog',\n props: {\n title: {\n type: String,\n default: '提示'\n },\n maxHeight: {\n type: String,\n default: '60vh'\n },\n minHeight: {\n type: String,\n default: '150px'\n }\n },\n data() {\n return {\n dialogVisible: true,\n showClose: false\n };\n },\n mounted() {\n if (this.$listeners['close']) {\n this.showClose = true;\n }\n },\n methods: {\n handleClose() {\n this.$emit('close');\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_dialog_Indexvue_type_script_lang_js = (dialog_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue?vue&type=style&index=0&id=4148762e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/dialog/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar dialog_Index_component = normalizeComponent(\n components_dialog_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_4148762e_scoped_true_render,\n Indexvue_type_template_id_4148762e_scoped_true_staticRenderFns,\n false,\n null,\n \"4148762e\",\n null\n \n)\n\n/* harmony default export */ var dialog_Index = (dialog_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=template&id=41ca2230&scoped=true\nvar Indexvue_type_template_id_41ca2230_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c('el-card', {\n staticStyle: {\n \"height\": \"calc(100% - 2px)\",\n \"overflow\": \"auto\"\n },\n attrs: {\n \"shadow\": _vm.shadow\n }\n }, [_c('div', {\n staticClass: \"clearfix\",\n attrs: {\n \"slot\": \"header\"\n },\n slot: \"header\"\n }, [_c('div', {\n staticStyle: {\n \"font-size\": \"16px\"\n }\n }, [_vm.$slots['card-title'] ? [_vm._t(\"card-title\")] : [_vm._v(_vm._s(_vm.title))]], 2), _c('div', {\n staticStyle: {\n \"flex\": \"1\",\n \"position\": \"relative\",\n \"display\": \"flex\",\n \"justify-content\": \"right\"\n }\n }, [_vm._t(\"card-tools\")], 2)]), _vm._t(\"default\")], 2);\n};\nvar Indexvue_type_template_id_41ca2230_scoped_true_staticRenderFns = [];\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=script&lang=js\n/* harmony default export */ var card_Indexvue_type_script_lang_js = ({\n name: 'Card',\n props: {\n title: {\n type: String,\n default: ''\n },\n shadow: {\n type: String,\n default: ''\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_card_Indexvue_type_script_lang_js = (card_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/card/Index.vue?vue&type=style&index=0&id=41ca2230&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue?vue&type=style&index=0&id=41ca2230&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/card/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar card_Index_component = normalizeComponent(\n components_card_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_41ca2230_scoped_true_render,\n Indexvue_type_template_id_41ca2230_scoped_true_staticRenderFns,\n false,\n null,\n \"41ca2230\",\n null\n \n)\n\n/* harmony default export */ var card_Index = (card_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=template&id=5e81e05e&scoped=true\nvar Indexvue_type_template_id_5e81e05e_scoped_true_render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.show ? _c('div', [_vm.data.length > 0 ? _vm._l(_vm.data, function (item) {\n return _c('auth-tree', {\n key: item.id,\n attrs: {\n \"data\": item,\n \"props\": _vm.props\n },\n on: {\n \"on-node-expand\": data => _vm.onExpand(data),\n \"on-node-checked\": data => _vm.onChecked(data)\n }\n });\n }) : _vm._e()], 2) : _vm._e();\n};\nvar Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns = [];\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js\nvar es_array_push = __webpack_require__(4114);\n;// CONCATENATED MODULE: ./src/components/tree/tree.js\n\n// 是否有子节点\nconst hasChildren = data => {\n return Array.isArray(data.children) && data.children.length > 0;\n};\n\n// 创建节点\nconst renderLabel = (h, data, context) => {\n const {\n props,\n listeners\n } = context;\n const clickHandler = listeners['on-node-expand'];\n const checkedHandler = listeners['on-node-checked'];\n const label = data[props.props.label];\n const childNodes = [];\n childNodes.push(label);\n const icoClass = [];\n if (hasChildren(data)) {\n if (data.expand) {\n icoClass.push('icon-icon-dwon');\n } else {\n icoClass.push('icon-icon_right');\n }\n }\n return h('li', {}, [h('i', {\n domProps: {\n className: `iconfont ${icoClass.join(' ')}`\n },\n style: {\n marginLeft: `${14 * data._leve}px`,\n fontSize: '12px',\n transform: 'translateY(-2px)',\n color: '#666'\n },\n on: {\n click: () => {\n clickHandler(data);\n }\n }\n }, ''), h('i', {\n domProps: {\n className: data.checked ? 'iconfont icon-fangxingxuanzhongfil' : 'iconfont icon-fangxingweixuanzhong'\n },\n style: {\n color: '#666'\n },\n on: {\n click: () => {\n checkedHandler(data);\n }\n }\n }, ''), h('span', {}, childNodes)]);\n};\n\n// 创建 node 子节点\nconst renderChildren = (h, list, expand, context) => {\n if (Array.isArray(list) && list.length) {\n const children = list.map(item => {\n return renderNode(h, item, context);\n });\n let cls = ['tree-node-children'];\n if (!expand) {\n cls.push('expand');\n }\n return h('div', {\n domProps: {\n className: cls.join(' ')\n }\n }, children);\n }\n return '';\n};\nconst renderNode = (h, data, context) => {\n const childNodes = [];\n childNodes.push(renderLabel(h, data, context));\n const children = data.children;\n if (hasChildren(data)) {\n childNodes.push(renderChildren(h, children, data.expand, context));\n }\n return h('ul', {\n domProps: {\n className: 'node'\n }\n }, childNodes);\n};\nconst tree_render = (h, context) => {\n const {\n props\n } = context;\n return renderNode(h, props.data, context);\n};\n/* harmony default export */ var tree = (tree_render);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var tree_Indexvue_type_script_lang_js = ({\n name: 'Tree',\n components: {\n AuthTree: {\n render: tree,\n functional: true\n }\n },\n props: {\n data: {\n type: Array,\n default: () => {\n return [];\n }\n },\n props: {\n type: Object,\n default: () => {\n return {\n label: 'name'\n };\n }\n }\n },\n data() {\n return {\n name: 1,\n show: false,\n list: [],\n checked: false\n };\n },\n methods: {\n init(data, leve) {\n data._leve = leve;\n if (data.children && data.children.length > 0) {\n leve++;\n for (const i in data.children) {\n this.init(data.children[i], leve);\n }\n }\n },\n // 刷新\n refresh() {\n this.show = false;\n this.$nextTick(() => {\n this.show = true;\n });\n },\n // 展开/隐藏\n onExpand(data) {\n data.expand = !data.expand;\n this.refresh();\n },\n // 选中/取消选中\n onChecked(data) {\n data.checked = !data.checked;\n this.toolerChecked(this.data, data);\n this.setParentChecked(this.data);\n this.refresh();\n },\n toolerChecked(list, node) {\n for (const i in list) {\n if (list[i].id === node.id) {\n this.setChildChecked(list[i].children, list[i].checked);\n } else {\n this.toolerChecked(list[i].children, node);\n }\n }\n },\n // 选中节点时,设置子节点全选\n setChildChecked(children, checked) {\n for (const i in children) {\n children[i].checked = checked;\n this.setChildChecked(children[i].children, checked);\n }\n },\n // 设置父节点选中\n setParentChecked(data) {\n for (const i in data) {\n this.checked = false;\n if (data[i].children && data[i].children.length > 0) {\n this.childIsChecked(data[i].children);\n if (this.checked) {\n data[i].checked = this.checked;\n }\n this.setParentChecked(data[i].children);\n }\n }\n this.refresh();\n },\n // 判断节点的子节点是否有选中\n childIsChecked(children) {\n for (const i in children) {\n if (children[i].checked) {\n this.checked = true;\n } else {\n this.childIsChecked(children[i].children);\n }\n }\n },\n // 设置默认选中\n setDefaultChecked(defaultIds) {\n for (const i in defaultIds) {\n this.setChecked(this.data, defaultIds[i]);\n }\n this.setParentChecked(this.data);\n },\n // 根据所给的id,设置改项选中\n setChecked(data, id) {\n for (const i in data) {\n if (data[i].id === id) {\n data[i].checked = true;\n break;\n } else {\n if (data[i].children && data[i].children.length > 0) {\n this.setChecked(data[i].children, id);\n }\n }\n }\n },\n // 获取选中选的key\n getCheckedKeys() {\n const keys = [];\n this._getCheckedKeys(this.data, keys);\n return keys;\n },\n // 遍历出选中选的key\n _getCheckedKeys(data, keys) {\n for (const i in data) {\n if (data[i].checked) {\n keys.push(data[i].id);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedKeys(data[i].children, keys);\n }\n }\n },\n // 获取选中选的节点\n getCheckedNodes() {\n const nodes = [];\n this._getCheckedNodes(this.data, nodes);\n return nodes;\n },\n // 遍历出选中选的节点\n _getCheckedNodes(data, nodes) {\n for (const i in data) {\n if (data[i].checked) {\n nodes.push(data[i]);\n }\n if (data[i].children && data[i].children.length > 0) {\n this._getCheckedNodes(data[i].children, nodes);\n }\n }\n }\n },\n watch: {\n data: {\n handler() {\n for (const i in this.data) {\n this.init(this.data[i], 0);\n }\n this.refresh();\n },\n immediate: true,\n deep: true\n }\n }\n});\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=script&lang=js\n /* harmony default export */ var components_tree_Indexvue_type_script_lang_js = (tree_Indexvue_type_script_lang_js); \n;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-64.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-64.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-64.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-64.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n// extracted by mini-css-extract-plugin\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue?vue&type=style&index=0&id=5e81e05e&prod&lang=scss&scoped=true\n\n;// CONCATENATED MODULE: ./src/components/tree/Index.vue\n\n\n\n;\n\n\n/* normalize component */\n\nvar tree_Index_component = normalizeComponent(\n components_tree_Indexvue_type_script_lang_js,\n Indexvue_type_template_id_5e81e05e_scoped_true_render,\n Indexvue_type_template_id_5e81e05e_scoped_true_staticRenderFns,\n false,\n null,\n \"5e81e05e\",\n null\n \n)\n\n/* harmony default export */ var tree_Index = (tree_Index_component.exports);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js\nfunction _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) {\n _checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js\nfunction _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js\n\nfunction _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js\n\nfunction _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js\nvar web_url_search_params_delete = __webpack_require__(4603);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js\nvar web_url_search_params_has = __webpack_require__(7566);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js\nvar web_url_search_params_size = __webpack_require__(8721);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js\nvar es_typed_array_to_reversed = __webpack_require__(7467);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js\nvar es_typed_array_to_sorted = __webpack_require__(4732);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js\nvar es_typed_array_with = __webpack_require__(9577);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.detached.js\nvar esnext_array_buffer_detached = __webpack_require__(6280);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer.js\nvar esnext_array_buffer_transfer = __webpack_require__(7913);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js\nvar esnext_array_buffer_transfer_to_fixed_length = __webpack_require__(7801);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/bind.js\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/utils.js\n\n\n\n\n\n\n\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {\n toString: utils_toString\n} = Object.prototype;\nconst {\n getPrototypeOf\n} = Object;\nconst kindOf = (cache => thing => {\n const str = utils_toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\nconst kindOfTest = type => {\n type = type.toLowerCase();\n return thing => kindOf(thing) === type;\n};\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {\n isArray\n} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && isArrayBuffer(val.buffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = thing => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = val => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = val => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = thing => {\n let kind;\n return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]'));\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = str => str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {\n allOwnKeys = false\n} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : typeof window !== 'undefined' ? window : global;\n})();\nconst isContextDefined = context => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge( /* obj1, obj2, obj3, ... */\n) {\n const {\n caseless\n } = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n };\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {\n allOwnKeys\n} = {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {\n allOwnKeys\n });\n return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = content => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = thing => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n const iterator = generator.call(obj);\n let result;\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst utils_hasOwnProperty = (({\n hasOwnProperty\n}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = obj => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n const value = obj[name];\n if (!isFunction(value)) return;\n descriptor.enumerable = false;\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n};\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n const define = arr => {\n arr.forEach(value => {\n obj[value] = true;\n });\n };\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n return obj;\n};\nconst noop = () => {};\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n};\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\nconst DIGIT = '0123456789';\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {\n length\n } = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length | 0];\n }\n return str;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\nconst toJSONObject = obj => {\n const stack = new Array(10);\n const visit = (source, i) => {\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n if (!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n stack[i] = undefined;\n return target;\n }\n }\n return source;\n };\n return visit(obj, 0);\n};\nconst isAsyncFn = kindOfTest('AsyncFunction');\nconst isThenable = thing => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n/* harmony default export */ var utils = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty: utils_hasOwnProperty,\n hasOwnProp: utils_hasOwnProperty,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosError.js\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack;\n }\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\nconst AxiosError_prototype = AxiosError.prototype;\nconst descriptors = {};\n['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {\n value: code\n };\n});\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(AxiosError_prototype, 'isAxiosError', {\n value: true\n});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(AxiosError_prototype);\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n AxiosError.call(axiosError, error.message, code, config, request, response);\n axiosError.cause = error;\n axiosError.name = error.name;\n customProps && Object.assign(axiosError, customProps);\n return axiosError;\n};\n/* harmony default export */ var core_AxiosError = (AxiosError);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/null.js\n// eslint-disable-next-line strict\n/* harmony default export */ var helpers_null = (null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toFormData.js\n\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (helpers_null || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n function convertValue(value) {\n if (value === null) return '';\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n if (!useBlob && utils.isBlob(value)) {\n throw new core_AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.isArray(value) && isFlatArray(value) || (utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el));\n });\n return false;\n }\n }\n if (isVisitable(value)) {\n return true;\n }\n formData.append(renderKey(path, key, dots), convertValue(value));\n return false;\n }\n const stack = [];\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n stack.push(value);\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n stack.pop();\n }\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n build(obj);\n return formData;\n}\n/* harmony default export */ var helpers_toFormData = (toFormData);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n params && helpers_toFormData(params, this, options);\n}\nconst AxiosURLSearchParams_prototype = AxiosURLSearchParams.prototype;\nAxiosURLSearchParams_prototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\nAxiosURLSearchParams_prototype.toString = function toString(encoder) {\n const _encode = encoder ? function (value) {\n return encoder.call(this, value, encode);\n } : encode;\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n/* harmony default export */ var helpers_AxiosURLSearchParams = (AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/buildURL.js\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction buildURL_encode(val) {\n return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n const _encode = options && options.encode || buildURL_encode;\n const serializeFn = options && options.serialize;\n let serializedParams;\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ? params.toString() : new helpers_AxiosURLSearchParams(params, options).toString(_encode);\n }\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/InterceptorManager.js\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n/* harmony default export */ var core_InterceptorManager = (InterceptorManager);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/transitional.js\n\n\n/* harmony default export */ var defaults_transitional = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n\n\n\n\n\n\n/* harmony default export */ var classes_URLSearchParams = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : helpers_AxiosURLSearchParams);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/FormData.js\n\n\n/* harmony default export */ var classes_FormData = (typeof FormData !== 'undefined' ? FormData : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/classes/Blob.js\n\n\n/* harmony default export */ var classes_Blob = (typeof Blob !== 'undefined' ? Blob : null);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/browser/index.js\n\n\n\n/* harmony default export */ var browser = ({\n isBrowser: true,\n classes: {\n URLSearchParams: classes_URLSearchParams,\n FormData: classes_FormData,\n Blob: classes_Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/common/utils.js\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (product => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0;\n})(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope && typeof self.importScripts === 'function';\n})();\n\n;// CONCATENATED MODULE: ./node_modules/axios/lib/platform/index.js\n\n\n/* harmony default export */ var platform = ({\n ...common_utils_namespaceObject,\n ...browser\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/toURLEncodedForm.js\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return helpers_toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function (value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/formDataToJSON.js\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n if (name === '__proto__') return true;\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n return !isNumericKey;\n }\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n const result = buildPath(path, value, target[name], index);\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n return !isNumericKey;\n }\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n return obj;\n }\n return null;\n}\n/* harmony default export */ var helpers_formDataToJSON = (formDataToJSON);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/defaults/index.js\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n return (encoder || JSON.stringify)(rawValue);\n}\nconst defaults = {\n transitional: defaults_transitional,\n adapter: ['xhr', 'http'],\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n const isFormData = utils.isFormData(data);\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(helpers_formDataToJSON(data)) : data;\n }\n if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n let isFileList;\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n return helpers_toFormData(isFileList ? {\n 'files[]': data\n } : data, _FormData && new _FormData(), this.formSerializer);\n }\n }\n if (isObjectPayload || hasJSONContentType) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n if (data && utils.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw core_AxiosError.from(e, core_AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n return data;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], method => {\n defaults.headers[method] = {};\n});\n/* harmony default export */ var lib_defaults = (defaults);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseHeaders.js\n\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ var parseHeaders = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n return;\n }\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n return parsed;\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/AxiosHeaders.js\n\n\n\n\nconst $internals = Symbol('internals');\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n while (match = tokensRE.exec(str)) {\n tokens[match[1]] = match[2];\n }\n return tokens;\n}\nconst isValidHeaderName = str => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n if (isHeaderNameFilter) {\n value = header;\n }\n if (!utils.isString(value)) return;\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\nfunction formatHeader(header) {\n return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function (arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n const key = utils.findKey(self, lHeader);\n if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite);\n } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n return this;\n }\n get(header, parser) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n if (key) {\n const value = this[key];\n if (!parser) {\n return value;\n }\n if (parser === true) {\n return parseTokens(value);\n }\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n has(header, matcher) {\n header = normalizeHeader(header);\n if (header) {\n const key = utils.findKey(this, header);\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n return false;\n }\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n if (_header) {\n const key = utils.findKey(self, _header);\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n deleted = true;\n }\n }\n }\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n return deleted;\n }\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n while (i--) {\n const key = keys[i];\n if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n return deleted;\n }\n normalize(format) {\n const self = this;\n const headers = {};\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n const normalized = format ? formatHeader(header) : String(header).trim();\n if (normalized !== header) {\n delete self[header];\n }\n self[normalized] = normalizeValue(value);\n headers[normalized] = true;\n });\n return this;\n }\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n toJSON(asStrings) {\n const obj = Object.create(null);\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n return obj;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n static concat(first, ...targets) {\n const computed = new this(first);\n targets.forEach(target => computed.set(target));\n return computed;\n }\n static accessor(header) {\n const internals = this[$internals] = this[$internals] = {\n accessors: {}\n };\n const accessors = internals.accessors;\n const prototype = this.prototype;\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n return this;\n }\n}\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({\n value\n}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n };\n});\nutils.freezeMethods(AxiosHeaders);\n/* harmony default export */ var core_AxiosHeaders = (AxiosHeaders);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/transformData.js\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || lib_defaults;\n const context = response || config;\n const headers = core_AxiosHeaders.from(context.headers);\n let data = context.data;\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n headers.normalize();\n return data;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/isCancel.js\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CanceledError.js\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n core_AxiosError.call(this, message == null ? 'canceled' : message, core_AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\nutils.inherits(CanceledError, core_AxiosError, {\n __CANCEL__: true\n});\n/* harmony default export */ var cancel_CanceledError = (CanceledError);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js\nvar web_dom_exception_stack = __webpack_require__(4979);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/settle.js\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new core_AxiosError('Request failed with status code ' + response.status, [core_AxiosError.ERR_BAD_REQUEST, core_AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));\n }\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/cookies.js\n\n\n\n/* harmony default export */ var cookies = (platform.hasStandardBrowserEnv ?\n// Standard browser envs support document.cookie\n{\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n utils.isString(path) && cookie.push('path=' + path);\n utils.isString(domain) && cookie.push('domain=' + domain);\n secure === true && cookie.push('secure');\n document.cookie = cookie.join('; ');\n },\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n} :\n// Non-standard browser env (web workers, react-native) lack needed support.\n{\n write() {},\n read() {\n return null;\n },\n remove() {}\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/combineURLs.js\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/buildFullPath.js\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n\n\n\n\n/* harmony default export */ var isURLSameOrigin = (platform.hasStandardBrowserEnv ?\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}());\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/parseProtocol.js\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/speedometer.js\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n min = min !== undefined ? min : 1000;\n return function push(chunkLength) {\n const now = Date.now();\n const startedAt = timestamps[tail];\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n bytes[head] = chunkLength;\n timestamps[head] = now;\n let i = tail;\n let bytesCount = 0;\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n head = (head + 1) % samplesCount;\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n if (now - firstSampleTS < min) {\n return;\n }\n const passed = startedAt && now - startedAt;\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n/* harmony default export */ var helpers_speedometer = (speedometer);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/xhr.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = helpers_speedometer(50, 250);\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n bytesNotified = loaded;\n const data = {\n loaded,\n total,\n progress: total ? loaded / total : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n data[isDownloadStream ? 'download' : 'upload'] = true;\n listener(data);\n };\n}\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n/* harmony default export */ var xhr = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = core_AxiosHeaders.from(config.headers).normalize();\n let {\n responseType,\n withXSRFToken\n } = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n let contentType;\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n const fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = core_AxiosHeaders.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n reject(new core_AxiosError('Request aborted', core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new core_AxiosError('Network Error', core_AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || defaults_transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new core_AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? core_AxiosError.ETIMEDOUT : core_AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(fullPath)) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new cancel_CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n const protocol = parseProtocol(fullPath);\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new core_AxiosError('Unsupported protocol ' + protocol + ':', core_AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n // Send the request\n request.send(requestData || null);\n });\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/adapters/adapters.js\n\n\n\n\nconst knownAdapters = {\n http: helpers_null,\n xhr: xhr\n};\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {\n value\n });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {\n value\n });\n }\n});\nconst renderReason = reason => `- ${reason}`;\nconst isResolvedHandle = adapter => utils.isFunction(adapter) || adapter === null || adapter === false;\n/* harmony default export */ var adapters = ({\n getAdapter: adapters => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n const {\n length\n } = adapters;\n let nameOrAdapter;\n let adapter;\n const rejectedReasons = {};\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n adapter = nameOrAdapter;\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n if (adapter === undefined) {\n throw new core_AxiosError(`Unknown adapter '${id}'`);\n }\n }\n if (adapter) {\n break;\n }\n rejectedReasons[id || '#' + i] = adapter;\n }\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build'));\n let s = length ? reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified';\n throw new core_AxiosError(`There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT');\n }\n return adapter;\n },\n adapters: knownAdapters\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/dispatchRequest.js\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n if (config.signal && config.signal.aborted) {\n throw new cancel_CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n config.headers = core_AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(config, config.transformRequest);\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n const adapter = adapters.getAdapter(config.adapter || lib_defaults.adapter);\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(config, config.transformResponse, response);\n response.headers = core_AxiosHeaders.from(response.headers);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(config, config.transformResponse, reason.response);\n reason.response.headers = core_AxiosHeaders.from(reason.response.headers);\n }\n }\n return Promise.reject(reason);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/mergeConfig.js\n\n\n\n\nconst headersToObject = thing => thing instanceof core_AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({\n caseless\n }, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);\n });\n return config;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/env/data.js\nconst VERSION = \"1.6.7\";\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/validator.js\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new core_AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), core_AxiosError.ERR_DEPRECATED);\n }\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'));\n }\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new core_AxiosError('options must be an object', core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new core_AxiosError('option ' + opt + ' must be ' + result, core_AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new core_AxiosError('Unknown option ' + opt, core_AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n/* harmony default export */ var validator = ({\n assertOptions,\n validators\n});\n;// CONCATENATED MODULE: ./node_modules/axios/lib/core/Axios.js\n\n\n\n\n\n\n\n\n\n\n\nconst Axios_validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new core_InterceptorManager(),\n response: new core_InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error();\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack;\n }\n }\n throw err;\n }\n }\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n config = mergeConfig(this.defaults, config);\n const {\n transitional,\n paramsSerializer,\n headers\n } = config;\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n forcedJSONParsing: Axios_validators.transitional(Axios_validators.boolean),\n clarifyTimeoutError: Axios_validators.transitional(Axios_validators.boolean)\n }, false);\n }\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n };\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: Axios_validators.function,\n serialize: Axios_validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n headers && utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], method => {\n delete headers[method];\n });\n config.headers = core_AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n let promise;\n let i = 0;\n let len;\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n promise = Promise.resolve(config);\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n return promise;\n }\n len = requestInterceptorChain.length;\n let newConfig = config;\n i = 0;\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n i = 0;\n len = responseInterceptorChain.length;\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n return promise;\n }\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n Axios.prototype[method] = generateHTTPMethod();\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n/* harmony default export */ var core_Axios = (Axios);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/cancel/CancelToken.js\n\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n let resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n let i = token._listeners.length;\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n return promise;\n };\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n token.reason = new cancel_CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n/* harmony default export */ var cancel_CancelToken = (CancelToken);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/spread.js\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/isAxiosError.js\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return utils.isObject(payload) && payload.isAxiosError === true;\n}\n;// CONCATENATED MODULE: ./node_modules/axios/lib/helpers/HttpStatusCode.js\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n/* harmony default export */ var helpers_HttpStatusCode = (HttpStatusCode);\n;// CONCATENATED MODULE: ./node_modules/axios/lib/axios.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new core_Axios(defaultConfig);\n const instance = bind(core_Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, core_Axios.prototype, context, {\n allOwnKeys: true\n });\n\n // Copy context to instance\n utils.extend(instance, context, null, {\n allOwnKeys: true\n });\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(lib_defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = core_Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = cancel_CanceledError;\naxios.CancelToken = cancel_CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = helpers_toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = core_AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = core_AxiosHeaders;\naxios.formToJSON = thing => helpers_formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters.getAdapter;\naxios.HttpStatusCode = helpers_HttpStatusCode;\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ var lib_axios = (axios);\n;// CONCATENATED MODULE: ./src/components/http/index.js\n\n\n\n\n\n\n\n\n\nvar _axios = /*#__PURE__*/new WeakMap();\nvar _requestCount = /*#__PURE__*/new WeakMap();\nvar _loadingInstance = /*#__PURE__*/new WeakMap();\nvar _config = /*#__PURE__*/new WeakMap();\nclass http_Http {\n constructor(options) {\n _classPrivateFieldInitSpec(this, _axios, void 0);\n _classPrivateFieldInitSpec(this, _requestCount, 0);\n // 请求次数\n _classPrivateFieldInitSpec(this, _loadingInstance, null);\n _classPrivateFieldInitSpec(this, _config, {\n baseURL: '',\n timeout: 60 * 1000,\n withCredentials: false,\n successCode: 200,\n errorCode: 500,\n tokenKey: 'token',\n storage: 'session',\n callBackCode: [],\n call: null\n });\n for (const k in _classPrivateFieldGet2(_config, this)) {\n if (options[k]) {\n _classPrivateFieldGet2(_config, this)[k] = options[k];\n }\n }\n lib_axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';\n lib_axios.defaults.headers['Accept'] = 'application/json';\n _classPrivateFieldSet2(_axios, this, lib_axios.create(_classPrivateFieldGet2(_config, this)));\n _classPrivateFieldGet2(_axios, this).interceptors.request.use(config => {\n var _this$requestCount, _this$requestCount2;\n if (!config.params) {\n config.params = {};\n }\n if (_classPrivateFieldGet2(_requestCount, this) == 0) {\n _classPrivateFieldSet2(_loadingInstance, this, loading());\n }\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount = _classPrivateFieldGet2(_requestCount, this), _this$requestCount2 = _this$requestCount++, _this$requestCount)), _this$requestCount2;\n let token = '';\n if (_classPrivateFieldGet2(_config, this).storage === 'session') {\n token = sessionStorage.getItem(_classPrivateFieldGet2(_config, this).tokenKey);\n } else if (_classPrivateFieldGet2(_config, this).storage === 'local') {\n token = localStorage.getItem(_classPrivateFieldGet2(_config, this).tokenKey);\n }\n config.headers[_classPrivateFieldGet2(_config, this).tokenKey] = token;\n return config;\n }, error => {\n return Promise.reject(error);\n });\n _classPrivateFieldGet2(_axios, this).interceptors.response.use(response => {\n var _this$requestCount3, _this$requestCount4;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount3 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount4 = _this$requestCount3--, _this$requestCount3)), _this$requestCount4;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return response.data;\n }, error => {\n var _this$requestCount5, _this$requestCount6;\n _classPrivateFieldSet2(_requestCount, this, (_this$requestCount5 = _classPrivateFieldGet2(_requestCount, this), _this$requestCount6 = _this$requestCount5--, _this$requestCount5)), _this$requestCount6;\n if (_classPrivateFieldGet2(_requestCount, this) === 0) {\n _classPrivateFieldGet2(_loadingInstance, this).close();\n }\n return Promise.reject(error);\n });\n }\n _handleResult(success, err, res) {\n if (!res) {\n return;\n }\n if (res.code === _classPrivateFieldGet2(_config, this).successCode) {\n if (typeof success === 'function') {\n success(res);\n }\n } else if (res.code === _classPrivateFieldGet2(_config, this).errorCode) {\n if (typeof err === 'function') {\n err(res);\n } else {\n error(res.msg);\n }\n } else if (_classPrivateFieldGet2(_config, this).callBackCode.includes(res.code) && typeof _classPrivateFieldGet2(_config, this).call === 'function') {\n _classPrivateFieldGet2(_config, this).call(res);\n }\n }\n post(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).post(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n update(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).update(url, params).then(res => {\n this._handleResult(success, err, res);\n });\n }\n get(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).get(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n delete(url, params, success, err) {\n _classPrivateFieldGet2(_axios, this).delete(url, {\n params: params\n }).then(res => {\n this._handleResult(success, err, res);\n });\n }\n downLoad(url, params = {}) {\n _classPrivateFieldGet2(_axios, this).post(url, params, {\n 'responseType': 'blob'\n }).then(res => {\n if (res) {\n let fileName = params.fileName;\n if (!fileName) {\n fileName = res.headers['content-disposition'].split('filename=')[1].replace(/\"/g, '');\n }\n const blob = new Blob([res.data], {\n type: 'application/octet-stream;charset=UTF-8'\n });\n const link = document.createElement('a');\n link.style.display = 'none';\n link.href = window.URL.createObjectURL(blob);\n link.download = decodeURIComponent(fileName);\n link.click();\n window.URL.revokeObjectURL(link.href);\n }\n });\n }\n}\n;// CONCATENATED MODULE: ./src/components/index.js\n__webpack_require__(5506);\n\n\n\n\n\n\nconst coms = [Index, page_table_Index, dialog_Index, card_Index, tree_Index];\nconst install = function (Vue) {\n coms.forEach(com => {\n Vue.component(com.name, com);\n });\n};\n\n// 导出组件\n/* harmony default export */ var components = (install);\nclass Http extends http_Http {\n constructor(options) {\n super(options);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (components);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LXNlcnZpY2UvbGliL2NvbW1hbmRzL2J1aWxkL3NldFB1YmxpY1BhdGguanM/NjljYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlPzI3MzMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/M2M1ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2Y5NmUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL0luZGV4LnZ1ZT9mMTViIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9JbmRleC52dWU/YzE1ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/MmY4NSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2luYXRpb24vSW5kZXgudnVlP2ZiMWQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8wOGJhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlPzVkMDMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT9jZWU5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvcGFnZS10YWJsZS9JbmRleC52dWU/Y2Y1YSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3BhZ2UtdGFibGUvSW5kZXgudnVlP2Y5ZTciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9wYWdlLXRhYmxlL0luZGV4LnZ1ZT8zOGEwIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8wZTcxIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy1kcmFnLmpzPzVlYmQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13Ymkvc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT80ZGI2Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT9mZmM5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT8xNDBkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT9lODY3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL0luZGV4LnZ1ZT82MTE4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZTdmYSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT9jMWZiIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZGEyMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2NhcmQvSW5kZXgudnVlPzIyMzUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy9jYXJkL0luZGV4LnZ1ZT85YTAxIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvY2FyZC9JbmRleC52dWU/ZjMzNSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlPzkwOWMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL3RyZWUuanM/NDJjNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT9iZjY2Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/YmRlYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL3RyZWUvSW5kZXgudnVlP2E2NTgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9zcmMvY29tcG9uZW50cy90cmVlL0luZGV4LnZ1ZT85MTBhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vc3JjL2NvbXBvbmVudHMvdHJlZS9JbmRleC52dWU/N2EwMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uLmpzP2I4NWYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYy5qcz9jZmRhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydENsYXNzQnJhbmQuanM/MTlmOCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZFNldDIuanM/NDRiZiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc1ByaXZhdGVGaWVsZEdldDIuanM/OTI5ZSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzPzRiZWEiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzP2M5ZWIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz8yMDI3Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanM/MWE5NCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzPzliYTMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/OTNlMiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcz9jMTc4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcz9jNzkyIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/MjdhNCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcz9hMGVkIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanM/MWRiOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanM/NmQ3OCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcz9iMmU0Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanM/YmY4YyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/NzhmMSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzPzhmZTkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanM/ZjQzNyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanM/ZmYxMCIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NTRlOSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanM/OTU5NyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzc2NjIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9jMTdhIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcz82OGE0Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz84NzY4Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/MWQzZiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzP2EyMjciLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanM/NmJjNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzP2YwMmQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzg3OTUiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcz85ZmFjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzPzU5YzAiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz8xYTVjIiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz83ODI1Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcz80ZGM5Iiwid2VicGFjazovL2VsZW1lbnQtdWktd2JpLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzP2JkMTMiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzExMGYiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzPzAxMzIiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/MjlmYiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzPzI3MjkiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzP2JkOWQiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanM/YzZmMyIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanM/ZmFkNiIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2h0dHAvaW5kZXguanM/Y2M2YSIsIndlYnBhY2s6Ly9lbGVtZW50LXVpLXdiaS8uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzPzE1NjgiLCJ3ZWJwYWNrOi8vZWxlbWVudC11aS13YmkvLi9ub2RlX21vZHVsZXMvQHZ1ZS9jbGktc2VydmljZS9saWIvY29tbWFuZHMvYnVpbGQvZW50cnktbGliLmpzPzhhOTciXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBUaGlzIGZpbGUgaXMgaW1wb3J0ZWQgaW50byBsaWIvd2MgY2xpZW50IGJ1bmRsZXMuXG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgY3VycmVudFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gIGlmIChwcm9jZXNzLmVudi5ORUVEX0NVUlJFTlRTQ1JJUFRfUE9MWUZJTEwpIHtcbiAgICB2YXIgZ2V0Q3VycmVudFNjcmlwdCA9IHJlcXVpcmUoJ0Bzb2RhL2dldC1jdXJyZW50LXNjcmlwdCcpXG4gICAgY3VycmVudFNjcmlwdCA9IGdldEN1cnJlbnRTY3JpcHQoKVxuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJlY2F1c2UgcHJldmlvdXNseSB3ZSBkaXJlY3RseSBpbmNsdWRlZCB0aGUgcG9seWZpbGxcbiAgICBpZiAoISgnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICdjdXJyZW50U2NyaXB0JywgeyBnZXQ6IGdldEN1cnJlbnRTY3JpcHQgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgc3JjID0gY3VycmVudFNjcmlwdCAmJiBjdXJyZW50U2NyaXB0LnNyYy5tYXRjaCgvKC4rXFwvKVteL10rXFwuanMoXFw/LiopPyQvKVxuICBpZiAoc3JjKSB7XG4gICAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBzcmNbMV0gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG59XG5cbi8vIEluZGljYXRlIHRvIHdlYnBhY2sgdGhhdCB0aGlzIGZpbGUgY2FuIGJlIGNvbmNhdGVuYXRlZFxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0udG90YWw+MCk/X2MoJ2RpdicsW19jKCdlbC1wYWdpbmF0aW9uJyxfdm0uX2Ioe2F0dHJzOntcImJhY2tncm91bmRcIjpcIlwiLFwiY3VycmVudC1wYWdlXCI6X3ZtLmN1cnJlbnRQYWdlLFwicGFnZS1zaXplXCI6X3ZtLnBhZ2VTaXplLFwicGFnZS1zaXplc1wiOl92bS5wYWdlU2l6ZXMsXCJ0b3RhbFwiOl92bS50b3RhbCxcImxheW91dFwiOlwicHJldiwgcGFnZXIsIG5leHRcIn0sb246e1wic2l6ZS1jaGFuZ2VcIjpfdm0uaGFuZGxlU2l6ZUNoYW5nZSxcImN1cnJlbnQtY2hhbmdlXCI6X3ZtLmhhbmRsZUN1cnJlbnRDaGFuZ2V9fSwnZWwtcGFnaW5hdGlvbicsX3ZtLiRhdHRycyxmYWxzZSkpXSwxKTpfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbiAgICA8ZGl2IHYtaWY9XCJ0b3RhbD4wXCI+XHJcbiAgICAgICAgPGVsLXBhZ2luYXRpb25cclxuICAgICAgICAgICAgYmFja2dyb3VuZCBcclxuICAgICAgICAgICAgOmN1cnJlbnQtcGFnZT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgOnBhZ2Utc2l6ZXM9XCJwYWdlU2l6ZXNcIlxyXG4gICAgICAgICAgICA6dG90YWw9XCJ0b3RhbFwiXHJcbiAgICAgICAgICAgIGxheW91dD1cInByZXYsIHBhZ2VyLCBuZXh0XCJcclxuICAgICAgICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcclxuICAgICAgICAgICAgQHNpemUtY2hhbmdlPVwiaGFuZGxlU2l6ZUNoYW5nZVwiXHJcbiAgICAgICAgICAgIEBjdXJyZW50LWNoYW5nZT1cImhhbmRsZUN1cnJlbnRDaGFuZ2VcIlxyXG4gICAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbiAgICBleHBvcnQgZGVmYXVsdCB7XHJcbiAgICAgICAgbmFtZTogJ1BhZ2luYXRpb24nLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIHRvdGFsOiB7XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsaW1pdDoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMjBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFnZVNpemVzOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsxMCwgMTUsIDIwLCAzMCwgNTBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBjdXJyZW50UGFnZToge1xyXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCB2YWwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGltaXRcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOmxpbWl0JywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbENvdW50OiB7XHJcbiAgICAgICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnRvdGFsJywgdmFsKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIGhhbmRsZVNpemVDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCBsaW1pdDogdmFsIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2UodmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0aW9uJywgeyBwYWdlOiB2YWwsIGxpbWl0OiB0aGlzLnBhZ2VTaXplIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4uZWwtcGFnaW5hdGlvbntcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbn1cclxuPC9zdHlsZT4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90aHJlYWQtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTgyLnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvbG9hZGVyLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMl0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVszXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTI2YjcwZmI0JnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCIiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNmI3MGZiNCZzY29wZWQ9dHJ1ZVwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yNmI3MGZiNCZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIyNmI3MGZiNFwiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKXt2YXIgX3ZtPXRoaXMsX2M9X3ZtLl9zZWxmLl9jO3JldHVybiBfYygnZGl2Jyx7c3RhdGljQ2xhc3M6XCJwYWdlLXRhYmxlXCIsYXR0cnM6e1wiaWRcIjp0aGlzLnRhYmxlSWR9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwidGFibGVcIn0sW19jKCdlbC1zY3JvbGxiYXInLHtzdGF0aWNTdHlsZTp7XCJoZWlnaHRcIjpcIjEwMCVcIn19LFtfYygnZWwtdGFibGUnLF92bS5fYih7cmVmOl92bS50YWJsZUlkLGF0dHJzOntcInN0cmlwZVwiOlwiXCIsXCJkYXRhXCI6X3ZtLmxpc3QsXCJyb3cta2V5XCI6X3ZtLnJvd0tleSxcImxvYWRcIjpfdm0ubG9hZCxcImhpZ2hsaWdodC1jdXJyZW50LXJvd1wiOl92bS5obGlnaHRDdXJyZW50Um93LFwiZGVmYXVsdC1leHBhbmQtYWxsXCI6X3ZtLmRlZmF1bHRFeHBhbmRBbGx9LG9uOntcInNlbGVjdFwiOl92bS5oYW5kZWxTZWxlY3Rpb25DaGFuZ2UsXCJzZWxlY3QtYWxsXCI6X3ZtLnNlbGVjdEFsbCxcInJvdy1jbGlja1wiOl92bS5oYW5kbGVSb3dDbGljayxcImV4cGFuZC1jaGFuZ2VcIjp2YWw9Pl92bS4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbCl9fSwnZWwtdGFibGUnLF92bS4kYXR0cnMsZmFsc2UpLFsoX3ZtLnNob3dDaGVja0JveCk/X2MoJ2VsLXRhYmxlLWNvbHVtbicse2F0dHJzOntcInR5cGVcIjpcInNlbGVjdGlvblwiLFwid2lkdGhcIjpcIjYwcHhcIixcImFsaWduXCI6XCJjZW50ZXJcIn19KTpfdm0uX2UoKSwoX3ZtLnNvcnROdW0pP19jKCdlbC10YWJsZS1jb2x1bW4nLHthdHRyczp7XCJ0eXBlXCI6XCJpbmRleFwiLFwid2lkdGhcIjpcIjYwcHhcIixcImxhYmVsXCI6XCLluo/lj7dcIixcImFsaWduXCI6XCJjZW50ZXJcIn0sc2NvcGVkU2xvdHM6X3ZtLl91KFt7a2V5OlwiZGVmYXVsdFwiLGZuOmZ1bmN0aW9uKHNjb3BlKXtyZXR1cm4gWyhfdm0ucGFnZSk/X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKChfdm0ucGFyYW1zLnBhZ2UtMSkqX3ZtLnBhcmFtcy5saW1pdCtzY29wZS4kaW5kZXgrMSkpXSk6X2MoJ3NwYW4nLFtfdm0uX3YoX3ZtLl9zKHNjb3BlLiRpbmRleCsxKSldKV19fV0sbnVsbCxmYWxzZSwyNzg2MDA4MDIxKX0pOl92bS5fZSgpLF92bS5fdChcImRlZmF1bHRcIildLDIpXSwxKV0sMSksKF92bS5wYWdlKT9fYygnUGFnaW5hdGlvbicse2F0dHJzOntcInRvdGFsXCI6X3ZtLnRvdGFsLFwicGFnZVwiOl92bS5wYXJhbXMucGFnZSxcImxpbWl0XCI6X3ZtLnBhcmFtcy5saW1pdH0sb246e1widXBkYXRlOnBhZ2VcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uJHNldChfdm0ucGFyYW1zLCBcInBhZ2VcIiwgJGV2ZW50KX0sXCJwYWdpbmF0aW9uXCI6X3ZtLmdldExpc3R9fSk6X3ZtLl9lKCldLDEpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLXRhYmxlXCIgOmlkPVwidGhpcy50YWJsZUlkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgIDxlbC1zY3JvbGxiYXIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxlbC10YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIHYtYmluZD1cIiRhdHRyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBlXHJcbiAgICAgICAgICAgICAgICAgICAgOnJlZj1cInRhYmxlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpkYXRhPVwibGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnJvdy1rZXk9XCJyb3dLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpsb2FkPVwibG9hZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmhpZ2hsaWdodC1jdXJyZW50LXJvdz1cImhsaWdodEN1cnJlbnRSb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3Q9XCJoYW5kZWxTZWxlY3Rpb25DaGFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBzZWxlY3QtYWxsPVwic2VsZWN0QWxsXCJcclxuICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdC1leHBhbmQtYWxsPVwiZGVmYXVsdEV4cGFuZEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgQHJvdy1jbGljaz1cImhhbmRsZVJvd0NsaWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBAZXhwYW5kLWNoYW5nZT1cInZhbD0+JGVtaXQoJ2V4cGFuZC1jaGFuZ2UnLCB2YWwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic2hvd0NoZWNrQm94XCIgdHlwZT1cInNlbGVjdGlvblwiIHdpZHRoPVwiNjBweFwiIGFsaWduPVwiY2VudGVyXCI+PC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVsLXRhYmxlLWNvbHVtbiB2LWlmPVwic29ydE51bVwiIHR5cGU9XCJpbmRleFwiIHdpZHRoPVwiNjBweFwiIGxhYmVsPVwi5bqP5Y+3XCIgYWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHNsb3Qtc2NvcGU9XCJzY29wZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInBhZ2VcIj57eyhwYXJhbXMucGFnZS0xKSpwYXJhbXMubGltaXQrc2NvcGUuJGluZGV4KzF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57e3Njb3BlLiRpbmRleCsxfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9lbC10YWJsZS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgPC9lbC10YWJsZT5cclxuICAgICAgICAgICAgPC9lbC1zY3JvbGxiYXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPFBhZ2luYXRpb24gdi1pZj1cInBhZ2VcIiA6dG90YWw9XCJ0b3RhbFwiIDpwYWdlLnN5bmM9XCJwYXJhbXMucGFnZVwiIDpsaW1pdD1cInBhcmFtcy5saW1pdFwiIEBwYWdpbmF0aW9uPVwiZ2V0TGlzdFwiIC8+XHJcbiAgICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ1BhZ2VUYWJsZScsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIC8vIOiHquWumuS5ieaVsOaNrlxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOivt+axguWcsOWdgFxyXG4gICAgICAgIHVybDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDor7fmsYLmlrnlvI9cclxuICAgICAgICBtZXRob2Q6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnZ2V0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g5piv5ZCm5pi+56S65bqP5Y+3XHJcbiAgICAgICAgc29ydE51bToge1xyXG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDmmK/lkKbliIbpobVcclxuICAgICAgICBwYWdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOagkeW9ouihqOagvOaXtu+8jOaYr+WQpuWFqOmDqOWxleW8gFxyXG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHtcclxuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOWIneWni+ivt+axguWPguaVsFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXM6IHtcclxuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+KHt9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8g6buY6K6k6YCJ5Lit5pWw5o2uXHJcbiAgICAgICAgZGVmYXVsdFNlbGVjdDoge1xyXG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcclxuICAgICAgICAgICAgZGVmYXVsdDogKCk9PltdXHJcbiAgICAgICAgfSxcclxuICAgICAgICByb3dLZXk6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnaWQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBobGlnaHRDdXJyZW50Um93OiB7XHJcbiAgICAgICAgICAgIHlwZTogQm9vbGVhbixcclxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBkYXRhKG5ld1ZhbCl7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdCA9IG5ld1ZhbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRTZWxlY3Q6IHtcclxuICAgICAgICAgICAgaGFuZGxlcigpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlZXA6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlZmF1bHRQYXJhbXMobmV3VmFsLCBvbGRWYWwpe1xyXG4gICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG5ld1ZhbCl7XHJcbiAgICAgICAgICAgICAgICBpZihuZXdWYWxba2V5XSAhPSBvbGRWYWxba2V5XSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7cGFnZTogMSwgbGltaXQ6IDE1LCAuLi5uZXdWYWx9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRhdGEoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiAxNSxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFBhcmFtc1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgbGlzdDogW10sXHJcbiAgICAgICAgICAgIHRhYmxlSWQ6IGB0YWJsZV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNil9YCxcclxuICAgICAgICAgICAgc2VsZWN0RGF0YToge30sXHJcbiAgICAgICAgICAgIHNlbGVjdElkczogW11cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQoKXtcclxuICAgICAgICBpZih0aGlzLiRsaXN0ZW5lcnNbJ3NlbGVjdGlvbi1jaGFuZ2UnXSl7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5kYXRhKXtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gdGhpcy5kYXRhO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMuZGVmYXVsdFNlbGVjdCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV0gPSBpdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldExpc3QoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgLy8g6I635Y+W5pWw5o2uXHJcbiAgICAgICAgZ2V0TGlzdChwYWdlT3B0aW9uKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMudXJsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwYWdlT3B0aW9uKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlT3B0aW9uLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5saW1pdCA9IHBhZ2VPcHRpb24ubGltaXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIXRoaXMucGFnZSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJhbXMucGFnZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhcmFtcy5saW1pdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlUGFyYW1zID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLiRyb3V0ZS5wYXRoKTtcclxuICAgICAgICAgICAgaWYoc3RvcmFnZVBhcmFtcyl7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuJHJvdXRlLnBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYW1zKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3dpdGNoKHRoaXMubWV0aG9kKXtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2dldCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaHR0cC5nZXQodGhpcy51cmwsIHRoaXMucGFyYW1zLCAocmVzKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwb3N0JzpcclxuICAgICAgICAgICAgICAgICAgICBodHRwLnBvc3QodGhpcy51cmwsIHRoaXMucGFyYW1zLCAocmVzKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRhKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfc2V0RGF0YShyZXMpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gcmVzLmRhdGEucmVjb3JkcztcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWwgPSByZXMuZGF0YS50b3RhbDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOiuvue9rum7mOiupOmAieS4rVxyXG4gICAgICAgIHNldENoZWNrZWQoKXtcclxuICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0U2VsZWN0Lmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SWRzID0gdGhpcy5kZWZhdWx0U2VsZWN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2hvd0NoZWNrQm94ICYmIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6buY6K6k6YCJ5Lit5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0SWRzLmluY2x1ZGVzKGl0ZW1bdGhpcy5yb3dLZXldKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnNbdGhpcy50YWJsZUlkXS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4kcmVmc1t0aGlzLnRhYmxlSWRdKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0udG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIOadoeS7tuafpeivolxyXG4gICAgICAgIHF1ZXJ5KHBhcmFtcz17fSl7XHJcbiAgICAgICAgICAgIGlmKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7Li4udGhpcy5wYXJhbXMsIC4uLnBhcmFtcywgcGFnZTogMX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDngrnlh7vooYxcclxuICAgICAgICBoYW5kbGVSb3dDbGljayhyb3csIGNvbHVtbiwgZXZlbnQpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdyb3ctY2xpY2snLCByb3csIGNvbHVtbiwgZXZlbnQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGVsU2VsZWN0aW9uQ2hhbmdlKF8sIHJvdyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3REYXRhW3Jvd1t0aGlzLnJvd0tleV1dO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtyb3dbdGhpcy5yb3dLZXldXSA9IHJvdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25MaXN0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkcyA9IHNlbGVjdGlvbkxpc3QubWFwKChpdGVtKT0+aXRlbVt0aGlzLnJvd0tleV0pO1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uTGlzdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyDlhajpgIkv5YWo5LiN6YCJXHJcbiAgICAgICAgc2VsZWN0QWxsKHNlbGVjdGlvbil7XHJcbiAgICAgICAgICAgIGlmKHNlbGVjdGlvbi5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiBzZWxlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHRoaXMubGlzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0RGF0YVtpdGVtW3RoaXMucm93S2V5XV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTGlzdCA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3REYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJZHMgPSBzZWxlY3Rpb25MaXN0Lm1hcCgoaXRlbSk9Pml0ZW1bdGhpcy5yb3dLZXldKTtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsIHNlbGVjdGlvbkxpc3QpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0Q3VycmVudChpbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLiRyZWZzW3RoaXMudGFibGVJZF0uc2V0Q3VycmVudFJvdyh0aGlzLmxpc3RbaW5kZXhdKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldERhdGEoKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxvYWQodHJlZSwgdHJlZU5vZGUsIHJlc29sdmUpe1xyXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdsb2FkJywgdHJlZSwgdHJlZU5vZGUsIHJlc29sdmUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuPC9zY3JpcHQ+XHJcbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cclxuICAgIC5wYWdlLXRhYmxle1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBmbGV4OiAxIDEgYXV0bztcclxuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAudGFibGV7XHJcbiAgICAgICAgICAgIGZsZXg6IGF1dG8gMSAxO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUgdGhlYWR7XHJcbiAgICAgICAgY29sb3I6ICMzMzMzMzM7XHJcbiAgICB9XHJcbiAgICAvZGVlcC8uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGx7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjdGQTtcclxuICAgIH1cclxuICAgIC9kZWVwLy5lbC10YWJsZS0tbWluaSAuZWwtdGFibGVfX2NlbGx7XHJcbiAgICAgICAgcGFkZGluZzogM3B4IDA7XHJcbiAgICB9XHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1kOGRhMTQ0NiZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDhkYTE0NDYmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZDhkYTE0NDYmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiZDhkYTE0NDZcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gX2MoJ2VsLWRpYWxvZycsX3ZtLl9iKHtkaXJlY3RpdmVzOlt7bmFtZTpcImRpYWxvZ0RyYWdcIixyYXdOYW1lOlwidi1kaWFsb2dEcmFnXCJ9XSxzdGF0aWNTdHlsZTp7XCJtYXJnaW4tdG9wXCI6XCIwXCJ9LGF0dHJzOntcInRpdGxlXCI6X3ZtLnRpdGxlLFwidmlzaWJsZVwiOl92bS5kaWFsb2dWaXNpYmxlLFwiYmVmb3JlLWNsb3NlXCI6X3ZtLmhhbmRsZUNsb3NlLFwiY2VudGVyXCI6XCJcIixcImNsb3NlLW9uLWNsaWNrLW1vZGFsXCI6ZmFsc2UsXCJzaG93LWNsb3NlXCI6X3ZtLnNob3dDbG9zZSxcImFwcGVuZC10by1ib2R5XCI6XCJcIn19LCdlbC1kaWFsb2cnLF92bS4kYXR0cnMsZmFsc2UpLFtfYygnZGl2Jyx7c3RhdGljU3R5bGU6e1wib3ZlcmZsb3cteVwiOlwiYXV0b1wiLFwib3ZlcmZsb3cteFwiOlwiaGlkZGVuXCIsXCJwb3NpdGlvblwiOlwicmVsYXRpdmVcIn0sc3R5bGU6KHttYXhIZWlnaHQ6IF92bS5tYXhIZWlnaHQsIG1pbkhlaWdodDogX3ZtLm1pbkhlaWdodH0pfSxbX3ZtLl90KFwiZGVmYXVsdFwiKV0sMiksX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcInRleHQtYWxpZ25cIjpcImNlbnRlclwifSxhdHRyczp7XCJzbG90XCI6XCJmb290ZXJcIn0sc2xvdDpcImZvb3RlclwifSxbX3ZtLl90KFwiZm9vdGVyXCIpXSwyKV0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8vIHYtZGlhbG9nRHJhZzog5by556qX5ouW5ou9XHJcbmltcG9ydCBWdWUgZnJvbSAndnVlJztcclxuVnVlLmRpcmVjdGl2ZSgnZGlhbG9nRHJhZycsIHtcclxuICAgIGJpbmQoZWwpIHtcclxuXHRcdGNvbnN0IGRpYWxvZ0hlYWRlckVsID0gZWwucXVlcnlTZWxlY3RvcignLmVsLWRpYWxvZ19faGVhZGVyJyk7XHJcblx0XHRjb25zdCBkcmFnRG9tID0gZWwucXVlcnlTZWxlY3RvcignLmVsLWRpYWxvZycpO1xyXG5cdFx0ZGlhbG9nSGVhZGVyRWwuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xyXG5cclxuXHRcdC8vIOiOt+WPluWOn+acieWxnuaApyBpZSBkb23lhYPntKAuY3VycmVudFN0eWxlIOeBq+eLkOiwt+atjCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb23lhYPntKAsIG51bGwpO1xyXG5cdFx0Y29uc3Qgc3R5ID0gZHJhZ0RvbS5jdXJyZW50U3R5bGUgfHwgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZHJhZ0RvbSwgbnVsbCk7XHJcblxyXG5cdFx0ZGlhbG9nSGVhZGVyRWwub25tb3VzZWRvd24gPSAoZXZlbnQpPT57XHJcblx0XHRcdC8vIOm8oOagh+aMieS4i++8jOiuoeeul+W9k+WJjeWFg+e0oOi3neemu+WPr+inhuWMuueahOi3neemu1xyXG5cdFx0XHRjb25zdCBkaXNYID0gZXZlbnQuY2xpZW50WCAtIGRpYWxvZ0hlYWRlckVsLm9mZnNldExlZnQ7XHJcblx0XHRcdGNvbnN0IGRpc1kgPSBldmVudC5jbGllbnRZIC0gZGlhbG9nSGVhZGVyRWwub2Zmc2V0VG9wO1xyXG5cclxuXHRcdFx0Ly8g6I635Y+W5Yiw55qE5YC85bimcHgg5q2j5YiZ5Yy56YWN5pu/5o2iXHJcblx0XHRcdGxldCBzdHlMPW51bGw7XHJcblx0XHRcdGxldCBzdHlUPW51bGw7XHJcblxyXG5cdFx0XHQvLyDms6jmhI/lnKhpZeS4rSDnrKzkuIDmrKHojrflj5bliLDnmoTlgLzkuLrnu4Tku7boh6rluKY1MCUg56e75Yqo5LmL5ZCO6LWL5YC85Li6cHhcclxuXHRcdFx0aWYgKHN0eS5sZWZ0LmluY2x1ZGVzKCdcXCUnKSkge1xyXG5cdFx0XHRcdHN0eUwgPSArZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCAqICgrc3R5LmxlZnQucmVwbGFjZSgvXFwlL2csICcnKSAvIDEwMCk7XHJcblx0XHRcdFx0c3R5VCA9ICtkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAqICgrc3R5LnRvcC5yZXBsYWNlKC9cXCUvZywgJycpIC8gMTAwKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRzdHlMID0gK3N0eS5sZWZ0LnJlcGxhY2UoL1xccHgvZywgJycpO1xyXG5cdFx0XHRcdHN0eVQgPSArc3R5LnRvcC5yZXBsYWNlKC9cXHB4L2csICcnKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0Ly8g6YCa6L+H5LqL5Lu25aeU5omY77yM6K6h566X56e75Yqo55qE6Led56a7XHJcblx0XHRcdFx0Y29uc3QgbCA9IGUuY2xpZW50WCAtIGRpc1g7XHJcblx0XHRcdFx0Y29uc3QgdCA9IGUuY2xpZW50WSAtIGRpc1k7XHJcblxyXG5cdFx0XHRcdC8vIOenu+WKqOW9k+WJjeWFg+e0oFxyXG5cdFx0XHRcdGRyYWdEb20uc3R5bGUubGVmdCA9IGAke2wgKyBzdHlMfXB4YDtcclxuXHRcdFx0XHRkcmFnRG9tLnN0eWxlLnRvcCA9IGAke3QgKyBzdHlUfXB4YDtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcclxuXHRcdFx0XHRkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHR9XHJcbn0pO1xyXG5cclxuVnVlLmRpcmVjdGl2ZSgncmVtb3ZlQXJpYUhpZGRlbicsIHtcclxuXHRiaW5kKGVsKSB7XHJcblx0XHRsZXQgYXJpYUVscyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC1yYWRpb19fb3JpZ2luYWwnKTtcclxuXHRcdGFyaWFFbHMuZm9yRWFjaCgoaXRlbSk9PntcclxuXHRcdFx0aXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pOyIsIjx0ZW1wbGF0ZT5cclxuICAgIDxlbC1kaWFsb2cgdi1iaW5kPVwiJGF0dHJzXCIgOnRpdGxlPVwidGl0bGVcIiA6dmlzaWJsZT1cImRpYWxvZ1Zpc2libGVcIiB2LWRpYWxvZ0RyYWcgOmJlZm9yZS1jbG9zZT1cImhhbmRsZUNsb3NlXCIgY2VudGVyIDpjbG9zZS1vbi1jbGljay1tb2RhbD1cImZhbHNlXCIgOnNob3ctY2xvc2U9XCJzaG93Q2xvc2VcIiBhcHBlbmQtdG8tYm9keSBzdHlsZT1cIm1hcmdpbi10b3A6IDA7XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87b3ZlcmZsb3cteDogaGlkZGVuO3Bvc2l0aW9uOiByZWxhdGl2ZTtcIiA6c3R5bGU9XCJ7bWF4SGVpZ2h0LCBtaW5IZWlnaHR9XCI+XHJcbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHNsb3Q9XCJmb290ZXJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImZvb3RlclwiPjwvc2xvdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZWwtZGlhbG9nPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuaW1wb3J0ICcuL2RpYWxvZy1kcmFnJztcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ0RpYWxvZycsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJ+aPkOekuidcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1heEhlaWdodDoge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICc2MHZoJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWluSGVpZ2h0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJzE1MHB4J1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBkYXRhKCl7XHJcbiAgICAgICAgcmV0dXJue1xyXG4gICAgICAgICAgICBkaWFsb2dWaXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2xvc2U6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBtb3VudGVkKCl7XHJcbiAgICAgICAgaWYodGhpcy4kbGlzdGVuZXJzWydjbG9zZSddKXtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaGFuZGxlQ2xvc2UoKXtcclxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4vZGVlcC8uZWwtZGlhbG9nX19oZWFkZXJ7XHJcbiAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XHJcbn1cclxuL2RlZXAvLmVsLWRpYWxvZy0tY2VudGVyIC5lbC1kaWFsb2dfX2JvZHl7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG59XHJcbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00MTQ4NzYyZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDE0ODc2MmUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDE0ODc2MmUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNDE0ODc2MmVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCl7dmFyIF92bT10aGlzLF9jPV92bS5fc2VsZi5fYztyZXR1cm4gX2MoJ2VsLWNhcmQnLHtzdGF0aWNTdHlsZTp7XCJoZWlnaHRcIjpcImNhbGMoMTAwJSAtIDJweClcIixcIm92ZXJmbG93XCI6XCJhdXRvXCJ9LGF0dHJzOntcInNoYWRvd1wiOl92bS5zaGFkb3d9fSxbX2MoJ2Rpdicse3N0YXRpY0NsYXNzOlwiY2xlYXJmaXhcIixhdHRyczp7XCJzbG90XCI6XCJoZWFkZXJcIn0sc2xvdDpcImhlYWRlclwifSxbX2MoJ2Rpdicse3N0YXRpY1N0eWxlOntcImZvbnQtc2l6ZVwiOlwiMTZweFwifX0sWyhfdm0uJHNsb3RzWydjYXJkLXRpdGxlJ10pP1tfdm0uX3QoXCJjYXJkLXRpdGxlXCIpXTpbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV1dLDIpLF9jKCdkaXYnLHtzdGF0aWNTdHlsZTp7XCJmbGV4XCI6XCIxXCIsXCJwb3NpdGlvblwiOlwicmVsYXRpdmVcIixcImRpc3BsYXlcIjpcImZsZXhcIixcImp1c3RpZnktY29udGVudFwiOlwicmlnaHRcIn19LFtfdm0uX3QoXCJjYXJkLXRvb2xzXCIpXSwyKV0pLF92bS5fdChcImRlZmF1bHRcIildLDIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cclxuICAgIDxlbC1jYXJkIDpzaGFkb3c9XCJzaGFkb3dcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIiRzbG90c1snY2FyZC10aXRsZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNhcmQtdGl0bGVcIj48L3Nsb3Q+XHJcbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT57eyB0aXRsZSB9fTwvdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtwb3NpdGlvbjogcmVsYXRpdmU7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHJpZ2h0O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImNhcmQtdG9vbHNcIj48L3Nsb3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzbG90Pjwvc2xvdD5cclxuICAgIDwvZWwtY2FyZD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdDYXJkJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2hhZG93OiB7XHJcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgICAgICAgZGVmYXVsdDogJydcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxyXG4vZGVlcC8uZWwtY2FyZF9faGVhZGVye1xyXG4gICAgcGFkZGluZzogOHB4IDIwcHg7XHJcbiAgICAuY2xlYXJmaXh7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgfVxyXG59XHJcblxyXG48L3N0eWxlPiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RocmVhZC1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtODIudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsxXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZS92dWUtbG9hZGVyLXYxNS9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9jbG9uZWRSdWxlU2V0LTY0LnVzZVsyXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzNdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NDFjYTIyMzAmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQxY2EyMjMwJnNjb3BlZD10cnVlXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qc1wiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQxY2EyMjMwJnByb2QmbGFuZz1zY3NzJnNjb3BlZD10cnVlXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjQxY2EyMjMwXCIsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBfdm09dGhpcyxfYz1fdm0uX3NlbGYuX2M7cmV0dXJuIChfdm0uc2hvdyk/X2MoJ2RpdicsWyhfdm0uZGF0YS5sZW5ndGggPiAwKT9fdm0uX2woKF92bS5kYXRhKSxmdW5jdGlvbihpdGVtKXtyZXR1cm4gX2MoJ2F1dGgtdHJlZScse2tleTppdGVtLmlkLGF0dHJzOntcImRhdGFcIjppdGVtLFwicHJvcHNcIjpfdm0ucHJvcHN9LG9uOntcIm9uLW5vZGUtZXhwYW5kXCI6KGRhdGEpPT5fdm0ub25FeHBhbmQoZGF0YSksXCJvbi1ub2RlLWNoZWNrZWRcIjooZGF0YSk9Pl92bS5vbkNoZWNrZWQoZGF0YSl9fSl9KTpfdm0uX2UoKV0sMik6X3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLy8g5piv5ZCm5pyJ5a2Q6IqC54K5XG5jb25zdCBoYXNDaGlsZHJlbiA9IChkYXRhKT0+e1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuY2hpbGRyZW4pICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbn07XG5cbi8vIOWIm+W7uuiKgueCuVxuZXhwb3J0IGNvbnN0IHJlbmRlckxhYmVsID0gKGgsIGRhdGEsIGNvbnRleHQpPT57XG4gICAgY29uc3Qge3Byb3BzLCBsaXN0ZW5lcnN9ID0gY29udGV4dDtcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtZXhwYW5kJ107XG4gICAgY29uc3QgY2hlY2tlZEhhbmRsZXIgPSBsaXN0ZW5lcnNbJ29uLW5vZGUtY2hlY2tlZCddO1xuICAgIGNvbnN0IGxhYmVsID0gZGF0YVtwcm9wcy5wcm9wcy5sYWJlbF07XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IFtdO1xuICAgIGNoaWxkTm9kZXMucHVzaChsYWJlbCk7XG5cbiAgICBjb25zdCBpY29DbGFzcyA9IFtdO1xuICAgIGlmKGhhc0NoaWxkcmVuKGRhdGEpKXtcbiAgICAgICAgaWYoZGF0YS5leHBhbmQpe1xuICAgICAgICAgICAgaWNvQ2xhc3MucHVzaCgnaWNvbi1pY29uLWR3b24nKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpY29DbGFzcy5wdXNoKCdpY29uLWljb25fcmlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaCgnbGknLCB7XG4gICAgfSwgW1xuICAgICAgICBoKCdpJywge1xuICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGBpY29uZm9udCAke2ljb0NsYXNzLmpvaW4oJyAnKX1gXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBgJHsxNCpkYXRhLl9sZXZlfXB4YCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTJweCknLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjbGlja0hhbmRsZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnJyksXG4gICAgICAgIGgoJ2knLCB7XG4gICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogZGF0YS5jaGVja2VkPydpY29uZm9udCBpY29uLWZhbmd4aW5neHVhbnpob25nZmlsJzonaWNvbmZvbnQgaWNvbi1mYW5neGluZ3dlaXh1YW56aG9uZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjaGVja2VkSGFuZGxlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sICcnKSxcbiAgICAgICAgaCgnc3BhbicsIHtcblxuICAgICAgICB9LCBjaGlsZE5vZGVzKVxuICAgIF0pO1xufTtcblxuLy8g5Yib5bu6IG5vZGUg5a2Q6IqC54K5XG5leHBvcnQgY29uc3QgcmVuZGVyQ2hpbGRyZW4gPSAoaCwgbGlzdCwgZXhwYW5kLCBjb250ZXh0KT0+e1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbGlzdC5tYXAoaXRlbT0+e1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlck5vZGUoaCwgaXRlbSwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY2xzID0gWyd0cmVlLW5vZGUtY2hpbGRyZW4nXTtcbiAgICAgICAgaWYoIWV4cGFuZCl7XG4gICAgICAgICAgICBjbHMucHVzaCgnZXhwYW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGgoJ2RpdicsIHtcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjbHMuam9pbignICcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlck5vZGUgPSAoaCwgZGF0YSwgY29udGV4dCk9PntcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgY2hpbGROb2Rlcy5wdXNoKHJlbmRlckxhYmVsKGgsIGRhdGEsIGNvbnRleHQpKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47XG4gICAgaWYoaGFzQ2hpbGRyZW4oZGF0YSkpe1xuICAgICAgICBjaGlsZE5vZGVzLnB1c2gocmVuZGVyQ2hpbGRyZW4oaCwgY2hpbGRyZW4sIGRhdGEuZXhwYW5kLCBjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoJ3VsJywge1xuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbm9kZSdcbiAgICAgICAgfVxuICAgIH0sIGNoaWxkTm9kZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9IChoLCBjb250ZXh0KT0+e1xuICAgIGNvbnN0IHtwcm9wc30gPSBjb250ZXh0O1xuICAgIHJldHVybiByZW5kZXJOb2RlKGgsIHByb3BzLmRhdGEsIGNvbnRleHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyOyIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IHYtaWY9XCJzaG93XCI+XG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YXV0aC10cmVlIHYtZm9yPVwiaXRlbSBpbiBkYXRhXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6cHJvcHM9XCJwcm9wc1wiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtZXhwYW5kPVwiKGRhdGEpPT5vbkV4cGFuZChkYXRhKVwiXG4gICAgICAgICAgICAgICAgQG9uLW5vZGUtY2hlY2tlZD1cIihkYXRhKT0+b25DaGVja2VkKGRhdGEpXCJcbiAgICAgICAgICAgID48L2F1dGgtdHJlZT5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vdHJlZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1RyZWUnLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQXV0aFRyZWU6IHtcbiAgICAgICAgICAgIHJlbmRlcixcbiAgICAgICAgICAgIGZ1bmN0aW9uYWw6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBkZWZhdWx0OiAoKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICduYW1lJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEoKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IDEsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGxpc3Q6IFtdLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaW5pdChkYXRhLCBsZXZlKXtcbiAgICAgICAgICAgIGRhdGEuX2xldmUgPSBsZXZlO1xuICAgICAgICAgICAgaWYoZGF0YS5jaGlsZHJlbiAmJiBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIGxldmUrKztcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhLmNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KGRhdGEuY2hpbGRyZW5baV0sIGxldmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g5Yi35pawXG4gICAgICAgIHJlZnJlc2goKXtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWxleW8gC/pmpDol49cbiAgICAgICAgb25FeHBhbmQoZGF0YSl7XG4gICAgICAgICAgICBkYXRhLmV4cGFuZCA9ICFkYXRhLmV4cGFuZDtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyDpgInkuK0v5Y+W5raI6YCJ5LitXG4gICAgICAgIG9uQ2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGRhdGEuY2hlY2tlZCA9ICFkYXRhLmNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnRvb2xlckNoZWNrZWQodGhpcy5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyZW50Q2hlY2tlZCh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvb2xlckNoZWNrZWQobGlzdCwgbm9kZSl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBsaXN0KXtcbiAgICAgICAgICAgICAgICBpZihsaXN0W2ldLmlkID09PSBub2RlLmlkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQobGlzdFtpXS5jaGlsZHJlbiwgbGlzdFtpXS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sZXJDaGVja2VkKGxpc3RbaV0uY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YCJ5Lit6IqC54K55pe277yM6K6+572u5a2Q6IqC54K55YWo6YCJXG4gICAgICAgIHNldENoaWxkQ2hlY2tlZChjaGlsZHJlbiwgY2hlY2tlZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGlsZENoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4sIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDorr7nva7niLboioLngrnpgInkuK1cbiAgICAgICAgc2V0UGFyZW50Q2hlY2tlZChkYXRhKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZElzQ2hlY2tlZChkYXRhW2ldLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuaciemAieS4rVxuICAgICAgICBjaGlsZElzQ2hlY2tlZChjaGlsZHJlbil7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJc0NoZWNrZWQoY2hpbGRyZW5baV0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6K6+572u6buY6K6k6YCJ5LitXG4gICAgICAgIHNldERlZmF1bHRDaGVja2VkKGRlZmF1bHRJZHMpe1xuICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gZGVmYXVsdElkcyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHRoaXMuZGF0YSwgZGVmYXVsdElkc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFBhcmVudENoZWNrZWQodGhpcy5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g5qC55o2u5omA57uZ55qEaWTvvIzorr7nva7mlLnpobnpgInkuK1cbiAgICAgICAgc2V0Q2hlY2tlZChkYXRhLCBpZCl7XG4gICAgICAgICAgICBmb3IoY29uc3QgaSBpbiBkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmlkID09PSBpZCl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhW2ldLmNoaWxkcmVuICYmIGRhdGFbaV0uY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZGF0YVtpXS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyDojrflj5bpgInkuK3pgInnmoRrZXlcbiAgICAgICAgZ2V0Q2hlY2tlZEtleXMoKXtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2dldENoZWNrZWRLZXlzKHRoaXMuZGF0YSwga2V5cyk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6YGN5Y6G5Ye66YCJ5Lit6YCJ55qEa2V5XG4gICAgICAgIF9nZXRDaGVja2VkS2V5cyhkYXRhLCBrZXlzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkYXRhW2ldLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbiAmJiBkYXRhW2ldLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkS2V5cyhkYXRhW2ldLmNoaWxkcmVuLCBrZXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOiOt+WPlumAieS4remAieeahOiKgueCuVxuICAgICAgICBnZXRDaGVja2VkTm9kZXMoKXtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9nZXRDaGVja2VkTm9kZXModGhpcy5kYXRhLCBub2Rlcyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmBjeWOhuWHuumAieS4remAieeahOiKgueCuVxuICAgICAgICBfZ2V0Q2hlY2tlZE5vZGVzKGRhdGEsIG5vZGVzKXtcbiAgICAgICAgICAgIGZvcihjb25zdCBpIGluIGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goZGF0YVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRhdGFbaV0uY2hpbGRyZW4gJiYgZGF0YVtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tlZE5vZGVzKGRhdGFbaV0uY2hpbGRyZW4sIG5vZGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGkgaW4gdGhpcy5kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KHRoaXMuZGF0YVtpXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfVxuICAgIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgc2NvcGVkPlxuQGltcG9ydCB1cmwoLi9pY29uL2ljb25mb250LmNzcyk7XG51bHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBsaXtcbiAgICAgICAgcGFkZGluZzogNXB4IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAuY2hlY2staWNve1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgICAgICB3aWR0aDogNXB4O1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaTpob3ZlcntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkY29sb3I6ICMwMDAwMDAsICRhbHBoYTogMC4xKTtcbiAgICB9XG5cbiAgICAuZXhwYW5ke1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdGhyZWFkLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Mi51c2VbMV0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2xvYWRlci5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzFdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3Z1ZS1sb2FkZXItdjE1L2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanM/P2Nsb25lZFJ1bGVTZXQtNjQudXNlWzJdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/Y2xvbmVkUnVsZVNldC02NC51c2VbM10hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01ZTgxZTA1ZSZwcm9kJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZVwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWU4MWUwNWUmc2NvcGVkPXRydWVcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9JbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anNcIlxuZXhwb3J0ICogZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vSW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NWU4MWUwNWUmcHJvZCZsYW5nPXNjc3Mmc2NvcGVkPXRydWVcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvdnVlLWxvYWRlci12MTUvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNWU4MWUwNWVcIixcbiAgbnVsbFxuICBcbilcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7XG4gIGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTtcbiAgfVxufSIsImltcG9ydCBjaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uIGZyb20gXCIuL2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcbiAgY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApO1xuICBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpO1xufSIsImltcG9ydCBhc3NlcnRDbGFzc0JyYW5kIGZyb20gXCIuL2Fzc2VydENsYXNzQnJhbmQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldDIocywgYSwgcikge1xuICByZXR1cm4gcy5zZXQoYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7XG59IiwiaW1wb3J0IGFzc2VydENsYXNzQnJhbmQgZnJvbSBcIi4vYXNzZXJ0Q2xhc3NCcmFuZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MihzLCBhKSB7XG4gIHJldHVybiBzLmdldChhc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwiaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcbmltcG9ydCBCbG9iIGZyb20gJy4vY2xhc3Nlcy9CbG9iLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtcyxcbiAgICBGb3JtRGF0YSxcbiAgICBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52XG59XG4iLCJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnLi8uLi9oZWxwZXJzL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi4vaGVscGVycy9zcGVlZG9tZXRlci5qcyc7XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgd2l0aFhTUkZUb2tlbn0gPSBjb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKGNvbmZpZykpO1xuXG4gICAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkpIHtcbiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IGNvbmZpZy54c3JmSGVhZGVyTmFtZSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG5cbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldChjb25maWcueHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8gdGhpbmcudG9KU09OKCkgOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS42LjdcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcblxuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGU7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxuLy8gdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCBheGlvc1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cHtcclxuICAgICNheGlvcztcclxuICAgICNyZXF1ZXN0Q291bnQgPSAwOyAvLyDor7fmsYLmrKHmlbBcclxuICAgICNsb2FkaW5nSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgI2NvbmZpZyA9IHtcclxuICAgICAgICBiYXNlVVJMOiAnJyxcclxuICAgICAgICB0aW1lb3V0OiA2MCAqIDEwMDAsXHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcclxuICAgICAgICBzdWNjZXNzQ29kZTogMjAwLFxyXG4gICAgICAgIGVycm9yQ29kZTogNTAwLFxyXG4gICAgICAgIHRva2VuS2V5OiAndG9rZW4nLFxyXG4gICAgICAgIHN0b3JhZ2U6ICdzZXNzaW9uJyxcclxuICAgICAgICBjYWxsQmFja0NvZGU6IFtdLFxyXG4gICAgICAgIGNhbGw6IG51bGxcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xyXG4gICAgICAgIGZvcihjb25zdCBrIGluIHRoaXMuI2NvbmZpZyl7XHJcbiAgICAgICAgICAgIGlmKG9wdGlvbnNba10pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY29uZmlnW2tdID0gb3B0aW9uc1trXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBheGlvcy5kZWZhdWx0cy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnO1xyXG4gICAgICAgIGF4aW9zLmRlZmF1bHRzLmhlYWRlcnNbJ0FjY2VwdCddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG4gICAgICAgIHRoaXMuI2F4aW9zID0gYXhpb3MuY3JlYXRlKHRoaXMuI2NvbmZpZyk7XHJcblxyXG4gICAgICAgIHRoaXMuI2F4aW9zLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShcclxuICAgICAgICAgICAgY29uZmlnPT57XHJcbiAgICAgICAgICAgICAgICBpZighY29uZmlnLnBhcmFtcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZSA9IGxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRva2VuID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNjb25maWcuc3RvcmFnZSA9PT0gJ3Nlc3Npb24nKXtcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy4jY29uZmlnLnRva2VuS2V5KTtcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuI2NvbmZpZy5zdG9yYWdlID09PSAnbG9jYWwnKXtcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuI2NvbmZpZy50b2tlbktleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVyc1t0aGlzLiNjb25maWcudG9rZW5LZXldID0gdG9rZW47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy4jYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShcclxuICAgICAgICAgICAgcmVzcG9uc2U9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuI3JlcXVlc3RDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy4jcmVxdWVzdENvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcj0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcmVxdWVzdENvdW50LS07XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNyZXF1ZXN0Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmdJbnN0YW5jZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpe1xyXG4gICAgICAgIGlmKCFyZXMpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSB0aGlzLiNjb25maWcuc3VjY2Vzc0NvZGUpe1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHJlcy5jb2RlID09PSB0aGlzLiNjb25maWcuZXJyb3JDb2RlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGVycihyZXMpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGVycm9yKHJlcy5tc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYodGhpcy4jY29uZmlnLmNhbGxCYWNrQ29kZS5pbmNsdWRlcyhyZXMuY29kZSkgJiYgdHlwZW9mIHRoaXMuI2NvbmZpZy5jYWxsID09PSAnZnVuY3Rpb24nKXtcclxuICAgICAgICAgICAgdGhpcy4jY29uZmlnLmNhbGwocmVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdCh1cmwscGFyYW1zLHN1Y2Nlc3MsZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5wb3N0KHVybCxwYXJhbXMpLnRoZW4ocmVzPT57XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHVybCxwYXJhbXMsc3VjY2VzcyxlcnIpe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnVwZGF0ZSh1cmwscGFyYW1zKS50aGVuKHJlcz0+e1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuICAgICAgICB0aGlzLiNheGlvcy5nZXQodXJsLCB7IHBhcmFtczogcGFyYW1zfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHQoc3VjY2VzcyxlcnIscmVzKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSh1cmwsIHBhcmFtcywgc3VjY2VzcywgZXJyKXtcclxuXHRcdHRoaXMuI2F4aW9zLmRlbGV0ZSh1cmwsIHsgcGFyYW1zOiBwYXJhbXN9KS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdHRoaXMuX2hhbmRsZVJlc3VsdChzdWNjZXNzLGVycixyZXMpO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG4gICAgZG93bkxvYWQodXJsLCBwYXJhbXM9e30pe1xyXG4gICAgICAgIHRoaXMuI2F4aW9zLnBvc3QodXJsLCBwYXJhbXMsIHsncmVzcG9uc2VUeXBlJzogJ2Jsb2InfSkudGhlbihyZXM9PntcclxuXHRcdFx0aWYocmVzKXtcclxuXHRcdFx0XHRsZXQgZmlsZU5hbWUgPSBwYXJhbXMuZmlsZU5hbWU7XHJcblx0XHRcdFx0aWYoIWZpbGVOYW1lKXtcclxuXHRcdFx0XHRcdGZpbGVOYW1lID0gcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXS5zcGxpdCgnZmlsZW5hbWU9JylbMV0ucmVwbGFjZSgvXCIvZywgJycpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5kYXRhXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07Y2hhcnNldD1VVEYtOCd9KTtcclxuXHRcdFx0XHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cdFx0XHRcdGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHRcdFx0XHRsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHRcdFx0XHRsaW5rLmRvd25sb2FkID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcclxuXHRcdFx0XHRsaW5rLmNsaWNrKCk7XHJcblx0XHRcdFx0d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwobGluay5ocmVmKTtcclxuXHRcdFx0fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwicmVxdWlyZSgnLi9tZXNzYWdlL2luZGV4LmpzJyk7XHJcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJy4vcGFnaW5hdGlvbi9JbmRleC52dWUnO1xyXG5pbXBvcnQgUGFnZVRhYmxlIGZyb20gJy4vcGFnZS10YWJsZS9JbmRleC52dWUnO1xyXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4vZGlhbG9nL0luZGV4LnZ1ZSc7XHJcbmltcG9ydCBDYXJkIGZyb20gJy4vY2FyZC9JbmRleC52dWUnO1xyXG5pbXBvcnQgVHJlZSBmcm9tICcuL3RyZWUvSW5kZXgudnVlJztcclxuaW1wb3J0IF9IdHRwIGZyb20gJy4vaHR0cC9pbmRleC5qcyc7XHJcbmNvbnN0IGNvbXMgPSBbUGFnaW5hdGlvbiwgUGFnZVRhYmxlLCBEaWFsb2csIENhcmQsIFRyZWVdO1xyXG5jb25zdCBpbnN0YWxsID0gZnVuY3Rpb24oVnVlKXtcclxuICAgIGNvbXMuZm9yRWFjaChjb20gPT4ge1xyXG4gICAgICAgIFZ1ZS5jb21wb25lbnQoY29tLm5hbWUsIGNvbSk7XHJcbiAgICB9KVxyXG59XHJcblxyXG4vLyDlr7zlh7rnu4Tku7ZcclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFsbDtcclxuXHJcbmV4cG9ydCBjbGFzcyBIdHRwIGV4dGVuZHMgX0h0dHB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKXtcclxuICAgICAgICBzdXBlcihvcHRpb25zKTtcclxuICAgIH1cclxufSIsImltcG9ydCAnLi9zZXRQdWJsaWNQYXRoJ1xuaW1wb3J0IG1vZCBmcm9tICd+ZW50cnknXG5leHBvcnQgZGVmYXVsdCBtb2RcbmV4cG9ydCAqIGZyb20gJ35lbnRyeSdcbiJdLCJuYW1lcyI6WyJyZW5kZXIiLCJfdm0iLCJfYyIsIl9zZWxmIiwidG90YWwiLCJfYiIsImF0dHJzIiwiY3VycmVudFBhZ2UiLCJwYWdlU2l6ZSIsInBhZ2VTaXplcyIsIm9uIiwiaGFuZGxlU2l6ZUNoYW5nZSIsImhhbmRsZUN1cnJlbnRDaGFuZ2UiLCIkYXR0cnMiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIm5hbWUiLCJwcm9wcyIsInJlcXVpcmVkIiwidHlwZSIsIk51bWJlciIsImRlZmF1bHQiLCJwYWdlIiwibGltaXQiLCJBcnJheSIsImNvbXB1dGVkIiwiZ2V0Iiwic2V0IiwidmFsIiwiJGVtaXQiLCJ0b3RhbENvdW50IiwibWV0aG9kcyIsInN0YXRpY0NsYXNzIiwidGFibGVJZCIsInN0YXRpY1N0eWxlIiwicmVmIiwibGlzdCIsInJvd0tleSIsImxvYWQiLCJobGlnaHRDdXJyZW50Um93IiwiZGVmYXVsdEV4cGFuZEFsbCIsImhhbmRlbFNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdEFsbCIsImhhbmRsZVJvd0NsaWNrIiwic2hvd0NoZWNrQm94Iiwic29ydE51bSIsInNjb3BlZFNsb3RzIiwiX3UiLCJrZXkiLCJmbiIsInNjb3BlIiwiX3YiLCJfcyIsInBhcmFtcyIsIiRpbmRleCIsIl90IiwidXBkYXRlOnBhZ2UiLCIkZXZlbnQiLCIkc2V0IiwiZ2V0TGlzdCIsImRhdGEiLCJ1cmwiLCJTdHJpbmciLCJtZXRob2QiLCJCb29sZWFuIiwiZGVmYXVsdFBhcmFtcyIsIk9iamVjdCIsImRlZmF1bHRTZWxlY3QiLCJ5cGUiLCJ3YXRjaCIsIm5ld1ZhbCIsImhhbmRsZXIiLCJzZXRDaGVja2VkIiwiZGVlcCIsIm9sZFZhbCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsInNlbGVjdERhdGEiLCJzZWxlY3RJZHMiLCJtb3VudGVkIiwiJGxpc3RlbmVycyIsIml0ZW0iLCJwYWdlT3B0aW9uIiwic3RvcmFnZVBhcmFtcyIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsIiRyb3V0ZSIsInBhdGgiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImh0dHAiLCJyZXMiLCJfc2V0RGF0YSIsInBvc3QiLCJyZWNvcmRzIiwibGVuZ3RoIiwibWFwIiwiJG5leHRUaWNrIiwiJHJlZnMiLCJpbmNsdWRlcyIsInRvZ2dsZVJvd1NlbGVjdGlvbiIsInF1ZXJ5Iiwia2V5cyIsInJvdyIsImNvbHVtbiIsImV2ZW50IiwiXyIsInNlbGVjdGlvbkxpc3QiLCJ2YWx1ZXMiLCJzZWxlY3Rpb24iLCJzZXRDdXJyZW50IiwiaW5kZXgiLCJzZXRDdXJyZW50Um93IiwiZ2V0RGF0YSIsInRyZWUiLCJ0cmVlTm9kZSIsInJlc29sdmUiLCJkaXJlY3RpdmVzIiwicmF3TmFtZSIsInRpdGxlIiwiZGlhbG9nVmlzaWJsZSIsImhhbmRsZUNsb3NlIiwic2hvd0Nsb3NlIiwic3R5bGUiLCJtYXhIZWlnaHQiLCJtaW5IZWlnaHQiLCJzbG90IiwiVnVlIiwiZGlyZWN0aXZlIiwiYmluZCIsImVsIiwiZGlhbG9nSGVhZGVyRWwiLCJxdWVyeVNlbGVjdG9yIiwiZHJhZ0RvbSIsImN1cnNvciIsInN0eSIsImN1cnJlbnRTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJvbm1vdXNlZG93biIsImRpc1giLCJjbGllbnRYIiwib2Zmc2V0TGVmdCIsImRpc1kiLCJjbGllbnRZIiwib2Zmc2V0VG9wIiwic3R5TCIsInN0eVQiLCJsZWZ0IiwiZG9jdW1lbnQiLCJib2R5IiwiY2xpZW50V2lkdGgiLCJyZXBsYWNlIiwiY2xpZW50SGVpZ2h0IiwidG9wIiwib25tb3VzZW1vdmUiLCJlIiwibCIsInQiLCJvbm1vdXNldXAiLCJhcmlhRWxzIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJyZW1vdmVBdHRyaWJ1dGUiLCJzaGFkb3ciLCIkc2xvdHMiLCJzaG93IiwiX2wiLCJpZCIsIm9uRXhwYW5kIiwib25DaGVja2VkIiwiaGFzQ2hpbGRyZW4iLCJpc0FycmF5IiwiY2hpbGRyZW4iLCJyZW5kZXJMYWJlbCIsImgiLCJjb250ZXh0IiwibGlzdGVuZXJzIiwiY2xpY2tIYW5kbGVyIiwiY2hlY2tlZEhhbmRsZXIiLCJsYWJlbCIsImNoaWxkTm9kZXMiLCJwdXNoIiwiaWNvQ2xhc3MiLCJleHBhbmQiLCJkb21Qcm9wcyIsImNsYXNzTmFtZSIsImpvaW4iLCJtYXJnaW5MZWZ0IiwiX2xldmUiLCJmb250U2l6ZSIsInRyYW5zZm9ybSIsImNvbG9yIiwiY2xpY2siLCJjaGVja2VkIiwicmVuZGVyQ2hpbGRyZW4iLCJyZW5kZXJOb2RlIiwiY2xzIiwiY29tcG9uZW50cyIsIkF1dGhUcmVlIiwiZnVuY3Rpb25hbCIsImluaXQiLCJsZXZlIiwiaSIsInJlZnJlc2giLCJ0b29sZXJDaGVja2VkIiwic2V0UGFyZW50Q2hlY2tlZCIsIm5vZGUiLCJzZXRDaGlsZENoZWNrZWQiLCJjaGlsZElzQ2hlY2tlZCIsInNldERlZmF1bHRDaGVja2VkIiwiZGVmYXVsdElkcyIsImdldENoZWNrZWRLZXlzIiwiX2dldENoZWNrZWRLZXlzIiwiZ2V0Q2hlY2tlZE5vZGVzIiwibm9kZXMiLCJfZ2V0Q2hlY2tlZE5vZGVzIiwiaW1tZWRpYXRlIiwiX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24iLCJvYmoiLCJwcml2YXRlQ29sbGVjdGlvbiIsImhhcyIsIlR5cGVFcnJvciIsImNoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24iLCJfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyIsInByaXZhdGVNYXAiLCJ2YWx1ZSIsIl9hc3NlcnRDbGFzc0JyYW5kIiwibiIsImFyZ3VtZW50cyIsImFzc2VydENsYXNzQnJhbmQiLCJfY2xhc3NQcml2YXRlRmllbGRTZXQyIiwicyIsImEiLCJyIiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiIsInRoaXNBcmciLCJ3cmFwIiwiYXBwbHkiLCJwcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJzdHIiLCJjYWxsIiwic2xpY2UiLCJ0b0xvd2VyQ2FzZSIsImNyZWF0ZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0J1ZmZlciIsImNvbnN0cnVjdG9yIiwiaXNGdW5jdGlvbiIsImlzQXJyYXlCdWZmZXIiLCJpc0FycmF5QnVmZmVyVmlldyIsInJlc3VsdCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNCb29sZWFuIiwiaXNQbGFpbk9iamVjdCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNTdHJlYW0iLCJwaXBlIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJGb3JtRGF0YSIsImFwcGVuZCIsImlzVVJMU2VhcmNoUGFyYW1zIiwidHJpbSIsImFsbE93bktleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJnbG9iYWwiLCJpc0NvbnRleHREZWZpbmVkIiwibWVyZ2UiLCJjYXNlbGVzcyIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiZXh0ZW5kIiwiYiIsInN0cmlwQk9NIiwiY29udGVudCIsImNoYXJDb2RlQXQiLCJpbmhlcml0cyIsInN1cGVyQ29uc3RydWN0b3IiLCJkZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnR5IiwiYXNzaWduIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsInByb3BGaWx0ZXIiLCJwcm9wIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsInVuZGVmaW5lZCIsImxhc3RJbmRleCIsImluZGV4T2YiLCJ0b0FycmF5IiwiYXJyIiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJmb3JFYWNoRW50cnkiLCJnZW5lcmF0b3IiLCJuZXh0IiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJleGVjIiwiaXNIVE1MRm9ybSIsInRvQ2FtZWxDYXNlIiwicmVwbGFjZXIiLCJtIiwicDEiLCJwMiIsInRvVXBwZXJDYXNlIiwiaGFzT3duUHJvcGVydHkiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsImZyZWV6ZU1ldGhvZHMiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJFcnJvciIsInRvT2JqZWN0U2V0IiwiYXJyYXlPclN0cmluZyIsImRlbGltaXRlciIsImRlZmluZSIsInNwbGl0Iiwibm9vcCIsInRvRmluaXRlTnVtYmVyIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJBTFBIQSIsIkRJR0lUIiwiQUxQSEFCRVQiLCJBTFBIQV9ESUdJVCIsImdlbmVyYXRlU3RyaW5nIiwic2l6ZSIsImFscGhhYmV0IiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInN0YWNrIiwidmlzaXQiLCJzb3VyY2UiLCJ0YXJnZXQiLCJyZWR1Y2VkVmFsdWUiLCJpc0FzeW5jRm4iLCJpc1RoZW5hYmxlIiwidGhlbiIsImNhdGNoIiwiaGFzT3duUHJvcCIsInV0aWxzIiwiQXhpb3NFcnJvciIsIm1lc3NhZ2UiLCJjb2RlIiwiY29uZmlnIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YXR1cyIsImZyb20iLCJlcnJvciIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImNhdXNlIiwiUGxhdGZvcm1Gb3JtRGF0YSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwiY29uY2F0IiwiZWFjaCIsInRva2VuIiwiaXNGbGF0QXJyYXkiLCJzb21lIiwicHJlZGljYXRlcyIsInRlc3QiLCJ0b0Zvcm1EYXRhIiwiZm9ybURhdGEiLCJvcHRpb25zIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJkZWZpbmVkIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwiX0Jsb2IiLCJCbG9iIiwidXNlQmxvYiIsImNvbnZlcnRWYWx1ZSIsInRvSVNPU3RyaW5nIiwiQnVmZmVyIiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsInBvcCIsImVuY29kZSIsImNoYXJNYXAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJtYXRjaCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwiX3BhaXJzIiwiZW5jb2RlciIsIl9lbmNvZGUiLCJidWlsZFVSTCIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJoYW5kbGVycyIsInVzZSIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic3luY2hyb25vdXMiLCJydW5XaGVuIiwiZWplY3QiLCJjbGVhciIsImZvckVhY2hIYW5kbGVyIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJVUkxTZWFyY2hQYXJhbXMiLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJuYXZpZ2F0b3IiLCJoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYiLCJXb3JrZXJHbG9iYWxTY29wZSIsImltcG9ydFNjcmlwdHMiLCJwbGF0Zm9ybSIsInRvVVJMRW5jb2RlZEZvcm0iLCJoZWxwZXJzIiwiaXNOb2RlIiwicGFyc2VQcm9wUGF0aCIsImFycmF5VG9PYmplY3QiLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImVudHJpZXMiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInN0cmluZ2lmeVNhZmVseSIsInJhd1ZhbHVlIiwicGFyc2VyIiwicGFyc2UiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiaGVhZGVycyIsImNvbnRlbnRUeXBlIiwiZ2V0Q29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJKU09OUmVxdWVzdGVkIiwicmVzcG9uc2VUeXBlIiwic3RyaWN0SlNPTlBhcnNpbmciLCJFUlJfQkFEX1JFU1BPTlNFIiwidGltZW91dCIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwiY29tbW9uIiwiaWdub3JlRHVwbGljYXRlT2YiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInBhcnNlSGVhZGVycyIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJoZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsInBhcnNlVG9rZW5zIiwidG9rZW5zIiwidG9rZW5zUkUiLCJpc1ZhbGlkSGVhZGVyTmFtZSIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJmb3JtYXRIZWFkZXIiLCJ3IiwiY2hhciIsImJ1aWxkQWNjZXNzb3JzIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImNvbmZpZ3VyYWJsZSIsIkF4aW9zSGVhZGVycyIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsInNldEhlYWRlciIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwibWF0Y2hlciIsImRlbGV0ZSIsImRlbGV0ZWQiLCJkZWxldGVIZWFkZXIiLCJub3JtYWxpemUiLCJmb3JtYXQiLCJub3JtYWxpemVkIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsImZpcnN0IiwiYWNjZXNzb3IiLCJpbnRlcm5hbHMiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZWplY3QiLCJFUlJfQkFEX1JFUVVFU1QiLCJmbG9vciIsIndyaXRlIiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsIkRhdGUiLCJ0b0dNVFN0cmluZyIsInJlYWQiLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJiYXNlVVJMIiwicmVsYXRpdmVVUkwiLCJidWlsZEZ1bGxQYXRoIiwicmVxdWVzdGVkVVJMIiwic3RhbmRhcmRCcm93c2VyRW52IiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwicHJvdG9jb2wiLCJob3N0Iiwic2VhcmNoIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwiY2hhckF0IiwibG9jYXRpb24iLCJpc1VSTFNhbWVPcmlnaW4iLCJyZXF1ZXN0VVJMIiwibm9uU3RhbmRhcmRCcm93c2VyRW52IiwicGFyc2VQcm90b2NvbCIsInNwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiaGVhZCIsInRhaWwiLCJmaXJzdFNhbXBsZVRTIiwiY2h1bmtMZW5ndGgiLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwicm91bmQiLCJjb29raWVzIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwibG9hZGVkIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwiaW5SYW5nZSIsInByb2dyZXNzIiwiZXN0aW1hdGVkIiwiaXNYSFJBZGFwdGVyU3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiZGlzcGF0Y2hYaHJSZXF1ZXN0IiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsIndpdGhYU1JGVG9rZW4iLCJvbkNhbmNlbGVkIiwiY2FuY2VsVG9rZW4iLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVuZXNjYXBlIiwiYnRvYSIsImZ1bGxQYXRoIiwib3BlbiIsInBhcmFtc1NlcmlhbGl6ZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZURhdGEiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0IiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiZXJyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwiaGFuZGxlTG9hZCIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInNldFRpbWVvdXQiLCJvbmFib3J0IiwiaGFuZGxlQWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiaGFuZGxlRXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsImhhbmRsZVRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwic2V0UmVxdWVzdEhlYWRlciIsIndpdGhDcmVkZW50aWFscyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwic2VuZCIsImh0dHBBZGFwdGVyIiwieGhyQWRhcHRlciIsImtub3duQWRhcHRlcnMiLCJ4aHIiLCJyZW5kZXJSZWFzb24iLCJyZWFzb24iLCJpc1Jlc29sdmVkSGFuZGxlIiwiZ2V0QWRhcHRlciIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJzdGF0ZSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwiZGlzcGF0Y2hSZXF1ZXN0Iiwib25BZGFwdGVyUmVzb2x1dGlvbiIsIm9uQWRhcHRlclJlamVjdGlvbiIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwidGltZW91dE1lc3NhZ2UiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50Iiwic29ja2V0UGF0aCIsInJlc3BvbnNlRW5jb2RpbmciLCJjb21wdXRlQ29uZmlnVmFsdWUiLCJjb25maWdWYWx1ZSIsIlZFUlNJT04iLCJ2YWxpZGF0b3JzIiwidmFsaWRhdG9yIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmVyc2lvbiIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiY29uc29sZSIsIndhcm4iLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsIl9yZXF1ZXN0IiwiZHVtbXkiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJjb250ZXh0SGVhZGVycyIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwidW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMiLCJwcm9taXNlIiwiY2hhaW4iLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwiZm9yRWFjaE1ldGhvZFdpdGhEYXRhIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiaHR0cE1ldGhvZCIsIkNhbmNlbFRva2VuIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2VFeGVjdXRvciIsIl9saXN0ZW5lcnMiLCJvbmZ1bGZpbGxlZCIsInNwbGljZSIsImMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJheGlvcyIsIkNhbmNlbCIsImFsbCIsInByb21pc2VzIiwiZm9ybVRvSlNPTiIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldCIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldCIsIl9heGlvcyIsIldlYWtNYXAiLCJfcmVxdWVzdENvdW50IiwiX2xvYWRpbmdJbnN0YW5jZSIsIl9jb25maWciLCJIdHRwIiwic3VjY2Vzc0NvZGUiLCJlcnJvckNvZGUiLCJ0b2tlbktleSIsInN0b3JhZ2UiLCJjYWxsQmFja0NvZGUiLCJrIiwiX3RoaXMkcmVxdWVzdENvdW50IiwiX3RoaXMkcmVxdWVzdENvdW50MiIsImxvYWRpbmciLCJsb2NhbFN0b3JhZ2UiLCJfdGhpcyRyZXF1ZXN0Q291bnQzIiwiX3RoaXMkcmVxdWVzdENvdW50NCIsImNsb3NlIiwiX3RoaXMkcmVxdWVzdENvdW50NSIsIl90aGlzJHJlcXVlc3RDb3VudDYiLCJfaGFuZGxlUmVzdWx0Iiwic3VjY2VzcyIsIm1zZyIsInVwZGF0ZSIsImRvd25Mb2FkIiwiYmxvYiIsImxpbmsiLCJkaXNwbGF5IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG93bmxvYWQiLCJyZXZva2VPYmplY3RVUkwiLCJyZXF1aXJlIiwiUGFnaW5hdGlvbiIsIlBhZ2VUYWJsZSIsIkRpYWxvZyIsIkNhcmQiLCJUcmVlIiwiX0h0dHAiLCJjb21zIiwiaW5zdGFsbCIsImNvbSIsImNvbXBvbmVudCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4884\n");
27
27
 
28
28
  /***/ }),
29
29
 
@@ -2007,7 +2007,7 @@ eval("\nvar DESCRIPTORS = __webpack_require__(3724);\nvar uncurryThis = __webpac
2007
2007
  /******/ // startup
2008
2008
  /******/ // Load entry module and return exports
2009
2009
  /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
2010
- /******/ var __webpack_exports__ = __webpack_require__(5501);
2010
+ /******/ var __webpack_exports__ = __webpack_require__(4884);
2011
2011
  /******/
2012
2012
  /******/ return __webpack_exports__;
2013
2013
  /******/ })()