From 974d9b5da1d4fdb91f7d4e09c970d5a93e03e12c Mon Sep 17 00:00:00 2001 From: E98Developer Date: Mon, 15 Jun 2026 13:39:28 +0200 Subject: [PATCH] FIX t2t->e2e transfer issues --- public/js/admin.js | 2 +- public/js/module.js | 2 +- public/mix-manifest.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/js/admin.js b/public/js/admin.js index 0135cf3..f4e6c55 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -45,7 +45,7 @@ eval("{window.PriceListProfitCenterAdmin = function (options) {\n /*\n * Vari \***************************************/ () { -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Product === 'undefined') {\n var _Product = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function _Product(data, options) {\n var _this;\n _classCallCheck(this, _Product);\n _this = _callSuper(this, _Product, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Product constructor called');\n return _this;\n }\n _inherits(_Product, _DataModel);\n return _createClass(_Product);\n }(DataModel);\n ;\n window.Product = _Product;\n}\nwindow.ProductAdmin = function (options, ProductItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProduct',\n container: null,\n resultContainerSelector: '.containerProduct .containerResult',\n resultContainer: null,\n testMode: false,\n filters: {\n Product: {}\n },\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Product = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var dataTable = null;\n /*\n * Constructor\n */\n this.construct = function (options, ProductItem) {\n console.log('ProductAdmin constructor called');\n $.extend(Opts, options);\n if (!ProductItem) {\n console.log('Product letre kellet hozni ');\n if (!APP.Product) {\n APP.Product = new window.Product();\n }\n root.Product = APP.Product;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.initViewListOld = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"createdRow\": function createdRow(row, data, dataIndex) {\n $(row).attr('data-id', data.id);\n $(row).attr('title', 'ID: ' + data.id);\n $(row).attr('data-toggle', 'tooltip');\n $(row).attr('data-placement', 'right');\n },\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n $('[data-toggle=\"tooltip\"]').tooltip();\n }\n });\n debug('listview end');\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('initViewSearch inicialization 1');\n root.container.find('select.supplierSelect, select.profitCenterSelect, select.productGroupSelect, select.producerSelect, select.hooreycaNamesSelect, select.specialOfferSelect').select2();\n root.container.find('select.productSelect').select2({\n placeholder: '...',\n allowClear: true,\n ajax: {\n url: Opts.URL.getProductSearch,\n dataType: 'json',\n data: function data(params) {\n return {\n term: params.term || '',\n page: params.page || 1,\n supplierId: root.container.find('select.supplierSelect').val()\n };\n },\n cache: true\n }\n });\n root.container.find('.datePickerFrom, .datePickerTo').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText, obj) {\n debug(this);\n debug(obj.input);\n /*\n root.container.find('.selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\n */\n //root.changePriceListProfitCenterParameter(null,$(obj.input));\n }\n });\n root.container.find('.datePickerClick').click(function () {\n debug($(this).data('action'));\n root.container.find('input[name=\"' + $(this).data('action') + '\"]').datepicker('show');\n });\n var button = root.container.find('.FormSendButton');\n button.off('click');\n button.on('click', function () {\n debug('FormSendButton click');\n root.loadingResultContainer();\n root.requestProducts();\n });\n var newProductButton = root.container.find('#NewProductButton');\n newProductButton.off('click');\n newProductButton.on('click', function () {\n root.newProduct();\n });\n root.setVisibleFilters('Product');\n if (root.loadFiltersFromLocalStorage()) {\n root.loadingResultContainer();\n root.requestProducts();\n }\n debug('initViewSearch end');\n };\n this.loadingResultContainer = function () {\n debug('clearResultContainer');\n debug(root.resultContainer);\n root.hideResultContainer();\n root.container.find('.containerLoading').show();\n /*\n let template=root.container.find('template[data-name=\"loading\"]').html()\n root.resultContainer.html(template);\n */\n };\n this.hideResultContainer = function () {\n debug('hide containerResult');\n debug(root.resultContainer);\n root.resultContainer.hide();\n };\n this.showResultContainer = function () {\n root.container.find('.containerLoading').hide();\n root.resultContainer.show();\n };\n this.init = function (options, ProductItem) {\n console.log('ProductAdmin init');\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProductItem) {\n root.Product = ProductItem;\n }\n root.dataTable = null;\n root.container = $(Opts.containerCssSelector);\n root.resultContainer = $(Opts.resultContainerSelector);\n root.initViewList();\n };\n this.initViewDetails = function (options, ProductItem) {\n debug('**call initViewDetails ');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n if (root.Product.picture) {\n console.log('*****//////////////////****************');\n console.log(root.Product.picture);\n console.log(CSSSelectorForm);\n var picUrl = root.Product.picture.PublicUrl + '/' + root.Product.picture.filename;\n console.log(picUrl);\n console.log($(CSSSelectorForm + ' img.imageProduct'));\n $(CSSSelectorForm + ' img.imageProduct').attr('src', picUrl);\n }\n if (root.Product.specification) {\n console.log('*****//////////////////****************');\n console.log(root.Product.specification);\n var docUrl = root.Product.specification.PublicUrl + '/' + root.Product.specification.filename;\n root.addAttachment(root.Product.specification);\n }\n var FormSaveButton = $(CSSSelectorForm + ' button.FormSaveButton');\n FormSaveButton.off('click');\n FormSaveButton.on('click', root.clickSaveButton);\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n //root.Supplier.attachment.push(attachmentData);\n //attachmentData.rowNum=root.Supplier.attachment.length;\n attachmentData.rowNum = 1;\n var dateStr = new Date(attachmentData.updated_at);\n dateStr = dateStr.toLocaleString('hu-HU', {});\n attachmentData.date = dateStr;\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"productAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n //root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Fájl hozzáadva!\",\n message: attachmentData.original_filename + \" fájl hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.setVisibleFilters = function (type) {\n console.log('setVisibleFilters');\n console.log(Opts.filters[type]);\n console.log(root.container);\n $(root.container).find('div[class*=\"filter\"]').hide();\n for (var typeIndex in Opts.filters[type]) {\n var typeName = Opts.filters[type][typeIndex];\n debug(typeName);\n console.log($(root.container).find('.filter_' + typeName));\n $(root.container).find('.filter_' + typeName).show();\n }\n };\n this.c = function (CSSSelectorForm) {\n console.log('c called');\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find('form'));\n console.log(root.container.find(CSSSelectorForm));\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find(CSSSelectorForm));\n console.log(root.container.find('form'));\n console.log(root.container.find('form' + CSSSelectorForm)[0]);\n //return;\n var ajaxData = new FormData(root.container.find('form' + CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('suppliers[]', value);\n });\n ajaxData[\"delete\"]('supplier');\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenters[]', value);\n });\n ajaxData[\"delete\"]('profitCenter');\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroups[]', value);\n });\n ajaxData[\"delete\"]('productGroup');\n $.each(ajaxData.getAll('product'), function (key, value) {\n ajaxData.append('products[]', value);\n });\n ajaxData[\"delete\"]('product');\n $.each(ajaxData.getAll('producer'), function (key, value) {\n ajaxData.append('producers[]', value);\n });\n ajaxData[\"delete\"]('producer');\n $.each(ajaxData.getAll('hooreycaName'), function (key, value) {\n ajaxData.append('hooreycaNames[]', value);\n });\n ajaxData[\"delete\"]('hooreycaName');\n\n //ajaxData.append('_token', root.container.find('input[name=_token]').val());\n\n /*\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n let indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n */\n return ajaxData;\n };\n this.getAjaxDataJson = function () {\n var ajaxData = root.formDataToDataObjectAPICall('.ProductListForm');\n console.log('======================');\n var _iterator = _createForOfIteratorHelper(ajaxData.entries()),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var pair = _step.value;\n console.log(pair[0] + ', ' + pair[1]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var object = {};\n ajaxData.forEach(function (value, key) {\n // Reflect.has in favor of: object.hasOwnProperty(key)\n if (!Reflect.has(object, key)) {\n object[key] = value;\n return;\n }\n if (!Array.isArray(object[key])) {\n object[key] = [object[key]];\n }\n object[key].push(value);\n });\n var ajaxDataJson = JSON.stringify(object);\n return ajaxDataJson;\n };\n this.requestProducts = function () {\n var ajaxUrl = Opts.URL.getDataTableContent;\n var ajaxMethod = 'GET';\n //token formdataba!\n debug(ajaxUrl);\n ajaxDataJson = root.getAjaxDataJson();\n console.log(ajaxDataJson);\n\n // Save filters to localStorage\n var form = root.container.find('form.ProductListForm');\n if (form.length > 0) {\n var formData = new FormData(form[0]);\n var filterData = {};\n formData.forEach(function (value, key) {\n if (!Reflect.has(filterData, key)) {\n filterData[key] = value;\n return;\n }\n if (!Array.isArray(filterData[key])) {\n filterData[key] = [filterData[key]];\n }\n filterData[key].push(value);\n });\n localStorage.setItem('product_admin_filters', JSON.stringify(filterData));\n }\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n console.log(dataTableCSSSelector);\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n /*\n if(typeof options['orderDirective']!='undefined'){\n orderDirective=options['orderDirective'];\n }\n */\n\n if (!root.dataTable) {\n console.log('XXXXXXXXXXXXXXXXXXXX Nincs Datatable');\n root.dataTable = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContent,\n data: function data(d) {\n console.log('---******----');\n console.log(APP.ProductAdmin.getAjaxDataJson());\n return $.extend({}, d, {\n ajaxData: APP.ProductAdmin.getAjaxDataJson()\n });\n },\n type: ajaxMethod\n /*\n data: ajaxData,\n */\n },\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"buyerProductName\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"createdRow\": function createdRow(row, data, dataIndex) {\n $(row).attr('data-id', data.id);\n $(row).attr('title', 'ID: ' + data.id);\n $(row).attr('data-toggle', 'tooltip');\n $(row).attr('data-placement', 'right');\n },\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n root.showResultContainer();\n $('[data-toggle=\"tooltip\"]').tooltip();\n console.log('drawCallback');\n }\n });\n } else {\n console.log('XXXXXXXXXXXXXXXXXXXX van Datatable');\n //root.dataTable.ajax.reload();\n root.dataTable.draw();\n }\n };\n this.loadFiltersFromLocalStorage = function () {\n var filters = localStorage.getItem('product_admin_filters');\n if (filters) {\n var filterData = JSON.parse(filters);\n var form = root.container.find('form.ProductListForm');\n if (form.length === 0) return false;\n var _loop = function _loop() {\n var value = filterData[key];\n var fields = form.find('[name=\"' + key + '\"]');\n if (fields.length) {\n if (fields.is('select')) {\n fields.val(value).trigger('change');\n } else if (fields.is(':checkbox') || fields.is(':radio')) {\n fields.each(function () {\n if (Array.isArray(value)) {\n $(this).prop('checked', value.includes($(this).val()));\n } else {\n $(this).prop('checked', $(this).val() == value);\n }\n });\n } else {\n fields.val(value);\n }\n }\n };\n for (var key in filterData) {\n _loop();\n }\n return true;\n }\n return false;\n };\n this.processResponse = function () {};\n this.newProduct = function () {\n var selectedSuppliers = root.container.find('select.supplierSelect').val();\n if (!selectedSuppliers || selectedSuppliers.length === 0) {\n Toast.create({\n title: \"Hiányzó beszállító!\",\n message: \"Kérjük válasszon ki pontosan 1 beszállítót az új termék létrehozásához!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n return;\n }\n if (selectedSuppliers.length > 1) {\n Toast.create({\n title: \"Túl sok beszállító!\",\n message: \"Kérjük pontosan 1 beszállítót válasszon ki (jelenleg \" + selectedSuppliers.length + \" van kiválasztva)!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n return;\n }\n var supplierId = selectedSuppliers[0];\n var createUrl = Opts.URL.create + '?supplierId=' + supplierId;\n APP.loadMainContent(createUrl, root.initViewDetails);\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall('.productForm');\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Product.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Product.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n //'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n 'X-CSRF-TOKEN': Opts.token\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű termék elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n // APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList);\n }\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZHVjdC5qcyIsIm5hbWVzIjpbIlByb2R1Y3QiLCJfRGF0YU1vZGVsIiwiX1Byb2R1Y3QiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZHVjdEFkbWluIiwiUHJvZHVjdEl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsImNvbnRhaW5lciIsInJlc3VsdENvbnRhaW5lclNlbGVjdG9yIiwicmVzdWx0Q29udGFpbmVyIiwidGVzdE1vZGUiLCJmaWx0ZXJzIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJldmVudCIsImRlYnVnIiwibm9kZSIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJkYXRhdGFibGVSb3dBY3Rpb25FZGl0IiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3RGV0YWlscyIsImluaXRWaWV3TGlzdE9sZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwibGFuZ3VhZ2UiLCJ1cmwiLCJzZXJ2ZXJTaWRlIiwib3JkZXJhYmxlIiwicmVuZGVyIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJjcmVhdGVkUm93IiwiZGF0YUluZGV4IiwiYXR0ciIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwidG9vbHRpcCIsImluaXRWaWV3TGlzdCIsImZpbmQiLCJzZWxlY3QyIiwicGxhY2Vob2xkZXIiLCJhbGxvd0NsZWFyIiwiYWpheCIsImdldFByb2R1Y3RTZWFyY2giLCJkYXRhVHlwZSIsInBhcmFtcyIsInRlcm0iLCJwYWdlIiwic3VwcGxpZXJJZCIsInZhbCIsImNhY2hlIiwiZGF0ZXBpY2tlciIsImRhdGVGb3JtYXQiLCJvblNlbGVjdCIsImRhdGVUZXh0Iiwib2JqIiwiaW5wdXQiLCJjbGljayIsImJ1dHRvbiIsIm9mZiIsIm9uIiwibG9hZGluZ1Jlc3VsdENvbnRhaW5lciIsInJlcXVlc3RQcm9kdWN0cyIsIm5ld1Byb2R1Y3RCdXR0b24iLCJuZXdQcm9kdWN0Iiwic2V0VmlzaWJsZUZpbHRlcnMiLCJsb2FkRmlsdGVyc0Zyb21Mb2NhbFN0b3JhZ2UiLCJoaWRlUmVzdWx0Q29udGFpbmVyIiwiaGlkZSIsInNob3dSZXN1bHRDb250YWluZXIiLCJpbml0IiwiQ1NTU2VsZWN0b3JGb3JtIiwicGljdHVyZSIsInBpY1VybCIsIlB1YmxpY1VybCIsImZpbGVuYW1lIiwic3BlY2lmaWNhdGlvbiIsImRvY1VybCIsImFkZEF0dGFjaG1lbnQiLCJGb3JtU2F2ZUJ1dHRvbiIsImNsaWNrU2F2ZUJ1dHRvbiIsImF0dGFjaG1lbnREYXRhIiwicm93TnVtIiwiZGF0ZVN0ciIsIkRhdGUiLCJ1cGRhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJkYXRlIiwibGluayIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiVG9hc3QiLCJlbmFibGVUaW1lcnMiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbF9maWxlbmFtZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJ0aW1lb3V0IiwidHlwZUluZGV4IiwidHlwZU5hbWUiLCJjIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheERhdGEiLCJGb3JtRGF0YSIsImVhY2giLCJnZXRBbGwiLCJrZXkiLCJ2YWx1ZSIsImdldEFqYXhEYXRhSnNvbiIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiZW50cmllcyIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwicGFpciIsImVyciIsImUiLCJmIiwib2JqZWN0IiwiZm9yRWFjaCIsIlJlZmxlY3QiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwiYWpheERhdGFKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsImFqYXhNZXRob2QiLCJmb3JtIiwiZm9ybURhdGEiLCJmaWx0ZXJEYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImQiLCJkcmF3IiwiZ2V0SXRlbSIsInBhcnNlIiwiX2xvb3AiLCJmaWVsZHMiLCJpcyIsInRyaWdnZXIiLCJwcm9wIiwiaW5jbHVkZXMiLCJwcm9jZXNzUmVzcG9uc2UiLCJzZWxlY3RlZFN1cHBsaWVycyIsIkRBTkdFUiIsImNyZWF0ZVVybCIsInByZXZlbnREZWZhdWx0IiwiY2hlY2tWYWxpZGl0eSIsInN0b3BQcm9wYWdhdGlvbiIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwic3VjY2VzcyIsImdldCJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2R1Y3QuanM/OWI1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgUHJvZHVjdD09PSd1bmRlZmluZWQnKXtcbiAgICBjbGFzcyBQcm9kdWN0IGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIENvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgd2luZG93LlByb2R1Y3Q9UHJvZHVjdDtcbn1cbndpbmRvdy5Qcm9kdWN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pIHtcbiAgICAvKlxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXG4gICAgICogaW4gdGhlIGNsYXNzXG4gICAgICovXG4gICAgbGV0IE9wdHMgPSB7XG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJQcm9kdWN0JyxcbiAgICAgICAgY29udGFpbmVyOm51bGwsXG4gICAgICAgIHJlc3VsdENvbnRhaW5lclNlbGVjdG9yOicuY29udGFpbmVyUHJvZHVjdCAuY29udGFpbmVyUmVzdWx0JyxcbiAgICAgICAgcmVzdWx0Q29udGFpbmVyOm51bGwsXG5cbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJzOntcbiAgICAgICAgICAgIFByb2R1Y3Q6e30sXG4gICAgICAgIH0sXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDogJycsXG4gICAgICAgICAgICBpbmRleDogJycsXG4gICAgICAgICAgICBzaG93OiAnJyxcbiAgICAgICAgICAgIGVkaXQ6ICcnLFxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcbiAgICAgICAgICAgIHVwZGF0ZTogJycsXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6ICcnLFxuICAgICAgICAgICAgZGV0YWNoRmlsZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZToge1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ10sXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IFByb2R1Y3QgPSB7fTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XG4gICAgbGV0IGRhdGFUYWJsZT1udWxsO1xuICAgIC8qXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBQcm9kdWN0SXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFQcm9kdWN0SXRlbSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgbGV0cmUga2VsbGV0IGhvem5pICcpO1xuICAgICAgICAgICAgaWYgKCFBUFAuUHJvZHVjdCkge1xuICAgICAgICAgICAgICAgIEFQUC5Qcm9kdWN0ID0gbmV3IHdpbmRvdy5Qcm9kdWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290LlByb2R1Y3QgPSBBUFAuUHJvZHVjdDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRWRpdD1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdMaXN0T2xkID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwicHJvZHVjdEdyb3VwXCJ9LFxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJzdXBwbGllck5hbWVcIn0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiY3JlYXRlZFJvd1wiOiBmdW5jdGlvbihyb3csIGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgICAgICAgICAgICQocm93KS5hdHRyKCdkYXRhLWlkJywgZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ3RpdGxlJywgJ0lEOiAnICsgZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ2RhdGEtdG9nZ2xlJywgJ3Rvb2x0aXAnKTtcbiAgICAgICAgICAgICAgICAkKHJvdykuYXR0cignZGF0YS1wbGFjZW1lbnQnLCAncmlnaHQnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3TGlzdD1mdW5jdGlvbiAob3B0aW9ucz17fSkge1xuICAgICAgICBkZWJ1ZygnaW5pdFZpZXdTZWFyY2ggaW5pY2lhbGl6YXRpb24gMScpO1xuXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5zdXBwbGllclNlbGVjdCwgc2VsZWN0LnByb2ZpdENlbnRlclNlbGVjdCwgc2VsZWN0LnByb2R1Y3RHcm91cFNlbGVjdCwgc2VsZWN0LnByb2R1Y2VyU2VsZWN0LCBzZWxlY3QuaG9vcmV5Y2FOYW1lc1NlbGVjdCwgc2VsZWN0LnNwZWNpYWxPZmZlclNlbGVjdCcpLnNlbGVjdDIoKTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnByb2R1Y3RTZWxlY3QnKS5zZWxlY3QyKHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcbiAgICAgICAgICAgIGFsbG93Q2xlYXI6IHRydWUsXG4gICAgICAgICAgICBhamF4OiB7XG4gICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXRQcm9kdWN0U2VhcmNoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtOiBwYXJhbXMudGVybSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhcmFtcy5wYWdlIHx8IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllcklkOiByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3Quc3VwcGxpZXJTZWxlY3QnKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyRnJvbSwgLmRhdGVQaWNrZXJUbycpLmRhdGVwaWNrZXIoe1xuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcblxuICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCxvYmopIHtcbiAgICAgICAgICAgICAgICBkZWJ1Zyh0aGlzKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhvYmouaW5wdXQpO1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAvL3Jvb3QuY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyKG51bGwsJChvYmouaW5wdXQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuZGF0ZVBpY2tlckNsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGRlYnVnKCQodGhpcykuZGF0YSgnYWN0aW9uJykpO1xuICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1cIicrJCh0aGlzKS5kYXRhKCdhY3Rpb24nKSsnXCJdJykuZGF0ZXBpY2tlcignc2hvdycpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGJ1dHRvbj1yb290LmNvbnRhaW5lci5maW5kKCcuRm9ybVNlbmRCdXR0b24nKTtcbiAgICAgICAgYnV0dG9uLm9mZignY2xpY2snKTtcbiAgICAgICAgYnV0dG9uLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBkZWJ1ZyAoJ0Zvcm1TZW5kQnV0dG9uIGNsaWNrJyk7XG4gICAgICAgICAgICByb290LmxvYWRpbmdSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgICAgIHJvb3QucmVxdWVzdFByb2R1Y3RzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBuZXdQcm9kdWN0QnV0dG9uPXJvb3QuY29udGFpbmVyLmZpbmQoJyNOZXdQcm9kdWN0QnV0dG9uJyk7XG4gICAgICAgIG5ld1Byb2R1Y3RCdXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBuZXdQcm9kdWN0QnV0dG9uLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICByb290Lm5ld1Byb2R1Y3QoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm9vdC5zZXRWaXNpYmxlRmlsdGVycygnUHJvZHVjdCcpO1xuXG4gICAgICAgIGlmIChyb290LmxvYWRGaWx0ZXJzRnJvbUxvY2FsU3RvcmFnZSgpKSB7XG4gICAgICAgICAgICByb290LmxvYWRpbmdSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgICAgIHJvb3QucmVxdWVzdFByb2R1Y3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZygnaW5pdFZpZXdTZWFyY2ggZW5kJyk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmxvYWRpbmdSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdjbGVhclJlc3VsdENvbnRhaW5lcicpO1xuICAgICAgICBkZWJ1Zyhyb290LnJlc3VsdENvbnRhaW5lcik7XG4gICAgICAgIHJvb3QuaGlkZVJlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLnNob3coKTtcbiAgICAgICAgLypcbiAgICAgICAgbGV0IHRlbXBsYXRlPXJvb3QuY29udGFpbmVyLmZpbmQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cImxvYWRpbmdcIl0nKS5odG1sKClcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuaHRtbCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICovXG4gICAgfVxuICAgIHRoaXMuaGlkZVJlc3VsdENvbnRhaW5lcj1mdW5jdGlvbiAoKXtcbiAgICAgICAgZGVidWcoJ2hpZGUgY29udGFpbmVyUmVzdWx0Jyk7XG4gICAgICAgIGRlYnVnKHJvb3QucmVzdWx0Q29udGFpbmVyKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLnNob3dSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5jb250YWluZXJMb2FkaW5nJykuaGlkZSgpO1xuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5zaG93KCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFByb2R1Y3RJdGVtKXtcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3RBZG1pbiBpbml0Jyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZihQcm9kdWN0SXRlbSl7XG4gICAgICAgICAgICByb290LlByb2R1Y3Q9UHJvZHVjdEl0ZW1cbiAgICAgICAgfVxuICAgICAgICByb290LmRhdGFUYWJsZT1udWxsO1xuICAgICAgICByb290LmNvbnRhaW5lcj0kKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpO1xuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lcj0kKE9wdHMucmVzdWx0Q29udGFpbmVyU2VsZWN0b3IpO1xuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZHVjdEZvcm0nO1xuICAgICAgICBpZihyb290LlByb2R1Y3QucGljdHVyZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKiovLy8vLy8vLy8vLy8vLy8vLy8qKioqKioqKioqKioqKioqJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2R1Y3QucGljdHVyZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xuICAgICAgICAgICAgbGV0IHBpY1VybD1yb290LlByb2R1Y3QucGljdHVyZS5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5waWN0dXJlLmZpbGVuYW1lO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGljVXJsKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpKTtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpLmF0dHIoJ3NyYycscGljVXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZihyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbil7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKiovLy8vLy8vLy8vLy8vLy8vLy8qKioqKioqKioqKioqKioqJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbik7XG4gICAgICAgICAgICBsZXQgZG9jVXJsPXJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLlB1YmxpY1VybCsnLycrcm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24uZmlsZW5hbWU7XG4gICAgICAgICAgICByb290LmFkZEF0dGFjaG1lbnQocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBGb3JtU2F2ZUJ1dHRvbj0kKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpO1xuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vZmYoJ2NsaWNrJyk7XG4gICAgICAgIEZvcm1TYXZlQnV0dG9uLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xuXG4gICAgfVxuXG4gICAgdGhpcy5hZGRBdHRhY2htZW50PWZ1bmN0aW9uIChhdHRhY2htZW50RGF0YSl7XG4gICAgICAgIGNvbnNvbGUubG9nKGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgLy9yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIC8vYXR0YWNobWVudERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5sZW5ndGg7XG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT0xO1xuICAgICAgICBsZXQgZGF0ZVN0cj1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS51cGRhdGVkX2F0KTtcbiAgICAgICAgZGF0ZVN0cj1kYXRlU3RyLnRvTG9jYWxlU3RyaW5nKCdodS1IVScsIHt9KTtcbiAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlU3RyO1xuICAgICAgICBhdHRhY2htZW50RGF0YS5saW5rPWF0dGFjaG1lbnREYXRhLlB1YmxpY1VybCsnLycrYXR0YWNobWVudERhdGEuZmlsZW5hbWU7XG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9kdWN0QXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgIC8vcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkbDoWpsIGhvenrDoWFkdmEhXCIsIG1lc3NhZ2U6IGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFZpc2libGVGaWx0ZXJzPWZ1bmN0aW9uICh0eXBlKXtcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFZpc2libGVGaWx0ZXJzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMuZmlsdGVyc1t0eXBlXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyKTtcbiAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnZGl2W2NsYXNzKj1cImZpbHRlclwiXScpLmhpZGUoKVxuICAgICAgICBmb3IgKGNvbnN0IHR5cGVJbmRleCBpbiBPcHRzLmZpbHRlcnNbdHlwZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lPU9wdHMuZmlsdGVyc1t0eXBlXVt0eXBlSW5kZXhdO1xuICAgICAgICAgICAgZGVidWcodHlwZU5hbWUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKSk7XG4gICAgICAgICAgICAkKHJvb3QuY29udGFpbmVyKS5maW5kKCcuZmlsdGVyXycrdHlwZU5hbWUpLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmM9ZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjIGNhbGxlZCcpO1xuICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcblxuICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nK0NTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAvL3JldHVybjtcbiAgICAgICAgbGV0IGFqYXhEYXRhID0gbmV3IEZvcm1EYXRhKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nK0NTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdzdXBwbGllcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllcnNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdzdXBwbGllcicpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZml0Q2VudGVyc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2ZpdENlbnRlcicpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjdEdyb3Vwc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3RHcm91cCcpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0JyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjdCcpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWNlcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWNlcnNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWNlcicpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdob29yZXljYU5hbWUnKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnaG9vcmV5Y2FOYW1lc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ2hvb3JleWNhTmFtZScpO1xuXG4gICAgICAgIC8vYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhLZXkgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWpheERhdGEuZ2V0KGluZGV4S2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksIGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csIFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhO1xuXG4gICAgfVxuICAgIHRoaXMuZ2V0QWpheERhdGFKc29uPWZ1bmN0aW9uKCl7XG5cbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuUHJvZHVjdExpc3RGb3JtJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICAgIGZvciAobGV0IHBhaXIgb2YgYWpheERhdGEuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYWlyWzBdKyAnLCAnICsgcGFpclsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2JqZWN0ID0ge307XG4gICAgICAgIGFqYXhEYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFJlZmxlY3QuaGFzIGluIGZhdm9yIG9mOiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKG9iamVjdCwga2V5KSl7XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShvYmplY3Rba2V5XSkpe1xuICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gW29iamVjdFtrZXldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iamVjdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGFqYXhEYXRhSnNvbiA9IEpTT04uc3RyaW5naWZ5KG9iamVjdCk7XG4gICAgICAgIHJldHVybiBhamF4RGF0YUpzb247XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0UHJvZHVjdHM9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50O1xuICAgICAgICBsZXQgYWpheE1ldGhvZD0nR0VUJztcbiAgICAgICAgLy90b2tlbiBmb3JtZGF0YWJhIVxuICAgICAgICBkZWJ1ZyhhamF4VXJsKTtcblxuICAgICAgICBhamF4RGF0YUpzb249cm9vdC5nZXRBamF4RGF0YUpzb24oKTtcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGFKc29uKTtcblxuICAgICAgICAvLyBTYXZlIGZpbHRlcnMgdG8gbG9jYWxTdG9yYWdlXG4gICAgICAgIGxldCBmb3JtID0gcm9vdC5jb250YWluZXIuZmluZCgnZm9ybS5Qcm9kdWN0TGlzdEZvcm0nKTtcbiAgICAgICAgaWYgKGZvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm1bMF0pO1xuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSB7fTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZmlsdGVyRGF0YSwga2V5KSl7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpbHRlckRhdGFba2V5XSkpe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhW2tleV0gPSBbZmlsdGVyRGF0YVtrZXldXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyRGF0YVtrZXldLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncHJvZHVjdF9hZG1pbl9maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoZmlsdGVyRGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhVGFibGVDU1NTZWxlY3RvciApO1xuXG4gICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcbiAgICAgICAgQVBQLnNldE9wdHMoe1xuICAgICAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxuICAgICAgICB9KVxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XG4gICAgICAgIC8qXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgaWYoIXJvb3QuZGF0YVRhYmxlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdYWFhYWFhYWFhYWFhYWFhYWFhYWCBOaW5jcyBEYXRhdGFibGUnKTtcbiAgICAgICAgICAgIHJvb3QuZGF0YVRhYmxlPVxuICAgICAgICAgICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcbiAgICAgICAgICAgICAgICAgICAgXCJhamF4XCI6e1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tKioqKioqLS0tLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEFQUC5Qcm9kdWN0QWRtaW4uZ2V0QWpheERhdGFKc29uKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YTogQVBQLlByb2R1Y3RBZG1pbi5nZXRBamF4RGF0YUpzb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFqYXhNZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGFqYXhEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgfSAsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImJ1eWVyUHJvZHVjdE5hbWVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJwcm9kdWN0R3JvdXBcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkUm93XCI6IGZ1bmN0aW9uKHJvdywgZGF0YSwgZGF0YUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHJvdykuYXR0cignZGF0YS1pZCcsIGRhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ3RpdGxlJywgJ0lEOiAnICsgZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHJvdykuYXR0cignZGF0YS10b2dnbGUnLCAndG9vbHRpcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ2RhdGEtcGxhY2VtZW50JywgJ3JpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93UmVzdWx0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RyYXdDYWxsYmFjaycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuXG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggdmFuIERhdGF0YWJsZScpO1xuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgcm9vdC5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMubG9hZEZpbHRlcnNGcm9tTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Byb2R1Y3RfYWRtaW5fZmlsdGVycycpO1xuICAgICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSBKU09OLnBhcnNlKGZpbHRlcnMpO1xuICAgICAgICAgICAgbGV0IGZvcm0gPSByb290LmNvbnRhaW5lci5maW5kKCdmb3JtLlByb2R1Y3RMaXN0Rm9ybScpO1xuXG4gICAgICAgICAgICBpZiAoZm9ybS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGZpbHRlckRhdGEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJEYXRhW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IGZvcm0uZmluZCgnW25hbWU9XCInICsga2V5ICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5pcygnc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkcy5pcygnOmNoZWNrYm94JykgfHwgZmllbGRzLmlzKCc6cmFkaW8nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsIHZhbHVlLmluY2x1ZGVzKCQodGhpcykudmFsKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLnZhbCgpID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlPWZ1bmN0aW9uICgpIHtcblxuICAgIH1cblxuICAgIHRoaXMubmV3UHJvZHVjdD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZFN1cHBsaWVycz1yb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3Quc3VwcGxpZXJTZWxlY3QnKS52YWwoKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFN1cHBsaWVycyB8fCBzZWxlY3RlZFN1cHBsaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkhpw6FueXrDsyBiZXN6w6FsbMOtdMOzIVwiLCBtZXNzYWdlOiBcIkvDqXJqw7xrIHbDoWxhc3N6b24ga2kgcG9udG9zYW4gMSBiZXN6w6FsbMOtdMOzdCBheiDDumogdGVybcOpayBsw6l0cmVob3rDoXPDoWhveiFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFN1cHBsaWVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJUw7psIHNvayBiZXN6w6FsbMOtdMOzIVwiLCBtZXNzYWdlOiBcIkvDqXJqw7xrIHBvbnRvc2FuIDEgYmVzesOhbGzDrXTDs3QgdsOhbGFzc3pvbiBraSAoamVsZW5sZWcgXCIgKyBzZWxlY3RlZFN1cHBsaWVycy5sZW5ndGggKyBcIiB2YW4ga2l2w6FsYXN6dHZhKSFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdXBwbGllcklkID0gc2VsZWN0ZWRTdXBwbGllcnNbMF07XG4gICAgICAgIGxldCBjcmVhdGVVcmwgPSBPcHRzLlVSTC5jcmVhdGUgKyAnP3N1cHBsaWVySWQ9JyArIHN1cHBsaWVySWQ7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoY3JlYXRlVXJsLCByb290LmluaXRWaWV3RGV0YWlscyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcblxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZHVjdEZvcm0nO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLnByb2R1Y3RGb3JtJyk7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LmlkKXtcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuUHJvZHVjdC5pZCk7XG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIC8vJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiBPcHRzLnRva2VuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU9WzAsICdkZXNjJ107XG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHRlcm3DqWsgZWxtZW50dmVcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsT0FBTyxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3RCQSxRQUFPLDBCQUFBQyxVQUFBO0lBRVQ7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsU0FBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFDLGVBQUEsT0FBQUosUUFBQTtNQUN2QkcsS0FBQSxHQUFBRSxVQUFBLE9BQUFMLFFBQUEsR0FBTUMsSUFBSSxFQUFDQyxPQUFPO01BQ2xCLElBQUcsT0FBT0MsS0FBQSxDQUFLRyxPQUFPLEtBQUksV0FBVyxFQUFDO1FBQ2xDSCxLQUFBLENBQUtHLE9BQU8sR0FBQyxFQUFFO01BQ25CO01BQ0FDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDRCQUE0QixDQUFDO01BQUMsT0FBQUwsS0FBQTtJQUM5QztJQUFDTSxTQUFBLENBQUFULFFBQUEsRUFBQUQsVUFBQTtJQUFBLE9BQUFXLFlBQUEsQ0FBQVYsUUFBQTtFQUFBLEVBWGlCVyxTQUFTO0VBWTlCO0VBQ0RDLE1BQU0sQ0FBQ2QsT0FBTyxHQUFDQSxRQUFPO0FBQzFCO0FBQ0FjLE1BQU0sQ0FBQ0MsWUFBWSxHQUFDLFVBQVVYLE9B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\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}"); +eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Product === 'undefined') {\n var _Product = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function _Product(data, options) {\n var _this;\n _classCallCheck(this, _Product);\n _this = _callSuper(this, _Product, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Product constructor called');\n return _this;\n }\n _inherits(_Product, _DataModel);\n return _createClass(_Product);\n }(DataModel);\n ;\n window.Product = _Product;\n}\nwindow.ProductAdmin = function (options, ProductItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProduct',\n container: null,\n resultContainerSelector: '.containerProduct .containerResult',\n resultContainer: null,\n testMode: false,\n filters: {\n Product: {}\n },\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Product = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var dataTable = null;\n /*\n * Constructor\n */\n this.construct = function (options, ProductItem) {\n console.log('ProductAdmin constructor called');\n $.extend(Opts, options);\n if (!ProductItem) {\n console.log('Product letre kellet hozni ');\n if (!APP.Product) {\n APP.Product = new window.Product();\n }\n root.Product = APP.Product;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.initViewListOld = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"createdRow\": function createdRow(row, data, dataIndex) {\n $(row).attr('data-id', data.id);\n $(row).attr('title', 'ID: ' + data.id);\n $(row).attr('data-toggle', 'tooltip');\n $(row).attr('data-placement', 'right');\n },\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n $('[data-toggle=\"tooltip\"]').tooltip();\n }\n });\n debug('listview end');\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('initViewSearch inicialization 1');\n root.container.find('select.supplierSelect, select.profitCenterSelect, select.productGroupSelect, select.producerSelect, select.hooreycaNamesSelect, select.specialOfferSelect').select2();\n root.container.find('select.productSelect').select2({\n placeholder: '...',\n allowClear: true,\n ajax: {\n url: Opts.URL.getProductSearch,\n dataType: 'json',\n data: function data(params) {\n return {\n term: params.term || '',\n page: params.page || 1,\n supplierId: root.container.find('select.supplierSelect').val()\n };\n },\n cache: true\n }\n });\n root.container.find('.datePickerFrom, .datePickerTo').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText, obj) {\n debug(this);\n debug(obj.input);\n /*\n root.container.find('.selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\n */\n //root.changePriceListProfitCenterParameter(null,$(obj.input));\n }\n });\n root.container.find('.datePickerClick').click(function () {\n debug($(this).data('action'));\n root.container.find('input[name=\"' + $(this).data('action') + '\"]').datepicker('show');\n });\n var button = root.container.find('.FormSendButton');\n button.off('click');\n button.on('click', function () {\n debug('FormSendButton click');\n root.loadingResultContainer();\n root.requestProducts();\n });\n var newProductButton = root.container.find('#NewProductButton');\n newProductButton.off('click');\n newProductButton.on('click', function () {\n root.newProduct();\n });\n root.setVisibleFilters('Product');\n if (root.loadFiltersFromLocalStorage()) {\n root.loadingResultContainer();\n root.requestProducts();\n }\n debug('initViewSearch end');\n };\n this.loadingResultContainer = function () {\n debug('clearResultContainer');\n debug(root.resultContainer);\n root.hideResultContainer();\n root.container.find('.containerLoading').show();\n /*\n let template=root.container.find('template[data-name=\"loading\"]').html()\n root.resultContainer.html(template);\n */\n };\n this.hideResultContainer = function () {\n debug('hide containerResult');\n debug(root.resultContainer);\n root.resultContainer.hide();\n };\n this.showResultContainer = function () {\n root.container.find('.containerLoading').hide();\n root.resultContainer.show();\n };\n this.init = function (options, ProductItem) {\n console.log('ProductAdmin init');\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProductItem) {\n root.Product = ProductItem;\n }\n root.dataTable = null;\n root.container = $(Opts.containerCssSelector);\n root.resultContainer = $(Opts.resultContainerSelector);\n root.initViewList();\n };\n this.initViewDetails = function (options, ProductItem) {\n debug('**call initViewDetails ');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n if (root.Product.picture) {\n console.log('*****//////////////////****************');\n console.log(root.Product.picture);\n console.log(CSSSelectorForm);\n var picUrl = root.Product.picture.PublicUrl + '/' + root.Product.picture.filename;\n console.log(picUrl);\n console.log($(CSSSelectorForm + ' img.imageProduct'));\n $(CSSSelectorForm + ' img.imageProduct').attr('src', picUrl);\n }\n if (root.Product.specification) {\n console.log('*****//////////////////****************');\n console.log(root.Product.specification);\n var docUrl = root.Product.specification.PublicUrl + '/' + root.Product.specification.filename;\n root.addAttachment(root.Product.specification);\n }\n var FormSaveButton = $(CSSSelectorForm + ' button.FormSaveButton');\n FormSaveButton.off('click');\n FormSaveButton.on('click', root.clickSaveButton);\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n //root.Supplier.attachment.push(attachmentData);\n //attachmentData.rowNum=root.Supplier.attachment.length;\n attachmentData.rowNum = 1;\n var dateStr = new Date(attachmentData.updated_at);\n dateStr = dateStr.toLocaleString('hu-HU', {});\n attachmentData.date = dateStr;\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"productAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n //root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Fájl hozzáadva!\",\n message: attachmentData.original_filename + \" fájl hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.setVisibleFilters = function (type) {\n console.log('setVisibleFilters');\n console.log(Opts.filters[type]);\n console.log(root.container);\n $(root.container).find('div[class*=\"filter\"]').hide();\n for (var typeIndex in Opts.filters[type]) {\n var typeName = Opts.filters[type][typeIndex];\n debug(typeName);\n console.log($(root.container).find('.filter_' + typeName));\n $(root.container).find('.filter_' + typeName).show();\n }\n };\n this.c = function (CSSSelectorForm) {\n console.log('c called');\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find('form'));\n console.log(root.container.find(CSSSelectorForm));\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find(CSSSelectorForm));\n console.log(root.container.find('form'));\n console.log(root.container.find('form' + CSSSelectorForm)[0]);\n //return;\n var ajaxData = new FormData(root.container.find('form' + CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('suppliers[]', value);\n });\n ajaxData[\"delete\"]('supplier');\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenters[]', value);\n });\n ajaxData[\"delete\"]('profitCenter');\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroups[]', value);\n });\n ajaxData[\"delete\"]('productGroup');\n $.each(ajaxData.getAll('product'), function (key, value) {\n ajaxData.append('products[]', value);\n });\n ajaxData[\"delete\"]('product');\n $.each(ajaxData.getAll('producer'), function (key, value) {\n ajaxData.append('producers[]', value);\n });\n ajaxData[\"delete\"]('producer');\n $.each(ajaxData.getAll('hooreycaName'), function (key, value) {\n ajaxData.append('hooreycaNames[]', value);\n });\n ajaxData[\"delete\"]('hooreycaName');\n\n //ajaxData.append('_token', root.container.find('input[name=_token]').val());\n\n /*\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n let indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n */\n return ajaxData;\n };\n this.getAjaxDataJson = function () {\n var ajaxData = root.formDataToDataObjectAPICall('.ProductListForm');\n console.log('======================');\n var _iterator = _createForOfIteratorHelper(ajaxData.entries()),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var pair = _step.value;\n console.log(pair[0] + ', ' + pair[1]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var object = {};\n ajaxData.forEach(function (value, key) {\n // Reflect.has in favor of: object.hasOwnProperty(key)\n if (!Reflect.has(object, key)) {\n object[key] = value;\n return;\n }\n if (!Array.isArray(object[key])) {\n object[key] = [object[key]];\n }\n object[key].push(value);\n });\n var ajaxDataJson = JSON.stringify(object);\n return ajaxDataJson;\n };\n this.requestProducts = function () {\n var ajaxUrl = Opts.URL.getDataTableContent;\n var ajaxMethod = 'GET';\n //token formdataba!\n debug(ajaxUrl);\n ajaxDataJson = root.getAjaxDataJson();\n console.log(ajaxDataJson);\n\n // Save filters to localStorage\n var form = root.container.find('form.ProductListForm');\n if (form.length > 0) {\n var formData = new FormData(form[0]);\n var filterData = {};\n formData.forEach(function (value, key) {\n if (!Reflect.has(filterData, key)) {\n filterData[key] = value;\n return;\n }\n if (!Array.isArray(filterData[key])) {\n filterData[key] = [filterData[key]];\n }\n filterData[key].push(value);\n });\n localStorage.setItem('product_admin_filters', JSON.stringify(filterData));\n }\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n console.log(dataTableCSSSelector);\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n /*\n if(typeof options['orderDirective']!='undefined'){\n orderDirective=options['orderDirective'];\n }\n */\n\n if (!root.dataTable) {\n console.log('XXXXXXXXXXXXXXXXXXXX Nincs Datatable');\n root.dataTable = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContent,\n data: function data(d) {\n console.log('---******----');\n console.log(APP.ProductAdmin.getAjaxDataJson());\n return $.extend({}, d, {\n ajaxData: APP.ProductAdmin.getAjaxDataJson()\n });\n },\n type: ajaxMethod\n /*\n data: ajaxData,\n */\n },\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"buyerProductName\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"createdRow\": function createdRow(row, data, dataIndex) {\n $(row).attr('data-id', data.id);\n $(row).attr('title', 'ID: ' + data.id);\n $(row).attr('data-toggle', 'tooltip');\n $(row).attr('data-placement', 'right');\n },\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n root.showResultContainer();\n $('[data-toggle=\"tooltip\"]').tooltip();\n console.log('drawCallback');\n }\n });\n } else {\n console.log('XXXXXXXXXXXXXXXXXXXX van Datatable');\n //root.dataTable.ajax.reload();\n root.dataTable.draw();\n }\n };\n this.loadFiltersFromLocalStorage = function () {\n var filters = localStorage.getItem('product_admin_filters');\n if (filters) {\n var filterData = JSON.parse(filters);\n var form = root.container.find('form.ProductListForm');\n if (form.length === 0) return false;\n var _loop = function _loop() {\n var value = filterData[key];\n var fields = form.find('[name=\"' + key + '\"]');\n if (fields.length) {\n if (fields.is('select')) {\n fields.val(value).trigger('change');\n } else if (fields.is(':checkbox') || fields.is(':radio')) {\n fields.each(function () {\n if (Array.isArray(value)) {\n $(this).prop('checked', value.includes($(this).val()));\n } else {\n $(this).prop('checked', $(this).val() == value);\n }\n });\n } else {\n fields.val(value);\n }\n }\n };\n for (var key in filterData) {\n _loop();\n }\n return true;\n }\n return false;\n };\n this.processResponse = function () {};\n this.newProduct = function () {\n var selectedSuppliers = root.container.find('select.supplierSelect').val();\n if (!selectedSuppliers || selectedSuppliers.length === 0) {\n Toast.create({\n title: \"Hiányzó beszállító!\",\n message: \"Kérjük válasszon ki pontosan 1 beszállítót az új termék létrehozásához!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n return;\n }\n if (selectedSuppliers.length > 1) {\n Toast.create({\n title: \"Túl sok beszállító!\",\n message: \"Kérjük pontosan 1 beszállítót válasszon ki (jelenleg \" + selectedSuppliers.length + \" van kiválasztva)!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n return;\n }\n var supplierId = selectedSuppliers[0];\n var createUrl = Opts.URL.create + '?supplierId=' + supplierId;\n APP.loadMainContent(createUrl, root.initViewDetails);\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall('.productForm');\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Product.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Product.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n //'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n 'X-CSRF-TOKEN': Opts.token\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű termék elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n // APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList);\n }\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0IiwiX0RhdGFNb2RlbCIsIl9Qcm9kdWN0IiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJjb250YWN0IiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2R1Y3RBZG1pbiIsIlByb2R1Y3RJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJjb250YWluZXIiLCJyZXN1bHRDb250YWluZXJTZWxlY3RvciIsInJlc3VsdENvbnRhaW5lciIsInRlc3RNb2RlIiwiZmlsdGVycyIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJkZWJ1ZyIsIm5vZGUiLCJjdXJyZW50VGFyZ2V0Iiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0RldGFpbHMiLCJpbml0Vmlld0xpc3RPbGQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwidXJsIiwic2VydmVyU2lkZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY3JlYXRlZFJvdyIsImRhdGFJbmRleCIsImF0dHIiLCJkcmF3Q2FsbGJhY2siLCJzZXR0aW5ncyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsInRvb2x0aXAiLCJpbml0Vmlld0xpc3QiLCJmaW5kIiwic2VsZWN0MiIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImFqYXgiLCJnZXRQcm9kdWN0U2VhcmNoIiwiZGF0YVR5cGUiLCJwYXJhbXMiLCJ0ZXJtIiwicGFnZSIsInN1cHBsaWVySWQiLCJ2YWwiLCJjYWNoZSIsImRhdGVwaWNrZXIiLCJkYXRlRm9ybWF0Iiwib25TZWxlY3QiLCJkYXRlVGV4dCIsIm9iaiIsImlucHV0IiwiY2xpY2siLCJidXR0b24iLCJvZmYiLCJvbiIsImxvYWRpbmdSZXN1bHRDb250YWluZXIiLCJyZXF1ZXN0UHJvZHVjdHMiLCJuZXdQcm9kdWN0QnV0dG9uIiwibmV3UHJvZHVjdCIsInNldFZpc2libGVGaWx0ZXJzIiwibG9hZEZpbHRlcnNGcm9tTG9jYWxTdG9yYWdlIiwiaGlkZVJlc3VsdENvbnRhaW5lciIsImhpZGUiLCJzaG93UmVzdWx0Q29udGFpbmVyIiwiaW5pdCIsIkNTU1NlbGVjdG9yRm9ybSIsInBpY3R1cmUiLCJwaWNVcmwiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInNwZWNpZmljYXRpb24iLCJkb2NVcmwiLCJhZGRBdHRhY2htZW50IiwiRm9ybVNhdmVCdXR0b24iLCJjbGlja1NhdmVCdXR0b24iLCJhdHRhY2htZW50RGF0YSIsInJvd051bSIsImRhdGVTdHIiLCJEYXRlIiwidXBkYXRlZF9hdCIsInRvTG9jYWxlU3RyaW5nIiwiZGF0ZSIsImxpbmsiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsImFwcGVuZCIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwidGl0bGUiLCJtZXNzYWdlIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwidGltZW91dCIsInR5cGVJbmRleCIsInR5cGVOYW1lIiwiYyIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsImFqYXhEYXRhIiwiRm9ybURhdGEiLCJlYWNoIiwiZ2V0QWxsIiwia2V5IiwidmFsdWUiLCJnZXRBamF4RGF0YUpzb24iLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsImVudHJpZXMiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInBhaXIiLCJlcnIiLCJlIiwiZiIsIm9iamVjdCIsImZvckVhY2giLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImFqYXhEYXRhSnNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhamF4TWV0aG9kIiwiZm9ybSIsImZvcm1EYXRhIiwiZmlsdGVyRGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJkIiwiZHJhdyIsImdldEl0ZW0iLCJwYXJzZSIsIl9sb29wIiwiZmllbGRzIiwiaXMiLCJ0cmlnZ2VyIiwicHJvcCIsImluY2x1ZGVzIiwicHJvY2Vzc1Jlc3BvbnNlIiwic2VsZWN0ZWRTdXBwbGllcnMiLCJEQU5HRVIiLCJjcmVhdGVVcmwiLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJzdG9wUHJvcGFnYXRpb24iLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsInN1Y2Nlc3MiLCJnZXQiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2R1Y3QuanM/OWI1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgUHJvZHVjdD09PSd1bmRlZmluZWQnKXtcbiAgICBjbGFzcyBQcm9kdWN0IGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIENvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgd2luZG93LlByb2R1Y3Q9UHJvZHVjdDtcbn1cbndpbmRvdy5Qcm9kdWN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pIHtcbiAgICAvKlxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXG4gICAgICogaW4gdGhlIGNsYXNzXG4gICAgICovXG4gICAgbGV0IE9wdHMgPSB7XG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJQcm9kdWN0JyxcbiAgICAgICAgY29udGFpbmVyOm51bGwsXG4gICAgICAgIHJlc3VsdENvbnRhaW5lclNlbGVjdG9yOicuY29udGFpbmVyUHJvZHVjdCAuY29udGFpbmVyUmVzdWx0JyxcbiAgICAgICAgcmVzdWx0Q29udGFpbmVyOm51bGwsXG5cbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJzOntcbiAgICAgICAgICAgIFByb2R1Y3Q6e30sXG4gICAgICAgIH0sXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDogJycsXG4gICAgICAgICAgICBpbmRleDogJycsXG4gICAgICAgICAgICBzaG93OiAnJyxcbiAgICAgICAgICAgIGVkaXQ6ICcnLFxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcbiAgICAgICAgICAgIHVwZGF0ZTogJycsXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6ICcnLFxuICAgICAgICAgICAgZGV0YWNoRmlsZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZToge1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ10sXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IFByb2R1Y3QgPSB7fTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XG4gICAgbGV0IGRhdGFUYWJsZT1udWxsO1xuICAgIC8qXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBQcm9kdWN0SXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFQcm9kdWN0SXRlbSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgbGV0cmUga2VsbGV0IGhvem5pICcpO1xuICAgICAgICAgICAgaWYgKCFBUFAuUHJvZHVjdCkge1xuICAgICAgICAgICAgICAgIEFQUC5Qcm9kdWN0ID0gbmV3IHdpbmRvdy5Qcm9kdWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290LlByb2R1Y3QgPSBBUFAuUHJvZHVjdDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRWRpdD1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdMaXN0T2xkID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwicHJvZHVjdEdyb3VwXCJ9LFxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJzdXBwbGllck5hbWVcIn0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiY3JlYXRlZFJvd1wiOiBmdW5jdGlvbihyb3csIGRhdGEsIGRhdGFJbmRleCkge1xuICAgICAgICAgICAgICAgICQocm93KS5hdHRyKCdkYXRhLWlkJywgZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ3RpdGxlJywgJ0lEOiAnICsgZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ2RhdGEtdG9nZ2xlJywgJ3Rvb2x0aXAnKTtcbiAgICAgICAgICAgICAgICAkKHJvdykuYXR0cignZGF0YS1wbGFjZW1lbnQnLCAncmlnaHQnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3TGlzdD1mdW5jdGlvbiAob3B0aW9ucz17fSkge1xuICAgICAgICBkZWJ1ZygnaW5pdFZpZXdTZWFyY2ggaW5pY2lhbGl6YXRpb24gMScpO1xuXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5zdXBwbGllclNlbGVjdCwgc2VsZWN0LnByb2ZpdENlbnRlclNlbGVjdCwgc2VsZWN0LnByb2R1Y3RHcm91cFNlbGVjdCwgc2VsZWN0LnByb2R1Y2VyU2VsZWN0LCBzZWxlY3QuaG9vcmV5Y2FOYW1lc1NlbGVjdCwgc2VsZWN0LnNwZWNpYWxPZmZlclNlbGVjdCcpLnNlbGVjdDIoKTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnByb2R1Y3RTZWxlY3QnKS5zZWxlY3QyKHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcbiAgICAgICAgICAgIGFsbG93Q2xlYXI6IHRydWUsXG4gICAgICAgICAgICBhamF4OiB7XG4gICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXRQcm9kdWN0U2VhcmNoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtOiBwYXJhbXMudGVybSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhcmFtcy5wYWdlIHx8IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllcklkOiByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3Quc3VwcGxpZXJTZWxlY3QnKS52YWwoKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyRnJvbSwgLmRhdGVQaWNrZXJUbycpLmRhdGVwaWNrZXIoe1xuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcblxuICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCxvYmopIHtcbiAgICAgICAgICAgICAgICBkZWJ1Zyh0aGlzKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhvYmouaW5wdXQpO1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAvL3Jvb3QuY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyKG51bGwsJChvYmouaW5wdXQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuZGF0ZVBpY2tlckNsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGRlYnVnKCQodGhpcykuZGF0YSgnYWN0aW9uJykpO1xuICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1cIicrJCh0aGlzKS5kYXRhKCdhY3Rpb24nKSsnXCJdJykuZGF0ZXBpY2tlcignc2hvdycpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGJ1dHRvbj1yb290LmNvbnRhaW5lci5maW5kKCcuRm9ybVNlbmRCdXR0b24nKTtcbiAgICAgICAgYnV0dG9uLm9mZignY2xpY2snKTtcbiAgICAgICAgYnV0dG9uLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBkZWJ1ZyAoJ0Zvcm1TZW5kQnV0dG9uIGNsaWNrJyk7XG4gICAgICAgICAgICByb290LmxvYWRpbmdSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgICAgIHJvb3QucmVxdWVzdFByb2R1Y3RzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBuZXdQcm9kdWN0QnV0dG9uPXJvb3QuY29udGFpbmVyLmZpbmQoJyNOZXdQcm9kdWN0QnV0dG9uJyk7XG4gICAgICAgIG5ld1Byb2R1Y3RCdXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBuZXdQcm9kdWN0QnV0dG9uLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICByb290Lm5ld1Byb2R1Y3QoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm9vdC5zZXRWaXNpYmxlRmlsdGVycygnUHJvZHVjdCcpO1xuXG4gICAgICAgIGlmIChyb290LmxvYWRGaWx0ZXJzRnJvbUxvY2FsU3RvcmFnZSgpKSB7XG4gICAgICAgICAgICByb290LmxvYWRpbmdSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgICAgIHJvb3QucmVxdWVzdFByb2R1Y3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZygnaW5pdFZpZXdTZWFyY2ggZW5kJyk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmxvYWRpbmdSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdjbGVhclJlc3VsdENvbnRhaW5lcicpO1xuICAgICAgICBkZWJ1Zyhyb290LnJlc3VsdENvbnRhaW5lcik7XG4gICAgICAgIHJvb3QuaGlkZVJlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLnNob3coKTtcbiAgICAgICAgLypcbiAgICAgICAgbGV0IHRlbXBsYXRlPXJvb3QuY29udGFpbmVyLmZpbmQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cImxvYWRpbmdcIl0nKS5odG1sKClcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuaHRtbCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICovXG4gICAgfVxuICAgIHRoaXMuaGlkZVJlc3VsdENvbnRhaW5lcj1mdW5jdGlvbiAoKXtcbiAgICAgICAgZGVidWcoJ2hpZGUgY29udGFpbmVyUmVzdWx0Jyk7XG4gICAgICAgIGRlYnVnKHJvb3QucmVzdWx0Q29udGFpbmVyKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLnNob3dSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5jb250YWluZXJMb2FkaW5nJykuaGlkZSgpO1xuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5zaG93KCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFByb2R1Y3RJdGVtKXtcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3RBZG1pbiBpbml0Jyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZihQcm9kdWN0SXRlbSl7XG4gICAgICAgICAgICByb290LlByb2R1Y3Q9UHJvZHVjdEl0ZW1cbiAgICAgICAgfVxuICAgICAgICByb290LmRhdGFUYWJsZT1udWxsO1xuICAgICAgICByb290LmNvbnRhaW5lcj0kKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpO1xuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lcj0kKE9wdHMucmVzdWx0Q29udGFpbmVyU2VsZWN0b3IpO1xuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZHVjdEZvcm0nO1xuICAgICAgICBpZihyb290LlByb2R1Y3QucGljdHVyZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKiovLy8vLy8vLy8vLy8vLy8vLy8qKioqKioqKioqKioqKioqJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2R1Y3QucGljdHVyZSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xuICAgICAgICAgICAgbGV0IHBpY1VybD1yb290LlByb2R1Y3QucGljdHVyZS5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5waWN0dXJlLmZpbGVuYW1lO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGljVXJsKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpKTtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpLmF0dHIoJ3NyYycscGljVXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZihyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbil7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKiovLy8vLy8vLy8vLy8vLy8vLy8qKioqKioqKioqKioqKioqJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbik7XG4gICAgICAgICAgICBsZXQgZG9jVXJsPXJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLlB1YmxpY1VybCsnLycrcm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24uZmlsZW5hbWU7XG4gICAgICAgICAgICByb290LmFkZEF0dGFjaG1lbnQocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBGb3JtU2F2ZUJ1dHRvbj0kKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpO1xuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vZmYoJ2NsaWNrJyk7XG4gICAgICAgIEZvcm1TYXZlQnV0dG9uLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xuXG4gICAgfVxuXG4gICAgdGhpcy5hZGRBdHRhY2htZW50PWZ1bmN0aW9uIChhdHRhY2htZW50RGF0YSl7XG4gICAgICAgIGNvbnNvbGUubG9nKGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgLy9yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIC8vYXR0YWNobWVudERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5sZW5ndGg7XG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT0xO1xuICAgICAgICBsZXQgZGF0ZVN0cj1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS51cGRhdGVkX2F0KTtcbiAgICAgICAgZGF0ZVN0cj1kYXRlU3RyLnRvTG9jYWxlU3RyaW5nKCdodS1IVScsIHt9KTtcbiAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlU3RyO1xuICAgICAgICBhdHRhY2htZW50RGF0YS5saW5rPWF0dGFjaG1lbnREYXRhLlB1YmxpY1VybCsnLycrYXR0YWNobWVudERhdGEuZmlsZW5hbWU7XG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9kdWN0QXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgIC8vcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkbDoWpsIGhvenrDoWFkdmEhXCIsIG1lc3NhZ2U6IGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFZpc2libGVGaWx0ZXJzPWZ1bmN0aW9uICh0eXBlKXtcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFZpc2libGVGaWx0ZXJzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMuZmlsdGVyc1t0eXBlXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyKTtcbiAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnZGl2W2NsYXNzKj1cImZpbHRlclwiXScpLmhpZGUoKVxuICAgICAgICBmb3IgKGNvbnN0IHR5cGVJbmRleCBpbiBPcHRzLmZpbHRlcnNbdHlwZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lPU9wdHMuZmlsdGVyc1t0eXBlXVt0eXBlSW5kZXhdO1xuICAgICAgICAgICAgZGVidWcodHlwZU5hbWUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKSk7XG4gICAgICAgICAgICAkKHJvb3QuY29udGFpbmVyKS5maW5kKCcuZmlsdGVyXycrdHlwZU5hbWUpLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmM9ZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjIGNhbGxlZCcpO1xuICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcblxuICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nK0NTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAvL3JldHVybjtcbiAgICAgICAgbGV0IGFqYXhEYXRhID0gbmV3IEZvcm1EYXRhKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nK0NTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdzdXBwbGllcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllcnNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdzdXBwbGllcicpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZml0Q2VudGVyc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2ZpdENlbnRlcicpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjdEdyb3Vwc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3RHcm91cCcpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0JyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjdCcpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWNlcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWNlcnNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWNlcicpO1xuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdob29yZXljYU5hbWUnKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnaG9vcmV5Y2FOYW1lc1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ2hvb3JleWNhTmFtZScpO1xuXG4gICAgICAgIC8vYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhLZXkgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWpheERhdGEuZ2V0KGluZGV4S2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksIGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csIFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhO1xuXG4gICAgfVxuICAgIHRoaXMuZ2V0QWpheERhdGFKc29uPWZ1bmN0aW9uKCl7XG5cbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuUHJvZHVjdExpc3RGb3JtJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICAgIGZvciAobGV0IHBhaXIgb2YgYWpheERhdGEuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYWlyWzBdKyAnLCAnICsgcGFpclsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2JqZWN0ID0ge307XG4gICAgICAgIGFqYXhEYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFJlZmxlY3QuaGFzIGluIGZhdm9yIG9mOiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKG9iamVjdCwga2V5KSl7XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShvYmplY3Rba2V5XSkpe1xuICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gW29iamVjdFtrZXldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iamVjdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGFqYXhEYXRhSnNvbiA9IEpTT04uc3RyaW5naWZ5KG9iamVjdCk7XG4gICAgICAgIHJldHVybiBhamF4RGF0YUpzb247XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0UHJvZHVjdHM9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50O1xuICAgICAgICBsZXQgYWpheE1ldGhvZD0nR0VUJztcbiAgICAgICAgLy90b2tlbiBmb3JtZGF0YWJhIVxuICAgICAgICBkZWJ1ZyhhamF4VXJsKTtcblxuICAgICAgICBhamF4RGF0YUpzb249cm9vdC5nZXRBamF4RGF0YUpzb24oKTtcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGFKc29uKTtcblxuICAgICAgICAvLyBTYXZlIGZpbHRlcnMgdG8gbG9jYWxTdG9yYWdlXG4gICAgICAgIGxldCBmb3JtID0gcm9vdC5jb250YWluZXIuZmluZCgnZm9ybS5Qcm9kdWN0TGlzdEZvcm0nKTtcbiAgICAgICAgaWYgKGZvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm1bMF0pO1xuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSB7fTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZmlsdGVyRGF0YSwga2V5KSl7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpbHRlckRhdGFba2V5XSkpe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhW2tleV0gPSBbZmlsdGVyRGF0YVtrZXldXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyRGF0YVtrZXldLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncHJvZHVjdF9hZG1pbl9maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoZmlsdGVyRGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhVGFibGVDU1NTZWxlY3RvciApO1xuXG4gICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcbiAgICAgICAgQVBQLnNldE9wdHMoe1xuICAgICAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxuICAgICAgICB9KVxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XG4gICAgICAgIC8qXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgaWYoIXJvb3QuZGF0YVRhYmxlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdYWFhYWFhYWFhYWFhYWFhYWFhYWCBOaW5jcyBEYXRhdGFibGUnKTtcbiAgICAgICAgICAgIHJvb3QuZGF0YVRhYmxlPVxuICAgICAgICAgICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcbiAgICAgICAgICAgICAgICAgICAgXCJhamF4XCI6e1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tKioqKioqLS0tLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEFQUC5Qcm9kdWN0QWRtaW4uZ2V0QWpheERhdGFKc29uKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YTogQVBQLlByb2R1Y3RBZG1pbi5nZXRBamF4RGF0YUpzb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFqYXhNZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGFqYXhEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgfSAsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImJ1eWVyUHJvZHVjdE5hbWVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJwcm9kdWN0R3JvdXBcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkUm93XCI6IGZ1bmN0aW9uKHJvdywgZGF0YSwgZGF0YUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHJvdykuYXR0cignZGF0YS1pZCcsIGRhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ3RpdGxlJywgJ0lEOiAnICsgZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHJvdykuYXR0cignZGF0YS10b2dnbGUnLCAndG9vbHRpcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChyb3cpLmF0dHIoJ2RhdGEtcGxhY2VtZW50JywgJ3JpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93UmVzdWx0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RyYXdDYWxsYmFjaycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuXG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggdmFuIERhdGF0YWJsZScpO1xuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgcm9vdC5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMubG9hZEZpbHRlcnNGcm9tTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Byb2R1Y3RfYWRtaW5fZmlsdGVycycpO1xuICAgICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSBKU09OLnBhcnNlKGZpbHRlcnMpO1xuICAgICAgICAgICAgbGV0IGZvcm0gPSByb290LmNvbnRhaW5lci5maW5kKCdmb3JtLlByb2R1Y3RMaXN0Rm9ybScpO1xuXG4gICAgICAgICAgICBpZiAoZm9ybS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGZpbHRlckRhdGEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJEYXRhW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IGZvcm0uZmluZCgnW25hbWU9XCInICsga2V5ICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5pcygnc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkcy5pcygnOmNoZWNrYm94JykgfHwgZmllbGRzLmlzKCc6cmFkaW8nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsIHZhbHVlLmluY2x1ZGVzKCQodGhpcykudmFsKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLnZhbCgpID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlPWZ1bmN0aW9uICgpIHtcblxuICAgIH1cblxuICAgIHRoaXMubmV3UHJvZHVjdD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZFN1cHBsaWVycz1yb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3Quc3VwcGxpZXJTZWxlY3QnKS52YWwoKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFN1cHBsaWVycyB8fCBzZWxlY3RlZFN1cHBsaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkhpw6FueXrDsyBiZXN6w6FsbMOtdMOzIVwiLCBtZXNzYWdlOiBcIkvDqXJqw7xrIHbDoWxhc3N6b24ga2kgcG9udG9zYW4gMSBiZXN6w6FsbMOtdMOzdCBheiDDumogdGVybcOpayBsw6l0cmVob3rDoXPDoWhveiFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFN1cHBsaWVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJUw7psIHNvayBiZXN6w6FsbMOtdMOzIVwiLCBtZXNzYWdlOiBcIkvDqXJqw7xrIHBvbnRvc2FuIDEgYmVzesOhbGzDrXTDs3QgdsOhbGFzc3pvbiBraSAoamVsZW5sZWcgXCIgKyBzZWxlY3RlZFN1cHBsaWVycy5sZW5ndGggKyBcIiB2YW4ga2l2w6FsYXN6dHZhKSFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdXBwbGllcklkID0gc2VsZWN0ZWRTdXBwbGllcnNbMF07XG4gICAgICAgIGxldCBjcmVhdGVVcmwgPSBPcHRzLlVSTC5jcmVhdGUgKyAnP3N1cHBsaWVySWQ9JyArIHN1cHBsaWVySWQ7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoY3JlYXRlVXJsLCByb290LmluaXRWaWV3RGV0YWlscyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcblxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZHVjdEZvcm0nO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLnByb2R1Y3RGb3JtJyk7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LmlkKXtcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuUHJvZHVjdC5pZCk7XG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIC8vJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiBPcHRzLnRva2VuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU9WzAsICdkZXNjJ107XG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHRlcm3DqWsgZWxtZW50dmVcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsT0FBTyxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3RCQSxRQUFPLDBCQUFBQyxVQUFBO0lBRVQ7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsU0FBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFDLGVBQUEsT0FBQUosUUFBQTtNQUN2QkcsS0FBQSxHQUFBRSxVQUFBLE9BQUFMLFFBQUEsR0FBTUMsSUFBSSxFQUFDQyxPQUFPO01BQ2xCLElBQUcsT0FBT0MsS0FBQSxDQUFLRyxPQUFPLEtBQUksV0FBVyxFQUFDO1FBQ2xDSCxLQUFBLENBQUtHLE9BQU8sR0FBQyxFQUFFO01BQ25CO01BQ0FDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDRCQUE0QixDQUFDO01BQUMsT0FBQUwsS0FBQTtJQUM5QztJQUFDTSxTQUFBLENBQUFULFFBQUEsRUFBQUQsVUFBQTtJQUFBLE9BQUFXLFlBQUEsQ0FBQVYsUUFBQTtFQUFBLEVBWGlCVyxTQUFTO0VBWTlCO0VBQ0RDLE1BQU0sQ0FBQ2QsT0FBTyxHQUFDQSxRQUFPO0FBQzFCO0FBQ0FjLE1BQU0sQ0FBQ0MsWUFBWSxHQUFDLFVBQVVYLE9BQU8sRUFBQ1ksV0FBVyxFQUFFO0VBQy9DO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxH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QUN2QjtJQUNKLENBQUMsTUFBTTtNQUNIdE0sT0FBTyxDQUFDQyxHQUFHLENBQUMsY0FBYyxDQUFDO01BQzNCO0lBQ0o7SUFFQSxJQUFJbUosUUFBUSxHQUFDdEgsSUFBSSxDQUFDcUgsMkJBQTJCLENBQUMsY0FBYyxDQUFDO0lBQzdELElBQUlqRyxPQUFPLEdBQUMxQyxJQUFJLENBQUNRLEdBQUcsQ0FBQ00sS0FBSztJQUMxQixJQUFJMEosVUFBVSxHQUFDLE1BQU07SUFDckIsSUFBR2xKLElBQUksQ0FBQ3ZDLE9BQU8sQ0FBQzZELEVBQUUsRUFBQztNQUNmRixPQUFPLEdBQUMxQyxJQUFJLENBQUNRLEdBQUcsQ0FBQ08sTUFBTSxDQUFDNEIsT0FBTyxDQUFDLE1BQU0sRUFBQ3JCLElBQUksQ0FBQ3ZDLE9BQU8sQ0FBQzZELEVBQUUsQ0FBQztNQUN2RDtNQUNBO01BQ0FnRyxRQUFRLENBQUNkLE1BQU0sQ0FBQyxTQUFTLEVBQUMsS0FBSyxDQUFDO0lBQ3BDO0lBRUEvRixLQUFLLENBQUN5SSxVQUFVLENBQUM7SUFDakJ6SSxLQUFLLENBQUM2RyxRQUFRLENBQUM7SUFFZm5ILENBQUMsQ0FBQ21ELElBQUksQ0FBQztNQUNIckIsR0FBRyxFQUFDYixPQUFPO01BQ1h4RCxJQUFJLEVBQUMwSixRQUFRO01BQ2JqRixJQUFJLEVBQUM2RyxVQUFVO01BQ2Z1QixXQUFXLEVBQUMsS0FBSztNQUNqQkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLE9BQU8sRUFBRTtRQUNMO1FBQ0EsY0FBYyxFQUFFak0sSUFBSSxDQUFDQztNQUN6QixDQUFDO01BRURpTSxPQUFPLEVBQUMsU0FBUkEsT0FBT0EsQ0FBV2hOLElBQUksRUFBQztRQUNuQjZDLEtBQUssQ0FBQzdDLElBQUksQ0FBQztRQUNYLElBQUdBLElBQUksQ0FBQ2dOLE9BQU8sSUFBRSxJQUFJLEVBQUM7VUFDbEI7VUFDQWxNLElBQUksQ0FBQ21CLFNBQVMsQ0FBQ0MsY0FBYyxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUN6QzJHLEtBQUssQ0FBQ2xILE1BQU0sQ0FBQztZQUFFb0gsS0FBSyxFQUFFLG1CQUFtQjtZQUFFQyxPQUFPLEVBQUVVLFFBQVEsQ0FBQ3VELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBQyx1QkFBdUI7WUFBRS9ELE1BQU0sRUFBRUMsWUFBWSxDQUFDQyxPQUFPO1lBQUVDLE9BQU8sRUFBRTtVQUFLLENBQUMsQ0FBQztVQUNwSztRQUNnQjtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQztBQUVMLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}"); /***/ }, diff --git a/public/js/module.js b/public/js/module.js index 9b74fc8..3cc5173 100644 --- a/public/js/module.js +++ b/public/js/module.js @@ -25,7 +25,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \****************************************/ () { -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nwindow.OrderModulDefault = {\n actionFunction: function actionFunction() {}\n};\nvar DataModelOrder = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function DataModelOrder(data, options) {\n var _this;\n _classCallCheck(this, DataModelOrder);\n _this = _callSuper(this, DataModelOrder, [data, options]);\n if (typeof _this.productSelected === \"undefined\") {\n _this.productSelected = {};\n }\n if (typeof _this.productComment === \"undefined\") {\n _this.productComment = {};\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(DataModelOrder, _DataModel);\n return _createClass(DataModelOrder);\n}(DataModel);\n;\nwindow.DataModelOrder = DataModelOrder;\nwindow.Stepper = function () {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n complete: ['supplier'],\n available: ['supplier', 'parameter', 'productSelect', 'invoice', 'send'],\n enable: ['supplier', 'invoice'],\n load: [],\n excludeLoaded: ['invoice', 'send'],\n loaded: [],\n active: false,\n URL: {\n create: ''\n },\n UrlData: false,\n onAfterLoad: function onAfterLoad() {},\n onAfterActivate: function onAfterActivate() {},\n autoCallback: {\n 'invoice': {\n onAfterActivate: function onAfterActivate() {}\n },\n 'send': {\n onAfterActivate: function onAfterActivate() {}\n }\n },\n nowLoaded: false\n };\n var root = this;\n /*\n * Constructor\n */\n this.construct = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.init = function (options) {\n $.extend(Opts, options);\n debug(Opts);\n $('.step').each(function () {\n var stepName = $(this).data('stepname');\n if (Opts.complete.includes(stepName)) {\n root.setCompleted(stepName);\n }\n if (Opts.enable.includes(stepName)) {\n root.setEnabled(stepName);\n }\n if (Opts.load.includes(stepName)) {\n root.loadStepContent(stepName);\n }\n if (Opts.active === stepName) {\n root.setActive(stepName);\n }\n });\n root.bindClickAction();\n };\n this.bindClickAction = function () {\n var stepClickButtons = $('.stepClick');\n stepClickButtons.off('click');\n stepClickButtons.on('click', root.stepClick);\n };\n this.setCompleted = function (stepName) {\n console.log(stepName + ' completed');\n $('.step[data-stepName=\"' + stepName + '\"]').addClass('completed');\n };\n this.unsetCompleted = function (stepName) {\n console.log(stepName + ' Uncompleted');\n $('.step[data-stepName=\"' + stepName + '\"]').removeClass('completed');\n Opts.complete = arrayRemove(Opts.complete, stepName);\n };\n this.unsetEnabled = function (stepName) {\n console.log(stepName + ' Un enabled');\n $('.click' + stepName).contents().unwrap();\n Opts.enable = arrayRemove(Opts.enable, stepName);\n };\n this.setEnabled = function (stepName) {\n console.log(stepName + ' enabled');\n var stepItem = $('.step[data-stepName=\"' + stepName + '\"]');\n stepItem.html('' + stepItem.html() + '');\n root.bindClickAction();\n //$('.stepClick').click(root.stepClick);\n };\n this.addEnabled = function (stepName) {\n if (!Opts.enable.includes(stepName)) {\n Opts.enable.push(stepName);\n }\n root.setEnabled(stepName);\n };\n this.addCompleted = function (stepName) {\n if (!Opts.complete.includes(stepName)) {\n Opts.complete.push(stepName);\n }\n root.setCompleted(stepName);\n root.bindClickAction();\n };\n this.loadStepContent = function (stepName) {\n var data = {\n 'type': stepName\n };\n $.extend(data, Opts.UrlData);\n $.ajax({\n async: true,\n type: \"GET\",\n url: Opts.URL.create,\n data: data,\n cache: false,\n success: function success(result) {\n var container = $('.SC' + stepName.capitalize());\n if ($.inArray(stepName, Opts.excludeLoaded) == -1) {\n Opts.loaded.push(stepName);\n } else {\n console.log('excluded View');\n }\n container.html(result);\n if (Opts.nowLoaded) {\n Opts.nowLoaded(stepName);\n }\n Opts.onAfterLoad();\n }\n });\n };\n this.clearLoaded = function () {\n Opts.loaded = ['supplier'];\n $('.stepContainer').each(function () {\n /*\n console.log(this.classList);\n console.log(this.classList.contains('SCSupplier'));\n console.log($(this).attr('class'));\n */\n if (!this.classList.contains('SCSupplier')) {\n $(this).html('');\n }\n });\n };\n this.setActiveFinish = function (stepName) {\n var container = $('.SC' + stepName.capitalize());\n if (stepName === 'productSelect') {\n $('.containerStepper').addClass('activeSideBar');\n } else {\n $('.containerStepper').removeClass('activeSideBar');\n }\n debug('setActiveFinish show:' + stepName);\n container.show();\n Opts.nowLoaded = false;\n root.active = stepName;\n Opts.onAfterActivate();\n if (typeof Opts.autoCallback[stepName] !== 'undefined') {\n Opts.autoCallback[stepName].onAfterActivate();\n }\n };\n this.setActive = function (stepName) {\n $('.stepContainer').hide();\n if (!Opts.loaded.includes(stepName)) {\n root.loadStepContent(stepName);\n Opts.nowLoaded = this.setActiveFinish;\n } else {\n this.setActiveFinish(stepName);\n }\n };\n this.stepClick = function (event) {\n event.preventDefault();\n var stepName = $(event.currentTarget).data('stepname');\n console.log('setActive:' + stepName);\n root.setActive(stepName);\n };\n};\nwindow.OrderModule = function () {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n testMode: false,\n needStepper: true,\n CSSSelectorForm: '.orderParameterForm',\n defaultDeliveryDate: '',\n dataSyncPauseTime: 500,\n token: null,\n URL: {\n root: null,\n getDataTableContentProductList: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null,\n toggleFavorites: null\n }\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var Order = null;\n var root = this;\n var viewInicialized = [];\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.clickOrderEdit = function (data) {\n debug('clickEdit');\n debug(data);\n var ajaxUrl = Opts.URL.edit.replace('%id%', data.id);\n APP.loadMainContent(ajaxUrl);\n /* let ajaxData={};\n ajaxData._token=Opts.token;\n $.extend(ajaxData,Order);\n let ajaxUrl=Opts.URL.edit.replace('%id%',data.id);\n $.ajax({\n url: ajaxUrl,\n method:'GET',\n data:ajaxData,\n success:function (response) {\n if(response.success){\n let orderData=response.data;\n orderData.supplierId=orderData.supplier_id;\n delete(orderData.supplier_id);\n root.initOrder(orderData);\n root.initStepper();\n //root.afterOrderSetSupplierOk(data.data);\n }\n }\n });*/\n };\n this.afterOrderDeleted = function (data) {\n if (data.success == true) {\n debug('Order delete success');\n APP.loadMainContent(Opts.URL.index);\n } else {\n Toast.create({\n title: \"Error deleted !\",\n message: '',\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n }\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickOrderDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: root.afterOrderDeleted\n //error:ajaxErrorHandler\n });\n };\n this.initViewOrderSelect = function () {\n debug('called initViewOrderSelect ');\n $('.ordersSelectTable button').off('click');\n $('.ordersSelectTable button').on('click', function () {\n var action = $(this).data('action');\n var orderId = $($(this).closest('tr')[0]).data('orderid');\n debug(action);\n debug(orderId);\n if (action == 'delete') {\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a megrendelést?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: orderId\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n } else {\n root.clickOrderEdit({\n id: orderId\n });\n }\n });\n $('.buttonNew').off('click');\n $('.buttonNew').on('click', function () {\n APP.loadMainContent(Opts.URL.index, 'force=true');\n });\n };\n this.initStepper = function () {\n debug(Order.getData());\n viewInicialized = [];\n $('.statusNamePlace').text('Nincs elküldve');\n $('.statusNamePlace').addClass('statusBlink');\n root.setDeliveryDate('-');\n root.setSupplier('-');\n var unEnabled = ['parameter', 'productSelect', 'invoice', 'send'];\n $.each(unEnabled, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n debug(root.Stepper.getOpts()['available']);\n debug(Order.getData()['orderStatus']);\n var stepActive = 'supplier';\n var stepComplete = ['supplier'];\n var stepEnable = [];\n var stepOnAfterActivate = function stepOnAfterActivate() {};\n var avalaibleSteps = root.Stepper.getOpts()['available'];\n var stepUrlData = false;\n var stepAutoCallback = [];\n var _iterator = _createForOfIteratorHelper(avalaibleSteps),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _stepName = _step.value;\n stepOnAfterActivate = this['initView' + _stepName.capitalize()];\n var item = {};\n item['onAfterActivate'] = stepOnAfterActivate;\n stepAutoCallback[_stepName] = item;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n debug(stepAutoCallback);\n debug(Order.getData()['id']);\n if (Order.getData()['id'] > 0) {\n debug('hajra');\n debug(Order.getData());\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n /*\n @todo: weekly-t beallitani\n */\n }\n if (Order.getData()['supplierName']) {\n root.setSupplier(Order.getData()['supplierName']);\n }\n stepUrlData = {\n 'supplierId': Order.supplierId,\n id: Order.id\n };\n var _iterator2 = _createForOfIteratorHelper(avalaibleSteps),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var stepName = _step2.value;\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if (Order.getData()['orderStatus'] == stepName) {\n stepActive = stepName;\n // Az invoice és send lépéseknél az autoCallback hívja meg az initView*-ot,\n // ezért a globális onAfterActivate-et üresen hagyjuk – különben kétszer hívódna.\n if (stepName !== 'invoice' && stepName !== 'send') {\n stepOnAfterActivate = this['initView' + stepName.capitalize()];\n } else {\n stepOnAfterActivate = function stepOnAfterActivate() {};\n }\n break;\n }\n }\n\n /*\n //refactored for loop\n var BreakException = {};\n try {\n avalaibleSteps.forEach(function(stepName) {\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if(Order.getData()['orderStatus']==stepName){\n stepActive=stepName;\n throw BreakException;\n }\n \n });\n } catch (e) {\n if (e !== BreakException) throw e;\n }*/\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n root.Stepper.init({\n complete: stepComplete,\n enable: stepEnable,\n loaded: [],\n active: stepActive,\n URL: {\n create: Opts.URL.create\n },\n UrlData: stepUrlData,\n onAfterActivate: stepOnAfterActivate,\n autoCallback: stepAutoCallback\n /*{\n invoice: {\n onAfterActivate:root.initViewInvoice\n },\n send: {\n onAfterActivate:root.initViewSend\n },\n }*/\n });\n };\n this.initOrder = function (data) {\n Order = new DataModelOrder(data);\n };\n this.init = function (options) {\n debug('OrderModul init called');\n $.extend(Opts, window.OrderModulDefault, options);\n Order = new DataModelOrder();\n if (Opts.needStepper) {\n if (typeof this.Stepper == 'undefined') {\n this.Stepper = new Stepper();\n }\n }\n if (Opts.testMode) {\n return root.testMode();\n }\n };\n this.setSupplier = function (supplierName, supplierId) {\n if (supplierName) {\n $('.supplierNamePlace').text(supplierName);\n }\n if (supplierId) {\n Order.setData({\n supplierId: supplierId\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': supplierId\n }\n });\n }\n };\n this.setDeliveryDate = function (dateText, dateTextTo) {\n var dateTextHuman = dateText.replaceAll('-', '.') + '.';\n if (dateTextHuman.length < 5) {\n $('.deliveryDatePlace').text(dateText);\n return;\n }\n if (dateTextTo) {\n dateTextHuman += ' - ' + dateTextTo.replaceAll('-', '.') + '.';\n }\n $(Opts.CSSSelectorForm + ' .selectedDateText').text(dateTextHuman);\n $('.deliveryDatePlace').text(dateTextHuman);\n $(Opts.CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n };\n this.getData = function () {\n return Order;\n };\n this.setSupplierCompleted = function () {\n console.log('bingo');\n root.initViewParameter();\n };\n this.afterOrderSetSupplierOk = function (data) {\n Toast.create({\n title: \"Supplier selected !\",\n message: data.supplier.name,\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n root.setSupplier(data.supplier.name, data.supplier.id);\n Order.setData({\n id: data.id\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted})\n root.Stepper.setEnabled('parameter');\n root.Stepper.addCompleted('parameter');\n root.Stepper.setCompleted('parameter');\n root.Stepper.setActive('parameter');\n };\n this.initViewSupplier = function () {\n debug('call initViewSupplier');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.supplierItem').off('click');\n $('.supplierItem').on('click', function (event) {\n console.log(Order.getData());\n event.preventDefault();\n var supplierId = $(event.currentTarget).data('id');\n var supplierName = $(event.currentTarget).find('h5.card-title').text();\n if (typeof Order.supplierId == 'undefined') {\n //new order\n\n var ajaxData = {};\n ajaxData._token = Opts.token;\n ajaxData.supplierId = supplierId;\n ajaxData.storeType = 'supplierSelect';\n $.extend(ajaxData, Order);\n $.ajax({\n url: Opts.URL.store,\n method: 'POST',\n data: ajaxData,\n success: function success(data) {\n if (data.success) {\n root.afterOrderSetSupplierOk(data.data);\n }\n }\n });\n //Order.setData({supplierId:supplierId});\n } else {\n //ide kellene egy jo kis kerdes\n if (Order.supplierId != supplierId) {\n Toast.create({\n title: \"Supplier change to!\",\n message: supplierName,\n status: TOAST_STATUS.WARNING,\n timeout: 5000\n });\n root.Stepper.clearLoaded();\n Order = new DataModelOrder();\n //Order.setData({supplierId:supplierId});\n }\n }\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n //$('.supplierNamePlace').text(supplierName);\n // removed by dead control flow\n\n // removed by dead control flow\n\n //@todo:ide kell egy mentes!\n //@todo:mentes eredemenyekeppen lehet valtani\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.checkContactNameField = function () {\n var CSSSelectorForm = '.orderParameterForm';\n var node = $(CSSSelectorForm + ' input[name=contactName]');\n if (node.val().length < 2) {\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n } else {\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n };\n this.sendOrderDataToServer = function (updateType, callback, errorCallback) {\n var ajaxData = {};\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (Order.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', Order.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData._method = 'PUT';\n }\n ajaxData._token = Opts.token;\n ajaxData.updateType = updateType;\n $.extend(ajaxData, Order);\n debug(Order);\n debug(ajaxData);\n debug('ajaxUrl:' + ajaxUrl);\n ajaxData = jsonToFormData(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n success: function success(data) {\n debug('ajax returned data');\n debug(data);\n if (data.success) {\n //root.afterOrderSetSupplierOk(data.data);\n callback(data);\n }\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n ajaxErrorHandler(xhr, ajaxOptions, thrownError);\n if (typeof errorCallback != 'undefined') {\n errorCallback(xhr.responseJSON);\n }\n }\n });\n };\n this.afterOrderSetParameterOk = function (data) {\n debug('called afterOrderSetParameterOk');\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n 'id': Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setParameterCompleted})\n root.Stepper.setEnabled('productSelect');\n root.Stepper.addCompleted('productSelect');\n root.Stepper.setCompleted('productSelect');\n root.Stepper.setActive('productSelect');\n };\n this.selectCurrentWeek = function () {\n console.error('selectCurrentWeek');\n console.error($('.ui-datepicker').find('.ui-datepicker-current-day a'));\n $('.ui-datepicker').find('.ui-datepicker-current-selected-weekday a').addClass('ui-state-active');\n };\n this.weekHover = function () {\n console.error('hover Active');\n $('.ui-datepicker-calendar tr').off('mousemove');\n $('.ui-datepicker-calendar tr').off('mouseleave');\n $('.ui-datepicker-calendar tr').on('mousemove', function () {\n $(this).find('td a').addClass('ui-state-hover');\n });\n $('.ui-datepicker-calendar tr').on('mouseleave', function () {\n $(this).find('td a').removeClass('ui-state-hover');\n });\n };\n this.weekHoverSlow = function () {\n console.error('weekHoverSlow');\n if ($('.ui-datepicker-calendar tr').length < 1) {\n setTimeout(root.weekHoverSlow, 1);\n return;\n }\n root.weekHover();\n };\n this.initDatePicker = function (type) {\n console.error('asdasdadad');\n console.log('tipus' + type);\n var CSSSelectorForm = '.orderParameterForm';\n var startDate = new Date('1900-01-01');\n var endDate = new Date('1900-01-02');\n $(CSSSelectorForm + ' .datePicker').datepicker(\"destroy\");\n if (type == 'weekly') {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n showOtherMonths: true,\n selectOtherMonths: true,\n showWeek: true,\n dateFormat: 'yy-mm-dd',\n firstDay: 1,\n minDate: new Date(),\n afterShow: function afterShow(dateText, inst) {\n root.weekHover();\n root.selectCurrentWeek();\n },\n onSelect: function onSelect(dateText, inst) {\n var date = $(this).datepicker('getDate');\n startDate = new getMonday(date);\n endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7);\n root.setDeliveryDate($.datepicker.formatDate('yy-mm-dd', startDate), $.datepicker.formatDate('yy-mm-dd', endDate));\n },\n beforeShow: function beforeShow() {\n console.group('beforeShow');\n console.log(startDate);\n console.log(endDate);\n //root.weekHoverSlow();\n console.groupEnd();\n },\n beforeShowDay: function beforeShowDay(date) {\n console.group('beforeShowDay');\n console.log(date.toLocaleDateString('hu-Hu'));\n var cssClass = '';\n if (date >= startDate && date <= endDate) {\n console.error(date.toLocaleDateString('hu-Hu'));\n cssClass = 'ui-datepicker-current-selected-weekday';\n //cssClass = 'ui-state-active';\n }\n console.log(cssClass);\n console.groupEnd();\n return [true, cssClass];\n },\n onChangeMonthYear: function onChangeMonthYear(year, month, inst) {\n //root.selectCurrentWeek();\n }\n });\n } else {\n // Szállítási korlátozás adatok betöltése (csak ha hasDeliveryConstraint = true)\n var availableDates = [];\n var nextDeliveryDate = null;\n var hasDeliveryConstraint = false;\n var holidays = [];\n var workingDays = [];\n var datepickerInput = $(CSSSelectorForm + ' .datePicker');\n var calendarUrl = datepickerInput.data('delivery-calendar-url');\n var supplierId = datepickerInput.data('supplier-id');\n var profitCenterId = datepickerInput.data('profit-center-id');\n if (calendarUrl && supplierId && profitCenterId) {\n $.ajax({\n url: calendarUrl,\n data: {\n supplierId: supplierId,\n profitCenterId: profitCenterId,\n orderDateTime: new Date().toISOString()\n },\n async: false,\n success: function success(data) {\n hasDeliveryConstraint = data.hasDeliveryConstraint || false;\n // Ünnepnapok és áthelyezett munkanapok – mindig betöltjük\n holidays = (data.holidays || []).map(function (h) {\n return {\n date: h.date,\n description: h.description\n };\n });\n workingDays = (data.workingDays || []).map(function (w) {\n return {\n date: w.date,\n description: w.description\n };\n });\n if (hasDeliveryConstraint) {\n availableDates = data.availableDates || [];\n nextDeliveryDate = data.nextDeliveryDate || null;\n }\n // Ha nincs szállítási korlátozás, az availableDates és nextDeliveryDate\n // üres marad – a datepicker az eredeti módon viselkedik\n }\n });\n }\n if (hasDeliveryConstraint && nextDeliveryDate) {\n // Következő szállítási nap beállítása alapértelmezettként\n root.setDeliveryDate(nextDeliveryDate);\n $(CSSSelectorForm + ' .selectedDateText').text(nextDeliveryDate);\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(nextDeliveryDate);\n $('.deliveryDatePlace').text(nextDeliveryDate.replaceAll('-', '.') + '.');\n }\n\n // Szín jelmagyarázat megjelenítése csak szállítási korlátozás esetén\n if (hasDeliveryConstraint) {\n $('#deliveryDateLegend').show();\n }\n var datepickerOpts = {\n dateFormat: 'yy-mm-dd',\n minDate: hasDeliveryConstraint && nextDeliveryDate ? new Date(nextDeliveryDate) : new Date(),\n onSelect: function onSelect(dateText) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n }\n };\n\n // beforeShowDay: mindig aktív ha van munkanaptár adat vagy hasDeliveryConstraint\n datepickerOpts.beforeShowDay = function (date) {\n var dateStr = $.datepicker.formatDate('yy-mm-dd', date);\n var holidayEntry = holidays.find(function (h) {\n return h.date === dateStr;\n });\n var workingDayEntry = workingDays.find(function (w) {\n return w.date === dateStr;\n });\n var isDelivery = hasDeliveryConstraint && availableDates.includes(dateStr);\n var cssClasses = [];\n var tooltip = '';\n var selectable = true;\n if (holidayEntry) {\n cssClasses.push('work-calendar-holiday');\n tooltip = 'Ünnepnap' + (holidayEntry.description ? ': ' + holidayEntry.description : '');\n } else if (workingDayEntry) {\n cssClasses.push('work-calendar-working-day');\n tooltip = 'Áthelyezett munkanap' + (workingDayEntry.description ? ': ' + workingDayEntry.description : '');\n }\n if (hasDeliveryConstraint) {\n if (isDelivery) {\n cssClasses.push('delivery-day-available');\n if (!tooltip) tooltip = 'Szállítási nap';\n } else {\n cssClasses.push('delivery-day-unavailable');\n if (!tooltip) tooltip = 'Nem szállítási nap';\n selectable = false;\n }\n }\n // Ha ünnepnap és hasDeliveryConstraint nincs bekapcsolva, az ünnepnap is letiltandó\n if (holidayEntry && !hasDeliveryConstraint) {\n selectable = false;\n }\n return [selectable, cssClasses.join(' '), tooltip];\n };\n $(CSSSelectorForm + ' .datePicker').datepicker(datepickerOpts);\n }\n };\n this.callChangeOrderType = function () {\n console.log(this);\n console.log(this.value);\n root.initDatePicker(this.value);\n //enum('daily', 'weekly')\n /*let CSSSelectorForm='.orderParameterForm';\n let node=$(CSSSelectorForm+' input[name=contactName]');\n if(node.val().length<2){\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n }else{\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n */\n };\n this.initViewParameter = function () {\n debug('call initViewParameter');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n var CSSSelectorForm = '.orderParameterForm';\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' input[name=contactName]').off('blur');\n $(CSSSelectorForm + ' input[name=contactName]').off('keyup');\n $(CSSSelectorForm + ' input[name=contactName]').on('blur', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=contactName]').on('keyup', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=orderType]').off('change');\n $(CSSSelectorForm + ' input[name=orderType]').on('change', root.callChangeOrderType);\n $(CSSSelectorForm + ' .orderParameterNextButton').off('click');\n if (Order.getData()['id'] > 0) {\n if (Order.getData()['orderType'] == 'weekly') {\n root.initDatePicker(Order.getData()['orderType']);\n $(CSSSelectorForm + \" input[name=orderType][value=\" + Order.getData()['orderType'] + \"]\").prop('checked', true);\n var endDate = new Date(Order.getData()['deliveryDate']);\n endDate.setDate(endDate.getDate() + 6);\n root.setDeliveryDate(Order.getData()['deliveryDate'], $.datepicker.formatDate('yy-mm-dd', endDate));\n root.initDatePicker('weekly');\n } else {\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n }\n root.initDatePicker('daily');\n }\n if (Order.getData()['contactName']) {\n $(CSSSelectorForm + ' input[name=contactName]').val(Order.getData()['contactName']);\n }\n if (Order.getData()['note']) {\n $(CSSSelectorForm + ' textarea[name=note]').val(Order.getData()['note']);\n }\n if (Order.getData()['deliveryAddressId']) {\n console.log($(CSSSelectorForm + ' select[name=deliveryAddressId]'));\n $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(Order.getData()['deliveryAddressId']);\n }\n if (Order.getData()['customNotificationEmail']) {\n console.log($(CSSSelectorForm + ' select[name=customNotificationEmail]'));\n $(CSSSelectorForm + ' select[name=customNotificationEmail]').val(Order.getData()['customNotificationEmail']);\n }\n } else {\n root.initDatePicker('daily');\n }\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' .orderParameterCustomNotificationEmail').select2({}).show();\n $(CSSSelectorForm).submit(function (event) {\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n debug('validaton false');\n event.stopPropagation();\n return;\n } else {\n debug('validaton ok');\n //do your ajax submition here\n }\n $('.deliveryDatePlace').text($(CSSSelectorForm + ' input[name=deliveryDate]').val().replaceAll('-', '.') + '.');\n Order.setData({\n contactName: $(CSSSelectorForm + ' input[name=contactName]').val(),\n note: $(CSSSelectorForm + ' textarea[name=note]').val(),\n orderType: $(CSSSelectorForm + ' input:checked[name=orderType]').val(),\n deliveryDate: $(CSSSelectorForm + ' input[name=deliveryDate]').val(),\n deliveryAddressId: $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(),\n deliveryAddress: $(CSSSelectorForm + ' select[name=deliveryAddress]').val(),\n customNotificationEmail: $(CSSSelectorForm + ' select[name=customNotificationEmail]').val()\n });\n console.group('parameter form submit');\n console.error($(CSSSelectorForm + ' input:checked[name=orderType]').val());\n console.error($(CSSSelectorForm + ' input[name=deliveryDate]').val());\n debug(Order.getData());\n console.groupEnd();\n root.sendOrderDataToServer('parameter', root.afterOrderSetParameterOk);\n });\n };\n this.blank = function () {};\n this.setParameterCompleted = function () {\n console.log('setParameterCompleted called');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n //root.initViewProductSelect()\n };\n this.bindRowFavoritesAction = function () {\n $('.buttonItemFavorites').off('click');\n $('.buttonItemFavorites').on('click', function () {\n var productId = $(this).data('id');\n console.log(productId);\n var ajaxUrl = Opts.URL.toggleFavorites.replace('%id%', productId);\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var button = this;\n console.log(ajaxUrl);\n $.ajax({\n url: ajaxUrl,\n method: 'POST',\n data: ajaxData,\n success: function success(response) {\n if (response.success) {\n if (response.status) {\n console.log('true');\n $(button).addClass('btn-warning');\n $(button).removeClass('btn-light');\n } else {\n $(button).removeClass('btn-warning');\n $(button).addClass('btn-light');\n console.log('false');\n }\n }\n }\n });\n /*\n $(this).toggleClass('btn-warning');\n $(this).toggleClass('btn-light');\n */\n });\n };\n this.bindRowDescriptionAction = function () {\n $('textarea.orderItemComment').on('change', function () {\n var comment = $(this).val();\n var productId = $(this).data('id');\n var productComment = Order.getData('productComment');\n if (productComment !== null) {\n if (typeof productComment[productId] == 'undefined' && comment.length === 0) {\n return;\n }\n if (productComment[productId] === comment) {\n return;\n }\n }\n productComment[productId] = comment;\n if (comment.length === 0) {\n delete Order.productComment[productId];\n }\n Order.productComment = productComment;\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n });\n };\n this.productSelectDatatablesRowFormatter = function (d) {\n // `d` is the original data object for the row\n /**\n @todo: felszedni es updatelni az adott termek memojat az orderban\n */\n console.group('productSelectDatatablesRowFormatter');\n console.log(d);\n var templateData = d;\n templateData.comment = '';\n // debug(Order);\n if (Order.productComment && Order.productComment !== null) {\n debug(_typeof(Order.productComment[d.id]));\n if (typeof Order.productComment[d.id] != 'undefined' && Order.productComment[d.id].length > 0) {\n templateData.comment = Order.productComment[d.id];\n }\n }\n /** @typedef {boolean} d.favorites */\n if (d.favorites === true) {\n templateData.btnFavoritesClass = 'btn-warning';\n } else {\n templateData.btnFavoritesClass = 'btn-light';\n }\n var template = $('template[data-name=\"orderProductSelectDetails\"]').html();\n templateData.weekly = false;\n if (Order.getData().orderType === 'weekly') {\n templateData.weekly = true;\n /*\n \n templateData.weeklyDay=[\n {\"index\":1,\"name\":\"Hétfő\"},\n {\"index\":2,\"name\":\"Kedd\"},\n {\"index\":3,\"name\":\"Szerda\"},\n {\"index\":4,\"name\":\"Csütörtök\"},\n {\"index\":5,\"name\":\"Péntek\"},\n {\"index\":6,\"name\":\"Szombat\"},\n {\"index\":7,\"name\":\"Vasárnap\"},\n ];\n \n templateData.weeklyDay=[\n {\"index\":2,\"name\":\"Hétfő\" },\n {\"name\":\"Kedd\"},\n {\"name\":\"Szerda\"},\n {\"name\":\"Csütörtök\"},\n {\"name\":\"Péntek\"},\n {\"name\":\"Szombat\"},\n {\"name\":\"Vasárnap\"}\n ];\n */\n }\n var productSelected = Order.getData('productSelected');\n if (typeof productSelected[d.id] != 'undefined') {\n templateData.itemQuantity = productSelected[d.id];\n }\n console.log(['templateData', templateData]);\n var oldTags = Mustache.tags;\n Mustache.tags = [\"~!\", \"!~\"];\n if (templateData['specification'] == 'false' || templateData['specification'] == false) {\n templateData.specificationClass = 'd-none';\n }\n templateData.pictureImg = '';\n if (templateData['picture'] == 'false' || templateData['picture'] == false) {\n templateData.pictureClass = 'd-none';\n } else {\n templateData.pictureImg = '';\n }\n console.log('templateData', templateData);\n //templateData['aa_specification']=false;\n var render = Mustache.render(template, templateData);\n Mustache.tags = oldTags;\n console.groupEnd();\n return render;\n /*\n solution before template\n return ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n /!*\n ''+\n ''+\n ''+\n ''+\n *!/\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n /!*\n *!/\n '
Info:'+d.note+'
hooreyca :'+d.hooreycaId+'' +\n \n '' +\n '
Extension number:'+d.extn+'
Info:'+d.note+'
Megjegyzés:
';\n */\n };\n this.setDatatableHeaderText = function (text) {\n $('.tableHeaderText').text(text);\n };\n this.getTreePathName = function (node) {\n var res = '';\n var items = $(node).parents('li').toArray();\n items.shift();\n items.reverse();\n for (var item in items) {\n console.log($(items[item]).children('a.categoryItem'));\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n console.log(res);\n return res;\n };\n var selectedProductGroup = null;\n var dataTableSearchStr = null;\n var dataTableSearchKrel = false;\n this.searchProductByString = function (filterStr) {\n root.setDatatableHeaderText('Termékek szűrve:' + filterStr);\n dataTableSearchStr = filterStr;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSearchProduct = function () {\n debug(this);\n var filterStr = $('.sidebar-search input[name=searchValue]').val();\n debug(filterStr);\n root.searchProductByString(filterStr);\n };\n this.clickFavoritesProduct = function () {\n debug('clickFavoritesProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: kedvencek');\n dataTableSearchStr = '**favorites**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickOftenProduct = function () {\n debug('clickOftenProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: gyakran vásárolt');\n dataTableSearchStr = '**often**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialOffer = function () {\n debug('clickSpecialOffer');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: Akciós termékek');\n dataTableSearchStr = '**specialOffer**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialCart = function () {\n debug('clickSpecialCart');\n $(this).parent().parent().find(\".menuItemActive\").removeClass(\"menuItemActive\");\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: Kosár termékek');\n dataTableSearchStr = '**cart**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickLastProduct = function () {\n debug('clickLastProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: utoljára vásárolt');\n dataTableSearchStr = '**last**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickWeeklyProduct = function () {\n debug('clickWeeklyProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n dataTableSearchStr = '**weekly**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickKrelProduct = function () {\n debug('clickKrelProduct');\n //root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n //dataTableSearchStr='**weekly**';\n //$('.dataTableOrderProductSelect').DataTable().ajax.reload();\n $(this).parent().toggleClass('krelActive');\n dataTableSearchKrel = !dataTableSearchKrel;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.productSelectDataTableColumnDefs = function () {\n return [{\n \"width\": \"10px\",\n \"targets\": 0\n }, {\n \"className\": \"dt-left\",\n \"targets\": 1\n },\n // { \"width\": \"120px\", \"targets\": 1 },\n {\n \"width\": \"28px\",\n \"targets\": 2\n }, {\n \"width\": \"41px\",\n \"targets\": 3\n }, {\n \"width\": \"76px\",\n \"targets\": 4\n }, {\n \"width\": \"55px\",\n \"targets\": 5\n }, {\n \"width\": \"70px\",\n \"targets\": 6\n }, {\n \"width\": \"54px\",\n \"targets\": 7\n }, {\n \"width\": \"57px\",\n \"targets\": 8\n }, {\n \"width\": \"42px\",\n \"targets\": 9\n }, {\n \"width\": \"100px\",\n \"targets\": 10\n }, {\n \"className\": \"dt-center\",\n \"targets\": \"_all\"\n }];\n };\n this.productSelectDataTableColumn = function () {\n var columnData = [{\n \"className\": 'details-control',\n \"orderable\": false,\n \"data\": null,\n \"defaultContent\": ''\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"krel\"\n }, {\n \"data\": \"packing\"\n }, {\n \"data\": \"unitValue\"\n }, {\n \"data\": \"productUnit\"\n }, {\n \"data\": \"sellerUnit\"\n }, {\n \"data\": \"unitMultiplier\"\n }, {\n \"data\": \"amountUnit\"\n }, {\n \"data\": \"price\"\n }];\n var actionColumn = {\n \"className\": 'details-control2',\n \"orderable\": false,\n \"data\": null,\n \"width\": \"100px\",\n \"defaultContent\": ''\n };\n if (Order.getData('orderType') == 'daily') {\n actionColumn.render = function (data, type, row) {\n if (row.stock_status === 'out_of_stock') {\n return '';\n }\n return '';\n };\n }\n columnData.push(actionColumn);\n return columnData;\n };\n this.getDatatables = function (orderType) {\n console.error(orderType);\n var table = $('.dataTableOrderProductSelect').DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContentProductList,\n data: function data(_data) {\n _data.searchStr = dataTableSearchStr;\n _data.krel = dataTableSearchKrel;\n _data.groupId = selectedProductGroup;\n _data.supplierId = Order.supplierId;\n _data.deliveryDate = Order.deliveryDate;\n _data.orderId = Order.id;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": root.productSelectDataTableColumnDefs(),\n \"columns\": root.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n //$('td:contains(\"*\")').html('');\n $(\"td\").filter(function () {\n return $(this).text() === '*';\n }).html('');\n if (Order.getData().orderType == 'daily') {\n $(\"input[type='number'].inputNumberSpinner\").inputSpinner({\n template: '
' + '' +\n //'' +\n '' + '' + '
',\n buttonsWidth: \"0.5rem\",\n groupClass: \"\",\n // css class of the resulting input-group\n buttonsClass: \"btn-outline-secondary\"\n });\n }\n root.bindWeakUserHelper();\n /*\n ----------------------------------------------------------\n change order quantity\n */\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").off('change');\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").on('change', function (e) {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n root.orderItemsChange(rowData, quantity);\n });\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").each(function () {\n //debug('ez a function2')\n var quantity = $(this).val();\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n if (Order.productSelected[rowData.id]) {\n debug(rowData);\n debug($($(this).closest('tr').find('input[type=number]')[0]));\n debug(Order.productSelected[rowData.id]);\n var quantityCurrent = Order.productSelected[rowData.id];\n if (typeof quantityCurrent != 'string') {\n quantityCurrent += '';\n }\n $($(this).closest('tr').find('input[type=number]')[0]).val(quantityCurrent.replace(',', '.'));\n }\n });\n $(\".dataTableOrderProductSelect .details-control2 button\").off('click');\n $(\".dataTableOrderProductSelect .details-control2 button\").on('click', function () {\n // debug('.details-control2 button click ')\n // debug(this);\n $(this).parent().find('input[type=text]').trigger('change');\n });\n };\n this.initViewProductSelect = function () {\n var functionName = 'initViewProductSelect';\n console.log(functionName + ' called');\n if (viewInicialized.includes(functionName)) {\n return;\n }\n //debug(Object.getOwnPropertyNames(root));\n root.setDatatableHeaderText('');\n root.Stepper.setOpts({\n onAfterActivate: function onAfterActivate() {}\n });\n //@note: be kell kapcsolni az elonezetet\n root.Stepper.addCompleted('invoice');\n root.Stepper.addEnabled('invoice');\n\n // Érvénytelen szállítási dátum esetén Toast figyelmeztetés megjelenítése.\n root.checkDeliveryDateToast();\n var CSSSelectorForm = '.orderParameterForm';\n //console.log(Opts.URL.getDataTableContentProductList);change\n debug(CSSSelectorForm + ' .fa-search');\n $('.sidebar-search .fa-search').off('click');\n $('.sidebar-search .fa-search').on('click', root.clickSearchProduct);\n $('a.sidebar.favorites').off('click');\n $('a.sidebar.favorites').on('click', root.clickFavoritesProduct);\n $('a.sidebar.often').off('click');\n $('a.sidebar.often').on('click', root.clickOftenProduct);\n $('a.sidebar.last').off('click');\n $('a.sidebar.last').on('click', root.clickLastProduct);\n $('a.sidebar.weekly').off('click');\n $('a.sidebar.weekly').on('click', root.clickWeeklyProduct);\n $('a.sidebar.krel').off('click');\n $('a.sidebar.krel').on('click', root.clickKrelProduct);\n $('a.sidebar.specialOffer').off('click');\n $('a.sidebar.specialOffer').on('click', root.clickSpecialOffer);\n $('a.sidebar.cart').off('click');\n $('a.sidebar.cart').on('click', root.clickSpecialCart);\n $('.sidebar-search input[name=searchValue]').off('keypress');\n $('.sidebar-search input[name=searchValue]').on('keypress', function (event) {\n if (event.which == 13) {\n event.preventDefault();\n }\n if ($(this).val().length >= 2) {\n root.searchProductByString($(this).val() + event.key);\n }\n });\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n dataTableSearchStr = null;\n console.log(groupId);\n console.log(root.getTreePathName(this));\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\n let ajaxData={\n 'groupId':groupId,\n 'supplier_id':Order.supplierId,\n };\n //$('.dataTableOrderProductSelect').DataTable().ajax.data(ajaxData).load();\n \n */\n /*\n let ajaxUrl=Opts.URL.getDataTableContentProductList+'?groupId='+groupId+'&supplier_id='+Order.supplierId;\n $('.dataTableOrderProductSelect').DataTable().ajax.url(ajaxUrl).load();\n */\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n });\n var table = root.getDatatables(Order.getData('orderType'));\n $('.dataTableOrderProductSelect').on('init.dt', function () {\n console.log('Table initialisation complete: ' + new Date().getTime());\n }).dataTable();\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n\n //$('.dataTableOrderProductSelect').on( 'draw.dt', ).dataTable();\n\n $('.dataTableOrderProductSelect').on('xhr.dt', function () {\n debug('Table xhr complete: ' + new Date().getTime());\n }).dataTable();\n\n //$(\"input[type='number'].inputNumberSpinner\").inputSpinner();\n\n /*\n ----------------------------------------------------------\n Add event listener for opening and closing details\n */\n\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n var tr = $(this).closest('tr');\n var row = table.row(tr);\n if (row.child.isShown()) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n } else {\n // Open this row\n row.child(root.productSelectDatatablesRowFormatter(row.data())).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n });\n viewInicialized.push(functionName);\n };\n this.bindProductDetailsAction = function () {\n root.bindRowDescriptionAction();\n root.bindRowFavoritesAction();\n if (Order.getData()['orderType'] == 'weekly') {\n root.bindOrderItemWeekQuantity();\n }\n };\n this.bindWeakUserHelper = function () {\n $(\"input.inputNumberSpinner\").off(\"focus\");\n $(\"input.inputNumberSpinner\").on(\"focus\", function () {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n if (quantity === 0) {\n $(this).val('');\n }\n });\n $(\"input[type=text].inputNumberSpinner\").off(\"keypress\");\n $(\"input[type=text].inputNumberSpinner\").on(\"keypress\", function (event) {\n if (event.which == 13) {\n // console.error('enter pressed');\n var actualItem = this;\n var items = $(\"input[type=text].inputNumberSpinner\");\n items.each(function (item) {\n // console.log(this);\n if (this == actualItem) {\n // console.error(item);\n if (item + 1 <= items.length) {\n // console.error(items[item+1]);\n $(items[item + 1]).focus();\n }\n return false;\n }\n });\n }\n });\n };\n this.bindOrderItemWeekQuantity = function () {\n $(\"input.productSelectDayQuantity\").off('change');\n $(\"input.productSelectDayQuantity\").on('change', function () {\n console.log(this.name);\n console.log(this.value);\n console.log($(this).data('dayindex'));\n var rowData = null;\n var rowNode = $($(this).closest('table.orderProductSelectRowDetailsTable').closest('tr')).prev();\n rowData = $('.dataTableOrderProductSelect').DataTable().row(rowNode).data();\n console.log(rowData);\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n console.log(rowData.id);\n root.orderItemsChange(rowData, quantity, $(this).data('dayindex'));\n // root.orderItemsChange\n //orderItemsChange\n //quantity[1683][1]\n });\n };\n this.afterSyncOrderDataToServer = function (data) {\n //root.toggleEnableSend();\n //console.log('most vegzett. ennyit kiszed'+batchNum);\n for (var i = 0; i < queueAjax.length; i++) {\n console.log('shiftel');\n queueAjax.shift();\n }\n //console.log('remaining left '+queueAjax.length);\n setTimeout(function () {\n syncDoing = false;\n root.syncOrderDataToServer();\n }, Opts.dataSyncPauseTime);\n };\n var queueAjax = [];\n var syncDoing = false;\n this.syncOrderDataToServer = function () {\n //debug(queueAjax);\n if (syncDoing) {\n //debug('sync in progress....');\n return false;\n }\n if (queueAjax.length < 1) {\n return;\n }\n syncDoing = true;\n root.sendOrderDataToServer('productSelect', root.afterSyncOrderDataToServer);\n return;\n };\n this.orderItemsChange = function (ItemData, quantity, dayIndex) {\n console.log('-----------------');\n console.log(ItemData);\n console.log(quantity);\n console.log(Order.getData('productSelected'));\n console.log('-----------------');\n /*\n */\n if (isNaN(quantity)) {\n quantity = 0;\n }\n var productSelected = Order.getData('productSelected');\n console.group('orderItemsChange');\n console.log(['productSelected', productSelected]);\n console.log(['ItemData', ItemData]);\n console.log(['ItemData.id', ItemData.id]);\n console.log(['quantity', quantity]);\n console.log(['dayIndex', dayIndex]);\n console.log(productSelected[ItemData.id]);\n var productSelectedItem = productSelected[ItemData.id];\n /*\n ha 0 ertek jon es nem is volt akkor hamar kiugratjuk\n */\n if (quantity == 0) {\n console.error('quantity==0');\n if (typeof productSelectedItem == 'undefined') {\n console.error('itt lep1');\n console.groupEnd();\n return;\n }\n if (dayIndex) {\n console.log('van dayIndex');\n if (typeof productSelected[ItemData.id][dayIndex] == 'undefined') {\n console.log(['productSelectedItem', productSelectedItem]);\n console.error('itt lep2');\n console.groupEnd();\n return;\n }\n }\n }\n /*\n ha azonos az ertek kiugrunk\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] != 'undefined' && typeof productSelected[ItemData.id][dayIndex] != 'undefined') {\n if (productSelected[ItemData.id][dayIndex] == quantity) {\n console.error('azonos napi');\n console.groupEnd();\n return;\n }\n }\n } else {\n if (productSelected[ItemData.id] == quantity) {\n console.error('azonos');\n console.groupEnd();\n return;\n }\n }\n if (quantity == 0) {\n if (dayIndex) {\n delete Order.productSelected[ItemData.id][dayIndex];\n delete productSelected[ItemData.id][dayIndex];\n } else {\n delete Order.productSelected[ItemData.id];\n delete productSelected[ItemData.id];\n }\n } else {\n /*\n ha van ertek erteket adunk!\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] == 'undefined') {\n productSelected[ItemData.id] = [];\n }\n console.log('set quantity productSelected[ItemData.id][dayIndex]', quantity);\n productSelected[ItemData.id][dayIndex] = quantity;\n } else {\n productSelected[ItemData.id] = quantity;\n console.log('set quantity productSelected[ItemData.id]', quantity);\n }\n }\n console.log(['productSelected', productSelected]);\n Order.productSelected = productSelected;\n console.groupEnd();\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n /*\n debug(Order.getData('productSelected'));\n debug('*******************');\n */\n };\n this.initViewInvoice = function () {\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n if (Object.keys(Order.productSelected).length > 0) {\n root.Stepper.addCompleted('send');\n root.Stepper.addEnabled('send');\n }\n var styleStr = '';\n $('table.invoice button.printButton').off('click');\n $('table.invoice button.printButton').on('click', function () {\n window.print();\n return;\n // removed by dead control flow\n var newWin; \n // removed by dead control flow\n\n // removed by dead control flow\n var print; \n // removed by dead control flow\n\n // newWin.document.write($('table.invoice').prop('outerHTML'));\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n\n // Érvénytelen szállítási dátum esetén Toast figyelmeztetés megjelenítése.\n root.checkDeliveryDateToast();\n };\n this.resetOrder = function () {\n root.init();\n root.setDeliveryDate('-');\n root.setSupplier('-');\n };\n this.afterOrderSendOk = function (data) {\n Toast.create({\n title: \"Sent!\",\n message: 'Order Sent',\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').prop('disabled', true);\n $('.statusNamePlace').removeClass('statusBlink');\n $('.statusNamePlace').text('elküldve');\n $('.buttonOrderSending').toggleClass('d-none');\n $('.buttonOrderSendOk').toggleClass('d-none');\n $('div.invoiceContainer').html(data.retHTML);\n //root.resetOrder();\n };\n this.afterOrderSendError = function (data) {\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n APP.OrderModule.Stepper.setEnabled(value);\n APP.OrderModule.Stepper.setCompleted(value);\n });\n\n // A szállítási dátum a küldés pillanatában már érvénytelen (pl. piszkozat időközbeni változás).\n if (data && data.errorCode === 'INVALID_DELIVERY_DATE') {\n root.showInvalidDeliveryDate(data.suggestedDeliveryDate || null);\n }\n };\n\n /**\n * Ellenőrzi a szállítási dátumot és ha érvénytelen, Toast üzenetet jelenít meg.\n * Csak a productSelect és invoice nézetekből hívható – a send nézetben a toggleEnableSend végzi ezt.\n */\n this.checkDeliveryDateToast = function () {\n if (!Order.id) {\n return;\n }\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n if (data && data.success && data.why && $.inArray('deliveryDate', data.why) !== -1) {\n var suggested = data.suggestedDeliveryDate || null;\n var suggestedHuman = suggested ? suggested.replaceAll('-', '.') + '.' : null;\n var message = 'A kiválasztott szállítási dátum már nem megfelelő.';\n if (suggestedHuman) {\n message += ' Javasolt új dátum: ' + suggestedHuman;\n }\n Toast.create({\n title: \"Érvénytelen szállítási dátum\",\n message: message,\n status: TOAST_STATUS.WARNING,\n timeout: 8000\n });\n }\n }\n });\n };\n\n /**\n * Megjeleníti a send nézeten az érvénytelen szállítási dátum figyelmeztetést a javasolt új dátummal,\n * és letiltja a \"MEGRENDELÉST ELKÜLDÖM\" gombot, amíg a felhasználó nem hagyja jóvá az új dátumot.\n */\n this.showInvalidDeliveryDate = function (suggested) {\n var suggestedHuman = suggested ? suggested.replaceAll('-', '.') + '.' : '-';\n $('.suggestedDeliveryDatePlace').text(suggestedHuman);\n $('.invalidDeliveryDateWarning').data('suggested-date', suggested || '');\n $('.invalidDeliveryDateWarning').removeClass('d-none').addClass('d-flex');\n\n // Amíg a felhasználó nem hagyja jóvá az új dátumot, az elküldés gomb se ne látsszon, se ne legyen aktív.\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n\n // A javaslat meglététől függően állítjuk be a jóváhagyó gombot.\n if (suggested) {\n $('.suggestedDeliveryDateBlock').removeClass('d-none');\n $('.buttonApproveSuggestedDate').text('Jóváhagyom és módosítom a dátumot');\n } else {\n $('.suggestedDeliveryDateBlock').addClass('d-none');\n $('.buttonApproveSuggestedDate').text('Új szállítási dátum választása');\n }\n var message = 'A kiválasztott szállítási dátum már nem megfelelő.';\n if (suggested) {\n message += ' Javasolt új dátum: ' + suggestedHuman;\n }\n Toast.create({\n title: \"Érvénytelen szállítási dátum\",\n message: message,\n status: TOAST_STATUS.WARNING,\n timeout: 8000\n });\n };\n\n /**\n * A felhasználó jóváhagyja a javasolt új szállítási dátumot: visszanavigálunk a paraméter\n * (naptár) lépéshez, ahol az új dátum lesz előválasztva, így onnan újra végigvihető a folyamat.\n */\n this.approveSuggestedDeliveryDate = function () {\n var suggested = $('.invalidDeliveryDateWarning').data('suggested-date');\n if (suggested) {\n Order.setData({\n deliveryDate: suggested\n });\n root.setDeliveryDate(suggested);\n }\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n // A küldés gombot csak akkor engedjük újra, ha a felhasználó a paraméter lépésben\n // érvényes dátumot választ – ezért itt visszanavigálunk a naptárhoz.\n $('.buttonOrderSend').removeClass('d-none').prop('disabled', false);\n root.Stepper.setActive('parameter');\n };\n this.initViewSend = function () {\n console.log('initViewSend called 2');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n\n // Figyelmeztető panel alaphelyzetbe állítása és a jóváhagyás gomb bekötése.\n // A küldés gombot szándékosan NEM tesszük láthatóvá itt – a toggleEnableSend()\n // aszinkron checkReadyToSend válasza fogja a végső állapotot beállítani.\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n $('.buttonApproveSuggestedDate').off('click');\n $('.buttonApproveSuggestedDate').on('click', root.approveSuggestedDeliveryDate);\n\n // Proaktív UX-ellenőrzés: a send nézet betöltésekor jelezzük, ha a szállítási dátum\n // időközben érvénytelenné vált, és felajánljuk a következő érvényes dátumot.\n root.toggleEnableSend();\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').on('click', function () {\n console.log('Send buton clicked');\n //@todo: datasynchere and callback\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n /**\n * PM158\n */\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n /**\n */\n root.sendOrderDataToServer('send', root.afterOrderSendOk, root.afterOrderSendError);\n\n /* let ajaxData={};\n ajaxData._token=Opts.token;\n ajaxData.send=true;\n $.extend(ajaxData,Order);\n $.ajax({\n url: Opts.URL.store,\n method:'POST',\n data:ajaxData,\n success:function (data) {\n if(data.success){\n root.afterOrderSendOk(data);\n }\n }\n });*/\n });\n };\n this.testModeSend = function () {};\n this.testMode = function () {\n console.log('testMode called ');\n Order.setData({\n id: 234,\n supplierId: 7,\n productSelected: {\n 116: 3,\n 293: 2\n },\n contactName: 'Contact Name',\n note: 'Note',\n type: 'daily',\n deliveryDate: Opts.defaultDeliveryDate,\n deliveryAddress: 12\n });\n console.log(Order.getData());\n console.log('*******************');\n //root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}});\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n this.Stepper.init({\n URL: {\n create: Opts.URL.create\n },\n /*\n csupasz az elejerol\n complete:['supplier'],\n enable: ['supplier'],\n active: 'supplier',\n onAfterActivate:this.initViewSupplier,\n \n product select\n complete:['supplier','parameter','productSelect'],\n enable: ['supplier','parameter','productSelect'],\n active: 'productSelect',\n onAfterActivate:this.initViewProductSelect,\n \n fullos\n complete:['supplier','parameter','productSelect','invoice'],\n enable: ['supplier','parameter','productSelect','invoice','send'],\n active: 'productSelect',\n onAfterActivate:this.initViewProductSelect,\n \n send\n complete:['supplier','parameter','productSelect','invoice','send'],\n enable: ['supplier','parameter','productSelect','invoice','send'],\n active: 'send',\n onAfterActivate:this.initViewProductSelect,\n \n */\n complete: ['supplier', 'parameter', 'productSelect'],\n enable: ['supplier', 'parameter', 'productSelect'],\n active: 'productSelect',\n onAfterActivate: this.initViewProductSelect,\n autoCallback: {\n invoice: {\n onAfterActivate: root.initViewInvoice\n },\n send: {\n onAfterActivate: root.initViewSend\n }\n }\n });\n console.log('*******************');\n };\n this.toggleEnableSend = function () {\n console.log('toggleEnableSend called');\n // Ha még nincs mentett rendelés ID (pl. új rendelés létrehozásakor a supplier lépésnél),\n // a checkReadyToSend hívás felesleges és hibát okozna (/order/undefined/checkReadyToSend).\n if (!Order.id) {\n return;\n }\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n console.log('toggleEnableSend response:', data);\n // Alapértelmezetten elrejtjük a figyelmeztetést – csak konkrét deliveryDate hiba esetén mutatjuk.\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n if (data && data.success) {\n // A szállítási dátum időközben érvénytelenné vált – figyelmeztetés a javasolt dátummal.\n if (data.why && $.inArray('deliveryDate', data.why) !== -1) {\n root.showInvalidDeliveryDate(data.suggestedDeliveryDate || null);\n } else if (data.readyToSend) {\n $('.buttonOrderSend').removeClass('d-none').prop('disabled', false);\n } else {\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n }\n }\n },\n error: function error(xhr) {\n // AJAX hiba esetén (pl. 419, 500) – a figyelmeztetés rejtve marad, gomb letiltva.\n console.log('toggleEnableSend AJAX error:', xhr.status, xhr.responseText);\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFVLEVBQUUsS0FBSyxDQUFDO1VBQ3ZFLENBQUMsTUFBSTtZQUNEdk4sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUNrQixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUNxTSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztVQUNuRTtRQUNKO01BQ0osQ0FBQztNQUNEbkUsS0FBSyxFQUFDLFNBQU5BLEtBQUtBLENBQVdDLEdBQUcsRUFBRTtRQUNqQjtRQUNBOUssT0FBTyxDQUFDQyxHQUFHLENBQUMsOEJBQThCLEVBQUU2SyxHQUFHLENBQUN0RSxNQUFNLEVBQUVzRSxHQUFHLENBQUNpTixZQUFZLENBQUM7UUFDekV0VyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQ29CLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQ0YsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN6RWxCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDa0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDcU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7TUFDbkU7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDO0FBRUwsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9vcmRlci5qcz81NjFmIl0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5PcmRlck1vZHVsRGVmYXVsdD17XG4gICAgYWN0aW9uRnVuY3Rpb246IGZ1bmN0aW9uICgpIHt9LFxufVxuY2xhc3MgRGF0YU1vZGVsT3JkZXIgZXh0ZW5kcyBEYXRhTW9kZWx7XG5cbiAgICAvKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xuICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLnByb2R1Y3RTZWxlY3RlZCA9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdFNlbGVjdGVkPXt9O1xuICAgICAgICB9XG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLnByb2R1Y3RDb21tZW50ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgdGhpcy5wcm9kdWN0Q29tbWVudD17fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJyBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICB9O1xufTtcbndpbmRvdy5EYXRhTW9kZWxPcmRlcj1EYXRhTW9kZWxPcmRlcjtcblxud2luZG93LlN0ZXBwZXI9ZnVuY3Rpb24gKCkge1xuXG4gICAgLypcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxuICAgICAqIGluIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIGxldCBPcHRzID0ge1xuICAgICAgICBjb21wbGV0ZTogWydzdXBwbGllciddLFxuICAgICAgICBhdmFpbGFibGU6IFsnc3VwcGxpZXInLCAncGFyYW1ldGVyJywgJ3Byb2R1Y3RTZWxlY3QnLCAnaW52b2ljZScsICdzZW5kJ10sXG4gICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsICdpbnZvaWNlJ10sXG4gICAgICAgIGxvYWQ6IFtdLFxuICAgICAgICBleGNsdWRlTG9hZGVkOlsnaW52b2ljZScsJ3NlbmQnXSxcbiAgICAgICAgbG9hZGVkOiBbXSxcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICBjcmVhdGU6ICcnLFxuICAgICAgICB9LFxuICAgICAgICBVcmxEYXRhOmZhbHNlLFxuICAgICAgICBvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgb25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBhdXRvQ2FsbGJhY2s6e1xuICAgICAgICAgICAgJ2ludm9pY2UnOntcbiAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6ZnVuY3Rpb24gKCkge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3NlbmQnOntcbiAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6ZnVuY3Rpb24gKCkge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBub3dMb2FkZWQ6ZmFsc2UsXG5cbiAgICB9O1xuXG4gICAgbGV0IHJvb3Q9dGhpcztcbiAgICAvKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBPcHRzO1xuICAgIH1cbiAgICB0aGlzLnNldE9wdHM9ZnVuY3Rpb24ob3B0aW9ucyl7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgIH1cblxuXG5cbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMpe1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcblxuICAgICAgICBkZWJ1ZyhPcHRzKTtcbiAgICAgICAgJCgnLnN0ZXAnKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsZXQgc3RlcE5hbWU9JCh0aGlzKS5kYXRhKCdzdGVwbmFtZScpO1xuICAgICAgICAgICAgaWYoT3B0cy5jb21wbGV0ZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgICAgIHJvb3Quc2V0Q29tcGxldGVkKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKE9wdHMuZW5hYmxlLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXRFbmFibGVkKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKE9wdHMubG9hZC5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgICAgIHJvb3QubG9hZFN0ZXBDb250ZW50KHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoT3B0cy5hY3RpdmU9PT1zdGVwTmFtZSl7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXRBY3RpdmUoc3RlcE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5iaW5kQ2xpY2tBY3Rpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRDbGlja0FjdGlvbj1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IHN0ZXBDbGlja0J1dHRvbnM9JCgnLnN0ZXBDbGljaycpO1xuICAgICAgICBzdGVwQ2xpY2tCdXR0b25zLm9mZignY2xpY2snKTtcbiAgICAgICAgc3RlcENsaWNrQnV0dG9ucy5vbignY2xpY2snLHJvb3Quc3RlcENsaWNrKTtcblxuICAgIH1cblxuICAgIHRoaXMuc2V0Q29tcGxldGVkPWZ1bmN0aW9uIChzdGVwTmFtZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKycgY29tcGxldGVkJyk7XG4gICAgICAgICQoJy5zdGVwW2RhdGEtc3RlcE5hbWU9XCInK3N0ZXBOYW1lKydcIl0nKS5hZGRDbGFzcygnY29tcGxldGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy51bnNldENvbXBsZXRlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIFVuY29tcGxldGVkJyk7XG4gICAgICAgICQoJy5zdGVwW2RhdGEtc3RlcE5hbWU9XCInK3N0ZXBOYW1lKydcIl0nKS5yZW1vdmVDbGFzcygnY29tcGxldGVkJyk7XG4gICAgICAgIE9wdHMuY29tcGxldGU9YXJyYXlSZW1vdmUoT3B0cy5jb21wbGV0ZSxzdGVwTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy51bnNldEVuYWJsZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcbiAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUrJyBVbiBlbmFibGVkJyk7XG4gICAgICAgICQoJy5jbGljaycrc3RlcE5hbWUpLmNvbnRlbnRzKCkudW53cmFwKCk7XG4gICAgICAgIE9wdHMuZW5hYmxlPWFycmF5UmVtb3ZlKE9wdHMuZW5hYmxlLHN0ZXBOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5zZXRFbmFibGVkPWZ1bmN0aW9uIChzdGVwTmFtZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKycgZW5hYmxlZCcpO1xuICAgICAgICBsZXQgc3RlcEl0ZW09JCgnLnN0ZXBbZGF0YS1zdGVwTmFtZT1cIicrc3RlcE5hbWUrJ1wiXScpO1xuICAgICAgICBzdGVwSXRlbS5odG1sKCc8YSBjbGFzcz1cInN0ZXBDbGljayBjbGljaycrc3RlcE5hbWUrJ1wiIGRhdGEtc3RlcE5hbWU9XCInK3N0ZXBOYW1lKydcIiBocmVmPVwiI1wiPicrc3RlcEl0ZW0uaHRtbCgpKyc8L2E+Jyk7XG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XG4gICAgICAgIC8vJCgnLnN0ZXBDbGljaycpLmNsaWNrKHJvb3Quc3RlcENsaWNrKTtcblxuICAgIH1cblxuICAgIHRoaXMuYWRkRW5hYmxlZD1mdW5jdGlvbihzdGVwTmFtZSl7XG4gICAgICAgIGlmKCFPcHRzLmVuYWJsZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgT3B0cy5lbmFibGUucHVzaChzdGVwTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5zZXRFbmFibGVkKHN0ZXBOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZENvbXBsZXRlZD1mdW5jdGlvbihzdGVwTmFtZSl7XG4gICAgICAgIGlmKCFPcHRzLmNvbXBsZXRlLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XG4gICAgICAgICAgICBPcHRzLmNvbXBsZXRlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJvb3Quc2V0Q29tcGxldGVkKHN0ZXBOYW1lKTtcbiAgICAgICAgcm9vdC5iaW5kQ2xpY2tBY3Rpb24oKTtcbiAgICB9XG5cblxuICAgIHRoaXMubG9hZFN0ZXBDb250ZW50PWZ1bmN0aW9uIChzdGVwTmFtZSl7XG4gICAgICAgIGxldCBkYXRhPXsndHlwZSc6c3RlcE5hbWV9O1xuICAgICAgICAkLmV4dGVuZChkYXRhLCBPcHRzLlVybERhdGEpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgICAgICB1cmw6IE9wdHMuVVJMLmNyZWF0ZSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lcj0kKCcuU0MnK3N0ZXBOYW1lLmNhcGl0YWxpemUoKSk7XG4gICAgICAgICAgICAgICAgaWYoJC5pbkFycmF5KHN0ZXBOYW1lLE9wdHMuZXhjbHVkZUxvYWRlZCk9PS0xKXtcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5sb2FkZWQucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdleGNsdWRlZCBWaWV3Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5odG1sKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgaWYoT3B0cy5ub3dMb2FkZWQpe1xuICAgICAgICAgICAgICAgICAgICBPcHRzLm5vd0xvYWRlZChzdGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE9wdHMub25BZnRlckxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhckxvYWRlZD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIE9wdHMubG9hZGVkPVsnc3VwcGxpZXInXTtcbiAgICAgICAgJCgnLnN0ZXBDb250YWluZXInKS5lYWNoKGZ1bmN0aW9uKCl7XG4vKlxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jbGFzc0xpc3QpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ1NDU3VwcGxpZXInKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmF0dHIoJ2NsYXNzJykpO1xuKi9cbiAgICAgICAgICAgIGlmKCF0aGlzLmNsYXNzTGlzdC5jb250YWlucygnU0NTdXBwbGllcicpKXtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmh0bWwoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEFjdGl2ZUZpbmlzaD1mdW5jdGlvbihzdGVwTmFtZSl7XG4gICAgICAgIGxldCBjb250YWluZXI9JCgnLlNDJytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xuICAgICAgICBpZihzdGVwTmFtZT09PSdwcm9kdWN0U2VsZWN0Jyl7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyU3RlcHBlcicpLmFkZENsYXNzKCdhY3RpdmVTaWRlQmFyJyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclN0ZXBwZXInKS5yZW1vdmVDbGFzcygnYWN0aXZlU2lkZUJhcicpO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdzZXRBY3RpdmVGaW5pc2ggc2hvdzonK3N0ZXBOYW1lKTtcbiAgICAgICAgY29udGFpbmVyLnNob3coKTtcbiAgICAgICAgT3B0cy5ub3dMb2FkZWQ9ZmFsc2U7XG4gICAgICAgIHJvb3QuYWN0aXZlPXN0ZXBOYW1lO1xuICAgICAgICBPcHRzLm9uQWZ0ZXJBY3RpdmF0ZSgpO1xuICAgICAgICBpZih0eXBlb2YgT3B0cy5hdXRvQ2FsbGJhY2tbc3RlcE5hbWVdIT09J3VuZGVmaW5lZCcgKXtcbiAgICAgICAgICAgIE9wdHMuYXV0b0NhbGxiYWNrW3N0ZXBOYW1lXS5vbkFmdGVyQWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldEFjdGl2ZT1mdW5jdGlvbihzdGVwTmFtZSl7XG4gICAgICAgICQoJy5zdGVwQ29udGFpbmVyJykuaGlkZSgpO1xuICAgICAgICBpZighT3B0cy5sb2FkZWQuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgIHJvb3QubG9hZFN0ZXBDb250ZW50KHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIE9wdHMubm93TG9hZGVkPXRoaXMuc2V0QWN0aXZlRmluaXNoO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRmluaXNoKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RlcENsaWNrPWZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHN0ZXBOYW1lPSQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgnc3RlcG5hbWUnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3NldEFjdGl2ZTonK3N0ZXBOYW1lKTtcbiAgICAgICAgcm9vdC5zZXRBY3RpdmUoc3RlcE5hbWUpO1xuICAgIH1cbn1cblxud2luZG93Lk9yZGVyTW9kdWxlID0gZnVuY3Rpb24gKCkge1xuXG4gICAgLypcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxuICAgICAqIGluIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIGxldCBPcHRzID0ge1xuICAgICAgICB0ZXN0TW9kZTogZmFsc2UsXG4gICAgICAgIG5lZWRTdGVwcGVyOnRydWUsXG4gICAgICAgIENTU1NlbGVjdG9yRm9ybTonLm9yZGVyUGFyYW1ldGVyRm9ybScsXG4gICAgICAgIGRlZmF1bHREZWxpdmVyeURhdGU6JycsXG4gICAgICAgIGRhdGFTeW5jUGF1c2VUaW1lOjUwMCxcbiAgICAgICAgdG9rZW46bnVsbCxcbiAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICByb290Om51bGwsXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3Q6bnVsbCxcbiAgICAgICAgICAgIGNoZWNrUmVhZHlUb1NlbmQ6bnVsbCxcbiAgICAgICAgICAgIGluZGV4Om51bGwsXG4gICAgICAgICAgICBzaG93Om51bGwsXG4gICAgICAgICAgICBlZGl0Om51bGwsXG4gICAgICAgICAgICBjcmVhdGU6IG51bGwsXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcbiAgICAgICAgICAgIHVwZGF0ZTpudWxsLFxuICAgICAgICAgICAgZGVzdHJveTpudWxsLFxuICAgICAgICAgICAgdG9nZ2xlRmF2b3JpdGVzOm51bGwsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFB1YmxpY1ZhciA9IHt9O1xuICAgIGxldCBQdWJsaWNWYXIyID0geydhc2QnOiAnMjEnfTtcbiAgICBsZXQgQXBpVG9rZW4gPSBudWxsO1xuICAgIGxldCBPcmRlcj1udWxsO1xuICAgIGxldCByb290ID0gdGhpcztcbiAgICBsZXQgdmlld0luaWNpYWxpemVkPVtdO1xuXG4gICAgdGhpcy5zZXRPcHRzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5jbGlja09yZGVyRWRpdD1mdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgIGRlYnVnKCdjbGlja0VkaXQnKTtcbiAgICAgICAgZGVidWcoZGF0YSk7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScsZGF0YS5pZCk7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCk7XG4vKiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgJC5leHRlbmQoYWpheERhdGEsT3JkZXIpO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLGRhdGEuaWQpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBhamF4VXJsLFxuICAgICAgICAgICAgbWV0aG9kOidHRVQnLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcmRlckRhdGE9cmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJEYXRhLnN1cHBsaWVySWQ9b3JkZXJEYXRhLnN1cHBsaWVyX2lkO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUob3JkZXJEYXRhLnN1cHBsaWVyX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5pbml0T3JkZXIob3JkZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5pbml0U3RlcHBlcigpO1xuICAgICAgICAgICAgICAgICAgICAvL3Jvb3QuYWZ0ZXJPcmRlclNldFN1cHBsaWVyT2soZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pOyovXG5cblxuICAgIH1cbiAgICB0aGlzLmFmdGVyT3JkZXJEZWxldGVkPWZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcbiAgICAgICAgICAgIGRlYnVnKCdPcmRlciBkZWxldGUgc3VjY2VzcycpO1xuICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiRXJyb3IgZGVsZXRlZCAhXCIsIG1lc3NhZ2U6ICcnLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGRlYnVnKCdjbGlja09yZGVyRGVsZXRlQ29uZmlybWVkJyk7XG4gICAgICAgIGRlYnVnKGV2ZW50KTtcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScsZXZlbnQuZGF0YS5pZCk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6cm9vdC5hZnRlck9yZGVyRGVsZXRlZCxcbiAgICAgICAgICAgIC8vZXJyb3I6YWpheEVycm9ySGFuZGxlclxuICAgICAgICB9KTtcblxuICAgIH1cbiAgICB0aGlzLmluaXRWaWV3T3JkZXJTZWxlY3Q9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdjYWxsZWQgaW5pdFZpZXdPcmRlclNlbGVjdCAnKTtcbiAgICAgICAgJCgnLm9yZGVyc1NlbGVjdFRhYmxlIGJ1dHRvbicpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLm9yZGVyc1NlbGVjdFRhYmxlIGJ1dHRvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBsZXQgYWN0aW9uPSQodGhpcykuZGF0YSgnYWN0aW9uJyk7XG4gICAgICAgICAgICBsZXQgb3JkZXJJZD0kKCQodGhpcykuY2xvc2VzdCgndHInKVswXSkuZGF0YSgnb3JkZXJpZCcpO1xuICAgICAgICAgICAgZGVidWcoYWN0aW9uKTtcbiAgICAgICAgICAgIGRlYnVnKG9yZGVySWQpO1xuXG4gICAgICAgICAgICBpZihhY3Rpb249PSdkZWxldGUnKXtcbiAgICAgICAgICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5vbignc2hvdy5icy5tb2RhbCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZWNlc3NhcnksIHlvdSBjb3VsZCBpbml0aWF0ZSBhbiBBSkFYIHJlcXVlc3QgaGVyZSAoYW5kIHRoZW4gZG8gdGhlIHVwZGF0aW5nIGluIGEgY2FsbGJhY2spLlxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIG1vZGFsJ3MgY29udGVudC4gV2UnbGwgdXNlIGpRdWVyeSBoZXJlLCBidXQgeW91IGNvdWxkIHVzZSBhIGRhdGEgYmluZGluZyBsaWJyYXJ5IG9yIG90aGVyIG1ldGhvZHMgaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLXRpdGxlJykudGV4dCgnTWVnZXLFkXPDrXTDqXMgJyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC1ib2R5JykudGV4dCgnQml6dG9zYW4gdMO2cmxpIGEgbWVncmVuZGVsw6lzdD8nKTtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOm9yZGVySWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHJvb3QuY2xpY2tPcmRlckVkaXQoe2lkOm9yZGVySWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQoJy5idXR0b25OZXcnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25OZXcnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCwnZm9yY2U9dHJ1ZScpO1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICB0aGlzLmluaXRTdGVwcGVyPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCkpO1xuICAgICAgICB2aWV3SW5pY2lhbGl6ZWQ9W107XG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS50ZXh0KCdOaW5jcyBlbGvDvGxkdmUnKTtcbiAgICAgICAgJCgnLnN0YXR1c05hbWVQbGFjZScpLmFkZENsYXNzKCdzdGF0dXNCbGluaycpO1xuICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZSgnLScpO1xuICAgICAgICByb290LnNldFN1cHBsaWVyKCctJyk7XG5cbiAgICAgICAgbGV0IHVuRW5hYmxlZD1bJ3BhcmFtZXRlcicsICdwcm9kdWN0U2VsZWN0JywgJ2ludm9pY2UnLCAnc2VuZCddO1xuICAgICAgICAkLmVhY2godW5FbmFibGVkLGZ1bmN0aW9uIChpbmRleCx2YWx1ZSkge1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0RW5hYmxlZCh2YWx1ZSk7XG4gICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZWJ1Zyhyb290LlN0ZXBwZXIuZ2V0T3B0cygpWydhdmFpbGFibGUnXSk7XG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoKVsnb3JkZXJTdGF0dXMnXSk7XG5cbiAgICAgICAgbGV0IHN0ZXBBY3RpdmU9J3N1cHBsaWVyJztcbiAgICAgICAgbGV0IHN0ZXBDb21wbGV0ZT1bJ3N1cHBsaWVyJ107XG4gICAgICAgIGxldCBzdGVwRW5hYmxlPVtdO1xuICAgICAgICBsZXQgc3RlcE9uQWZ0ZXJBY3RpdmF0ZT1mdW5jdGlvbiAoKXt9O1xuXG4gICAgICAgIGxldCBhdmFsYWlibGVTdGVwcz1yb290LlN0ZXBwZXIuZ2V0T3B0cygpWydhdmFpbGFibGUnXTtcbiAgICAgICAgbGV0IHN0ZXBVcmxEYXRhPWZhbHNlO1xuICAgICAgICBsZXQgc3RlcEF1dG9DYWxsYmFjaz1bXTtcbiAgICAgICAgZm9yIChsZXQgc3RlcE5hbWUgb2YgYXZhbGFpYmxlU3RlcHMpIHtcbiAgICAgICAgICAgIHN0ZXBPbkFmdGVyQWN0aXZhdGU9dGhpc1snaW5pdFZpZXcnK3N0ZXBOYW1lLmNhcGl0YWxpemUoKV07XG4gICAgICAgICAgICBsZXQgaXRlbT17fTtcbiAgICAgICAgICAgIGl0ZW1bJ29uQWZ0ZXJBY3RpdmF0ZSddPXN0ZXBPbkFmdGVyQWN0aXZhdGU7XG4gICAgICAgICAgICBzdGVwQXV0b0NhbGxiYWNrW3N0ZXBOYW1lXT1pdGVtO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKHN0ZXBBdXRvQ2FsbGJhY2spO1xuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKClbJ2lkJ10pO1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2lkJ10+MCl7XG4gICAgICAgICAgICBkZWJ1ZygnaGFqcmEnKTtcbiAgICAgICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoKSk7XG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKXtcbiAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKTtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIEB0b2RvOiB3ZWVrbHktdCBiZWFsbGl0YW5pXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ3N1cHBsaWVyTmFtZSddKXtcbiAgICAgICAgICAgICAgICByb290LnNldFN1cHBsaWVyKE9yZGVyLmdldERhdGEoKVsnc3VwcGxpZXJOYW1lJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RlcFVybERhdGE9eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfTtcbiAgICAgICAgICAgIGZvciAobGV0IHN0ZXBOYW1lIG9mIGF2YWxhaWJsZVN0ZXBzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgIHN0ZXBDb21wbGV0ZS5wdXNoKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICBzdGVwRW5hYmxlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJTdGF0dXMnXT09c3RlcE5hbWUpe1xuICAgICAgICAgICAgICAgICAgICBzdGVwQWN0aXZlPXN0ZXBOYW1lO1xuICAgICAgICAgICAgICAgICAgICAvLyBBeiBpbnZvaWNlIMOpcyBzZW5kIGzDqXDDqXNla27DqWwgYXogYXV0b0NhbGxiYWNrIGjDrXZqYSBtZWcgYXogaW5pdFZpZXcqLW90LFxuICAgICAgICAgICAgICAgICAgICAvLyBlesOpcnQgYSBnbG9iw6FsaXMgb25BZnRlckFjdGl2YXRlLWV0IMO8cmVzZW4gaGFneWp1ayDigJMga8O8bMO2bmJlbiBrw6l0c3plciBow612w7NkbmEuXG4gICAgICAgICAgICAgICAgICAgIGlmKHN0ZXBOYW1lIT09J2ludm9pY2UnICYmIHN0ZXBOYW1lIT09J3NlbmQnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBPbkFmdGVyQWN0aXZhdGU9dGhpc1snaW5pdFZpZXcnK3N0ZXBOYW1lLmNhcGl0YWxpemUoKV07XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcE9uQWZ0ZXJBY3RpdmF0ZT1mdW5jdGlvbiAoKXt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuLypcbiAgICAgICAgICAgIC8vcmVmYWN0b3JlZCBmb3IgbG9vcFxuICAgICAgICAgICAgdmFyIEJyZWFrRXhjZXB0aW9uID0ge307XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF2YWxhaWJsZVN0ZXBzLmZvckVhY2goZnVuY3Rpb24oc3RlcE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBzdGVwQ29tcGxldGUucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXBFbmFibGUucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJTdGF0dXMnXT09c3RlcE5hbWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcEFjdGl2ZT1zdGVwTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEJyZWFrRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSAhPT0gQnJlYWtFeGNlcHRpb24pIHRocm93IGU7XG4gICAgICAgICAgICB9Ki9cblxuICAgICAgICB9XG5cbiAgICAgICAgcm9vdC5TdGVwcGVyLmluaXQoe1xuICAgICAgICAgICAgY29tcGxldGU6c3RlcENvbXBsZXRlLFxuICAgICAgICAgICAgZW5hYmxlOnN0ZXBFbmFibGUsXG4gICAgICAgICAgICBsb2FkZWQ6W10sXG4gICAgICAgICAgICBhY3RpdmU6IHN0ZXBBY3RpdmUsXG4gICAgICAgICAgICBVUkw6IHtcbiAgICAgICAgICAgICAgICBjcmVhdGU6IE9wdHMuVVJMLmNyZWF0ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBVcmxEYXRhOnN0ZXBVcmxEYXRhLFxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnN0ZXBPbkFmdGVyQWN0aXZhdGUsXG4gICAgICAgICAgICBhdXRvQ2FsbGJhY2s6IHN0ZXBBdXRvQ2FsbGJhY2ssXG4gICAgICAgICAgICAvKntcbiAgICAgICAgICAgICAgICBpbnZvaWNlOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3SW52b2ljZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VuZDoge1xuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld1NlbmRcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB9Ki9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0T3JkZXI9ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICBPcmRlcj1uZXcgRGF0YU1vZGVsT3JkZXIoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgZGVidWcoJ09yZGVyTW9kdWwgaW5pdCBjYWxsZWQnKTtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgd2luZG93Lk9yZGVyTW9kdWxEZWZhdWx0LCBvcHRpb25zKTtcbiAgICAgICAgT3JkZXI9bmV3IERhdGFNb2RlbE9yZGVyKCk7XG4gICAgICAgIGlmKE9wdHMubmVlZFN0ZXBwZXIpe1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLlN0ZXBwZXIgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLlN0ZXBwZXI9bmV3IFN0ZXBwZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldFN1cHBsaWVyPWZ1bmN0aW9uIChzdXBwbGllck5hbWUsc3VwcGxpZXJJZCl7XG4gICAgICAgaWYoc3VwcGxpZXJOYW1lKXtcbiAgICAgICAgICAgJCgnLnN1cHBsaWVyTmFtZVBsYWNlJykudGV4dChzdXBwbGllck5hbWUpO1xuICAgICAgIH1cbiAgICAgICBpZihzdXBwbGllcklkKXtcbiAgICAgICAgICAgT3JkZXIuc2V0RGF0YSh7c3VwcGxpZXJJZDpzdXBwbGllcklkfSk7XG4gICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpzdXBwbGllcklkfX0pO1xuICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXREZWxpdmVyeURhdGU9ZnVuY3Rpb24gKGRhdGVUZXh0LGRhdGVUZXh0VG8pe1xuICAgICAgICBsZXQgZGF0ZVRleHRIdW1hbj1kYXRlVGV4dC5yZXBsYWNlQWxsKCctJywnLicpKycuJztcbiAgICAgICAgaWYoZGF0ZVRleHRIdW1hbi5sZW5ndGg8NSl7XG4gICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZihkYXRlVGV4dFRvKXtcbiAgICAgICAgICAgIGRhdGVUZXh0SHVtYW4rPScgLSAnK2RhdGVUZXh0VG8ucmVwbGFjZUFsbCgnLScsJy4nKSsnLic7XG4gICAgICAgIH1cblxuICAgICAgICAkKE9wdHMuQ1NTU2VsZWN0b3JGb3JtKycgLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0SHVtYW4pO1xuICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0SHVtYW4pO1xuICAgICAgICAkKE9wdHMuQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG4gICAgfVxuXG5cblxuICAgIHRoaXMuZ2V0RGF0YT1mdW5jdGlvbiAoKXtcbiAgICAgICAgcmV0dXJuIE9yZGVyO1xuICAgIH1cblxuXG4gICAgdGhpcy5zZXRTdXBwbGllckNvbXBsZXRlZD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdiaW5nbycpO1xuICAgICAgICByb290LmluaXRWaWV3UGFyYW1ldGVyKClcbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyT3JkZXJTZXRTdXBwbGllck9rPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlN1cHBsaWVyIHNlbGVjdGVkICFcIiwgbWVzc2FnZTogZGF0YS5zdXBwbGllci5uYW1lICwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuSU5GTywgdGltZW91dDogNTAwMCB9KTtcbiAgICAgICAgcm9vdC5zZXRTdXBwbGllcihkYXRhLnN1cHBsaWVyLm5hbWUsZGF0YS5zdXBwbGllci5pZCk7XG4gICAgICAgIE9yZGVyLnNldERhdGEoe2lkOmRhdGEuaWR9KTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOk9yZGVyLnN1cHBsaWVySWQsaWQ6T3JkZXIuaWR9fSk7XG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOnJvb3Quc2V0U3VwcGxpZXJDb21wbGV0ZWR9KVxuICAgICAgICByb290LlN0ZXBwZXIuc2V0RW5hYmxlZCgncGFyYW1ldGVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0Q29tcGxldGVkKCdwYXJhbWV0ZXInKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEFjdGl2ZSgncGFyYW1ldGVyJyk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmluaXRWaWV3U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdjYWxsIGluaXRWaWV3U3VwcGxpZXInKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcbiAgICAgICAgJCgnLnN1cHBsaWVySXRlbScpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLnN1cHBsaWVySXRlbScpLm9uKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coT3JkZXIuZ2V0RGF0YSgpKTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCBzdXBwbGllcklkPSQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgnaWQnKTtcbiAgICAgICAgICAgIGxldCBzdXBwbGllck5hbWU9JChldmVudC5jdXJyZW50VGFyZ2V0KS5maW5kKCdoNS5jYXJkLXRpdGxlJykudGV4dCgpO1xuICAgICAgICAgICAgaWYodHlwZW9mIE9yZGVyLnN1cHBsaWVySWQ9PSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAvL25ldyBvcmRlclxuXG4gICAgICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICAgICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnN1cHBsaWVySWQ9c3VwcGxpZXJJZDtcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5zdG9yZVR5cGU9J3N1cHBsaWVyU2VsZWN0JztcbiAgICAgICAgICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5zdG9yZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvL09yZGVyLnNldERhdGEoe3N1cHBsaWVySWQ6c3VwcGxpZXJJZH0pO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgLy9pZGUga2VsbGVuZSBlZ3kgam8ga2lzIGtlcmRlc1xuICAgICAgICAgICAgICAgIGlmKE9yZGVyLnN1cHBsaWVySWQhPXN1cHBsaWVySWQpe1xuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTdXBwbGllciBjaGFuZ2UgdG8hXCIsIG1lc3NhZ2U6IHN1cHBsaWVyTmFtZSwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuV0FSTklORywgdGltZW91dDogNTAwMCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmNsZWFyTG9hZGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIE9yZGVyPW5ldyBEYXRhTW9kZWxPcmRlcigpO1xuICAgICAgICAgICAgICAgICAgICAvL09yZGVyLnNldERhdGEoe3N1cHBsaWVySWQ6c3VwcGxpZXJJZH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LlN0ZXBwZXIuZ2V0T3B0cygpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLScpO1xuXG4gICAgICAgICAgICAvLyQoJy5zdXBwbGllck5hbWVQbGFjZScpLnRleHQoc3VwcGxpZXJOYW1lKTtcbiAgICAgICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoc3VwcGxpZXJOYW1lLHN1cHBsaWVySWQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coc3VwcGxpZXJOYW1lKVxuICAgICAgICAgICAgLy9AdG9kbzppZGUga2VsbCBlZ3kgbWVudGVzIVxuICAgICAgICAgICAgLy9AdG9kbzptZW50ZXMgZXJlZGVtZW55ZWtlcHBlbiBsZWhldCB2YWx0YW5pXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOnJvb3Quc2V0U3VwcGxpZXJDb21wbGV0ZWR9KVxuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3BhcmFtZXRlcicpO1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0Q29tcGxldGVkKCdwYXJhbWV0ZXInKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3BhcmFtZXRlcicpO1xuXG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja0NvbnRhY3ROYW1lRmllbGQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPScub3JkZXJQYXJhbWV0ZXJGb3JtJztcbiAgICAgICAgbGV0IG5vZGU9JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpO1xuICAgICAgICBpZihub2RlLnZhbCgpLmxlbmd0aDwyKXtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLXZhbGlkJyk7XG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIHRoaXMuc2VuZE9yZGVyRGF0YVRvU2VydmVyPWZ1bmN0aW9uICh1cGRhdGVUeXBlLGNhbGxiYWNrLGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGFqYXhEYXRhPSB7fTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xuICAgICAgICBpZihPcmRlci5pZCl7XG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxPcmRlci5pZCk7XG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICAgICBhamF4RGF0YS5fbWV0aG9kPSdQVVQnO1xuICAgICAgICB9XG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xuICAgICAgICBhamF4RGF0YS51cGRhdGVUeXBlPXVwZGF0ZVR5cGU7XG4gICAgICAgICQuZXh0ZW5kKGFqYXhEYXRhLE9yZGVyKTtcbiAgICAgICAgZGVidWcoT3JkZXIpO1xuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XG4gICAgICAgIGRlYnVnKCdhamF4VXJsOicrYWpheFVybCk7XG4gICAgICAgIGFqYXhEYXRhPWpzb25Ub0Zvcm1EYXRhKGFqYXhEYXRhKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKCdhamF4IHJldHVybmVkIGRhdGEnKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICAvL3Jvb3QuYWZ0ZXJPcmRlclNldFN1cHBsaWVyT2soZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyLCBhamF4T3B0aW9ucywgdGhyb3duRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JIYW5kbGVyKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKTtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgZXJyb3JDYWxsYmFjayE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKHhoci5yZXNwb25zZUpTT04pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5hZnRlck9yZGVyU2V0UGFyYW1ldGVyT2s9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZGVidWcoJ2NhbGxlZCBhZnRlck9yZGVyU2V0UGFyYW1ldGVyT2snKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOk9yZGVyLnN1cHBsaWVySWQsJ2lkJzpPcmRlci5pZH19KTtcbiAgICAgICAgLy9yb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6cm9vdC5zZXRQYXJhbWV0ZXJDb21wbGV0ZWR9KVxuICAgICAgICByb290LlN0ZXBwZXIuc2V0RW5hYmxlZCgncHJvZHVjdFNlbGVjdCcpO1xuICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdwcm9kdWN0U2VsZWN0Jyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRDb21wbGV0ZWQoJ3Byb2R1Y3RTZWxlY3QnKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEFjdGl2ZSgncHJvZHVjdFNlbGVjdCcpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdEN1cnJlbnRXZWVrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NlbGVjdEN1cnJlbnRXZWVrJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJCgnLnVpLWRhdGVwaWNrZXInKS5maW5kKCcudWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSBhJykpO1xuICAgICAgICAkKCcudWktZGF0ZXBpY2tlcicpLmZpbmQoJy51aS1kYXRlcGlja2VyLWN1cnJlbnQtc2VsZWN0ZWQtd2Vla2RheSBhJykuYWRkQ2xhc3MoJ3VpLXN0YXRlLWFjdGl2ZScpXG4gICAgfVxuICAgIHRoaXMud2Vla0hvdmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvdmVyIEFjdGl2ZScpO1xuICAgICAgICAkKCcudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0cicpLm9mZignbW91c2Vtb3ZlJyk7XG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub2ZmKCdtb3VzZWxlYXZlJyk7XG5cbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7ICQodGhpcykuZmluZCgndGQgYScpLmFkZENsYXNzKCd1aS1zdGF0ZS1ob3ZlcicpOyB9KTtcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vbignbW91c2VsZWF2ZScsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmZpbmQoJ3RkIGEnKS5yZW1vdmVDbGFzcygndWktc3RhdGUtaG92ZXInKTsgfSk7XG5cbiAgICB9XG4gICAgdGhpcy53ZWVrSG92ZXJTbG93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3dlZWtIb3ZlclNsb3cnKTtcbiAgICAgICAgaWYoJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5sZW5ndGg8MSl7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJvb3Qud2Vla0hvdmVyU2xvdywgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcm9vdC53ZWVrSG92ZXIoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RGF0ZVBpY2tlcj1mdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdhc2Rhc2RhZGFkJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aXB1cycgKyB0eXBlKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybSA9ICcub3JkZXJQYXJhbWV0ZXJGb3JtJztcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZT1uZXcgRGF0ZSgnMTkwMC0wMS0wMScpO1xuICAgICAgICBsZXQgZW5kRGF0ZT1uZXcgRGF0ZSgnMTkwMC0wMS0wMicpO1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoXCJkZXN0cm95XCIpO1xuXG4gICAgICAgIGlmICh0eXBlID09ICd3ZWVrbHknKSB7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcbiAgICAgICAgICAgICAgICBzaG93T3RoZXJNb250aHM6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0T3RoZXJNb250aHM6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hvd1dlZWs6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcbiAgICAgICAgICAgICAgICBmaXJzdERheTogMSxcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGFmdGVyU2hvdzogZnVuY3Rpb24gKGRhdGVUZXh0LCBpbnN0KSB7XG4gICAgICAgICAgICAgICAgICByb290LndlZWtIb3ZlcigpO1xuICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RDdXJyZW50V2VlaygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZSA9ICQodGhpcykuZGF0ZXBpY2tlcignZ2V0RGF0ZScpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBuZXcgZ2V0TW9uZGF5KGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSArIDcpO1xuICAgICAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZSgkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSggJ3l5LW1tLWRkJyxzdGFydERhdGUpLCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCAneXktbW0tZGQnLGVuZERhdGUpKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmVmb3JlU2hvdzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdiZWZvcmVTaG93JylcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RhcnREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZW5kRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vcm9vdC53ZWVrSG92ZXJTbG93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJlZm9yZVNob3dEYXk6IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cCgnYmVmb3JlU2hvd0RheScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnaHUtSHUnKSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjc3NDbGFzcyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRlID49IHN0YXJ0RGF0ZSAmJiBkYXRlIDw9IGVuZERhdGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnaHUtSHUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcyA9ICd1aS1kYXRlcGlja2VyLWN1cnJlbnQtc2VsZWN0ZWQtd2Vla2RheSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2Nzc0NsYXNzID0gJ3VpLXN0YXRlLWFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3NzQ2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBjc3NDbGFzc107XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LnNlbGVjdEN1cnJlbnRXZWVrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFN6w6FsbMOtdMOhc2kga29ybMOhdG96w6FzIGFkYXRvayBiZXTDtmx0w6lzZSAoY3NhayBoYSBoYXNEZWxpdmVyeUNvbnN0cmFpbnQgPSB0cnVlKVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZURhdGVzID0gW107XG4gICAgICAgICAgICBsZXQgbmV4dERlbGl2ZXJ5RGF0ZSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgaGFzRGVsaXZlcnlDb25zdHJhaW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgaG9saWRheXMgPSBbXTtcbiAgICAgICAgICAgIGxldCB3b3JraW5nRGF5cyA9IFtdO1xuICAgICAgICAgICAgbGV0IGRhdGVwaWNrZXJJbnB1dCA9ICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpO1xuICAgICAgICAgICAgbGV0IGNhbGVuZGFyVXJsID0gZGF0ZXBpY2tlcklucHV0LmRhdGEoJ2RlbGl2ZXJ5LWNhbGVuZGFyLXVybCcpO1xuICAgICAgICAgICAgbGV0IHN1cHBsaWVySWQgPSBkYXRlcGlja2VySW5wdXQuZGF0YSgnc3VwcGxpZXItaWQnKTtcbiAgICAgICAgICAgIGxldCBwcm9maXRDZW50ZXJJZCA9IGRhdGVwaWNrZXJJbnB1dC5kYXRhKCdwcm9maXQtY2VudGVyLWlkJyk7XG5cbiAgICAgICAgICAgIGlmIChjYWxlbmRhclVybCAmJiBzdXBwbGllcklkICYmIHByb2ZpdENlbnRlcklkKSB7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBjYWxlbmRhclVybCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwcGxpZXJJZDogc3VwcGxpZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpdENlbnRlcklkOiBwcm9maXRDZW50ZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyRGF0ZVRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGVsaXZlcnlDb25zdHJhaW50ID0gZGF0YS5oYXNEZWxpdmVyeUNvbnN0cmFpbnQgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDDnG5uZXBuYXBvayDDqXMgw6F0aGVseWV6ZXR0IG11bmthbmFwb2sg4oCTIG1pbmRpZyBiZXTDtmx0asO8a1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9saWRheXMgPSAoZGF0YS5ob2xpZGF5cyB8fCBbXSkubWFwKGZ1bmN0aW9uKGgpIHsgcmV0dXJuIHsgZGF0ZTogaC5kYXRlLCBkZXNjcmlwdGlvbjogaC5kZXNjcmlwdGlvbiB9OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmdEYXlzID0gKGRhdGEud29ya2luZ0RheXMgfHwgW10pLm1hcChmdW5jdGlvbih3KSB7IHJldHVybiB7IGRhdGU6IHcuZGF0ZSwgZGVzY3JpcHRpb246IHcuZGVzY3JpcHRpb24gfTsgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEZWxpdmVyeUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVEYXRlcyA9IGRhdGEuYXZhaWxhYmxlRGF0ZXMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dERlbGl2ZXJ5RGF0ZSA9IGRhdGEubmV4dERlbGl2ZXJ5RGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGEgbmluY3Mgc3rDoWxsw610w6FzaSBrb3Jsw6F0b3rDoXMsIGF6IGF2YWlsYWJsZURhdGVzIMOpcyBuZXh0RGVsaXZlcnlEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDDvHJlcyBtYXJhZCDigJMgYSBkYXRlcGlja2VyIGF6IGVyZWRldGkgbcOzZG9uIHZpc2Vsa2VkaWtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0RlbGl2ZXJ5Q29uc3RyYWludCAmJiBuZXh0RGVsaXZlcnlEYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gS8O2dmV0a2V6xZEgc3rDoWxsw610w6FzaSBuYXAgYmXDoWxsw610w6FzYSBhbGFww6lydGVsbWV6ZXR0a8OpbnRcbiAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShuZXh0RGVsaXZlcnlEYXRlKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KG5leHREZWxpdmVyeURhdGUpO1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtuYW1lPVwiZGVsaXZlcnlEYXRlXCJdJykudmFsKG5leHREZWxpdmVyeURhdGUpO1xuICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQobmV4dERlbGl2ZXJ5RGF0ZS5yZXBsYWNlQWxsKCctJywgJy4nKSArICcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN6w61uIGplbG1hZ3lhcsOhemF0IG1lZ2plbGVuw610w6lzZSBjc2FrIHN6w6FsbMOtdMOhc2kga29ybMOhdG96w6FzIGVzZXTDqW5cbiAgICAgICAgICAgIGlmIChoYXNEZWxpdmVyeUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgICAgICAkKCcjZGVsaXZlcnlEYXRlTGVnZW5kJykuc2hvdygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZGF0ZXBpY2tlck9wdHMgPSB7XG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiAoaGFzRGVsaXZlcnlDb25zdHJhaW50ICYmIG5leHREZWxpdmVyeURhdGUpID8gbmV3IERhdGUobmV4dERlbGl2ZXJ5RGF0ZSkgOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5zZWxlY3RlZERhdGVUZXh0JykudGV4dChkYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xuICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGJlZm9yZVNob3dEYXk6IG1pbmRpZyBha3TDrXYgaGEgdmFuIG11bmthbmFwdMOhciBhZGF0IHZhZ3kgaGFzRGVsaXZlcnlDb25zdHJhaW50XG4gICAgICAgICAgICBkYXRlcGlja2VyT3B0cy5iZWZvcmVTaG93RGF5ID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZVN0ciA9ICQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCd5eS1tbS1kZCcsIGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGhvbGlkYXlFbnRyeSA9IGhvbGlkYXlzLmZpbmQoZnVuY3Rpb24oaCkgeyByZXR1cm4gaC5kYXRlID09PSBkYXRlU3RyOyB9KTtcbiAgICAgICAgICAgICAgICBsZXQgd29ya2luZ0RheUVudHJ5ID0gd29ya2luZ0RheXMuZmluZChmdW5jdGlvbih3KSB7IHJldHVybiB3LmRhdGUgPT09IGRhdGVTdHI7IH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzRGVsaXZlcnkgPSBoYXNEZWxpdmVyeUNvbnN0cmFpbnQgJiYgYXZhaWxhYmxlRGF0ZXMuaW5jbHVkZXMoZGF0ZVN0cik7XG5cbiAgICAgICAgICAgICAgICBsZXQgY3NzQ2xhc3NlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCB0b29sdGlwID0gJyc7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhvbGlkYXlFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzLnB1c2goJ3dvcmstY2FsZW5kYXItaG9saWRheScpO1xuICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gJ8Ocbm5lcG5hcCcgKyAoaG9saWRheUVudHJ5LmRlc2NyaXB0aW9uID8gJzogJyArIGhvbGlkYXlFbnRyeS5kZXNjcmlwdGlvbiA6ICcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtpbmdEYXlFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzLnB1c2goJ3dvcmstY2FsZW5kYXItd29ya2luZy1kYXknKTtcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9ICfDgXRoZWx5ZXpldHQgbXVua2FuYXAnICsgKHdvcmtpbmdEYXlFbnRyeS5kZXNjcmlwdGlvbiA/ICc6ICcgKyB3b3JraW5nRGF5RW50cnkuZGVzY3JpcHRpb24gOiAnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0RlbGl2ZXJ5Q29uc3RyYWludCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxpdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKCdkZWxpdmVyeS1kYXktYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvb2x0aXApIHRvb2x0aXAgPSAnU3rDoWxsw610w6FzaSBuYXAnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKCdkZWxpdmVyeS1kYXktdW5hdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9vbHRpcCkgdG9vbHRpcCA9ICdOZW0gc3rDoWxsw610w6FzaSBuYXAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhhIMO8bm5lcG5hcCDDqXMgaGFzRGVsaXZlcnlDb25zdHJhaW50IG5pbmNzIGJla2FwY3NvbHZhLCBheiDDvG5uZXBuYXAgaXMgbGV0aWx0YW5kw7NcbiAgICAgICAgICAgICAgICBpZiAoaG9saWRheUVudHJ5ICYmICFoYXNEZWxpdmVyeUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbc2VsZWN0YWJsZSwgY3NzQ2xhc3Nlcy5qb2luKCcgJyksIHRvb2x0aXBdO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcihkYXRlcGlja2VyT3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYWxsQ2hhbmdlT3JkZXJUeXBlPWZ1bmN0aW9uKCl7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZhbHVlKTtcbiAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgLy9lbnVtKCdkYWlseScsICd3ZWVrbHknKVxuICAgICAgICAvKmxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xuICAgICAgICBsZXQgbm9kZT0kKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJyk7XG4gICAgICAgIGlmKG5vZGUudmFsKCkubGVuZ3RoPDIpe1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVDbGFzcygnaXMtdmFsaWQnKTtcbiAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy12YWxpZCcpO1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3UGFyYW1ldGVyPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NhbGwgaW5pdFZpZXdQYXJhbWV0ZXInKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nLm9yZGVyUGFyYW1ldGVyRm9ybSc7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRhdGVQaWNrZXJDbGljaycpLmNsaWNrKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcignc2hvdycpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckRlbGl2ZXJ5QWRkcmVzcycpLnNlbGVjdDIoe30pLnNob3coKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9mZignYmx1cicpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykub2ZmKCdrZXl1cCcpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykub24oJ2JsdXInLHJvb3QuY2hlY2tDb250YWN0TmFtZUZpZWxkKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9uKCdrZXl1cCcscm9vdC5jaGVja0NvbnRhY3ROYW1lRmllbGQpO1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1vcmRlclR5cGVdJykub2ZmKCdjaGFuZ2UnKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPW9yZGVyVHlwZV0nKS5vbignY2hhbmdlJyxyb290LmNhbGxDaGFuZ2VPcmRlclR5cGUpO1xuXG5cbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAub3JkZXJQYXJhbWV0ZXJOZXh0QnV0dG9uJykub2ZmKCdjbGljaycpO1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2lkJ10+MCl7XG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddPT0nd2Vla2x5Jyl7XG4gICAgICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcihPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybStcIiBpbnB1dFtuYW1lPW9yZGVyVHlwZV1bdmFsdWU9XCIgKyBPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddICsgXCJdXCIpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKTtcbiAgICAgICAgICAgICAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgKyA2KTtcbiAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddLCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCAneXktbW0tZGQnLGVuZERhdGUpKTtcbiAgICAgICAgICAgICAgICByb290LmluaXREYXRlUGlja2VyKCd3ZWVrbHknKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10pe1xuICAgICAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignZGFpbHknKTtcbiAgICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnY29udGFjdE5hbWUnXSl7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2NvbnRhY3ROYW1lJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydub3RlJ10pe1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbChPcmRlci5nZXREYXRhKClbJ25vdGUnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5QWRkcmVzc0lkJ10pe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzSWRdJykpO1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzSWRdJykudmFsKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlBZGRyZXNzSWQnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2N1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJ10pe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9Y3VzdG9tTm90aWZpY2F0aW9uRW1haWxdJykpO1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9Y3VzdG9tTm90aWZpY2F0aW9uRW1haWxdJykudmFsKE9yZGVyLmdldERhdGEoKVsnY3VzdG9tTm90aWZpY2F0aW9uRW1haWwnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignZGFpbHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyRGVsaXZlcnlBZGRyZXNzJykuc2VsZWN0Mih7fSkuc2hvdygpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJykuc2VsZWN0Mih7fSkuc2hvdygpO1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5zdWJtaXQoZnVuY3Rpb24oZXZlbnQpe1xuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoJ3ZhbGlkYXRvbiBmYWxzZScpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBkZWJ1ZygndmFsaWRhdG9uIG9rJyk7XG4gICAgICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWRlbGl2ZXJ5RGF0ZV0nKS52YWwoKS5yZXBsYWNlQWxsKCctJywnLicpKycuJyk7XG5cbiAgICAgICAgICAgIE9yZGVyLnNldERhdGEoe1xuICAgICAgICAgICAgICAgIGNvbnRhY3ROYW1lOiQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS52YWwoKSxcbiAgICAgICAgICAgICAgICBub3RlOiQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIG9yZGVyVHlwZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0OmNoZWNrZWRbbmFtZT1vcmRlclR5cGVdJykudmFsKCksXG4gICAgICAgICAgICAgICAgZGVsaXZlcnlEYXRlOiQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCksXG4gICAgICAgICAgICAgICAgZGVsaXZlcnlBZGRyZXNzSWQ6JChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1kZWxpdmVyeUFkZHJlc3NJZF0nKS52YWwoKSxcbiAgICAgICAgICAgICAgICBkZWxpdmVyeUFkZHJlc3M6JChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1kZWxpdmVyeUFkZHJlc3NdJykudmFsKCksXG4gICAgICAgICAgICAgICAgY3VzdG9tTm90aWZpY2F0aW9uRW1haWw6JChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1jdXN0b21Ob3RpZmljYXRpb25FbWFpbF0nKS52YWwoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cCgncGFyYW1ldGVyIGZvcm0gc3VibWl0JylcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dDpjaGVja2VkW25hbWU9b3JkZXJUeXBlXScpLnZhbCgpKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWRlbGl2ZXJ5RGF0ZV0nKS52YWwoKSk7XG4gICAgICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCkpO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICAgICAgcm9vdC5zZW5kT3JkZXJEYXRhVG9TZXJ2ZXIoJ3BhcmFtZXRlcicscm9vdC5hZnRlck9yZGVyU2V0UGFyYW1ldGVyT2spO1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICB0aGlzLmJsYW5rPWZ1bmN0aW9uICgpe307XG4gICAgdGhpcy5zZXRQYXJhbWV0ZXJDb21wbGV0ZWQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnc2V0UGFyYW1ldGVyQ29tcGxldGVkIGNhbGxlZCcpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xuICAgICAgICAvL3Jvb3QuaW5pdFZpZXdQcm9kdWN0U2VsZWN0KClcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRSb3dGYXZvcml0ZXNBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoJy5idXR0b25JdGVtRmF2b3JpdGVzJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuYnV0dG9uSXRlbUZhdm9yaXRlcycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBwcm9kdWN0SWQgPSAkKHRoaXMpLmRhdGEoJ2lkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9kdWN0SWQpO1xuXG4gICAgICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC50b2dnbGVGYXZvcml0ZXMucmVwbGFjZSgnJWlkJScscHJvZHVjdElkKTtcbiAgICAgICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xuICAgICAgICAgICAgbGV0IGJ1dHRvbj10aGlzO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogYWpheFVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLmFkZENsYXNzKCdidG4td2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5yZW1vdmVDbGFzcygnYnRuLWxpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGJ1dHRvbikucmVtb3ZlQ2xhc3MoJ2J0bi13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLmFkZENsYXNzKCdidG4tbGlnaHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnYnRuLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnYnRuLWxpZ2h0Jyk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRSb3dEZXNjcmlwdGlvbkFjdGlvbj1mdW5jdGlvbiAoKXtcbiAgICAgICAgJCgndGV4dGFyZWEub3JkZXJJdGVtQ29tbWVudCcpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGNvbW1lbnQ9JCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIGxldCBwcm9kdWN0SWQ9JCh0aGlzKS5kYXRhKCdpZCcpO1xuICAgICAgICAgICAgbGV0IHByb2R1Y3RDb21tZW50PU9yZGVyLmdldERhdGEoJ3Byb2R1Y3RDb21tZW50Jyk7XG4gICAgICAgICAgICBpZihwcm9kdWN0Q29tbWVudCE9PW51bGwpe1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPT0ndW5kZWZpbmVkJyAmJiBjb21tZW50Lmxlbmd0aD09PTApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHByb2R1Y3RDb21tZW50W3Byb2R1Y3RJZF09PT1jb21tZW50KXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2R1Y3RDb21tZW50W3Byb2R1Y3RJZF09Y29tbWVudDtcbiAgICAgICAgICAgIGlmKGNvbW1lbnQubGVuZ3RoPT09MCl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIE9yZGVyLnByb2R1Y3RDb21tZW50W3Byb2R1Y3RJZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPcmRlci5wcm9kdWN0Q29tbWVudD1wcm9kdWN0Q29tbWVudDtcbiAgICAgICAgICAgIHF1ZXVlQWpheC5wdXNoKERhdGUubm93KCkpO1xuICAgICAgICAgICAgcm9vdC5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcj1mdW5jdGlvbiAoZCkge1xuICAgICAgICAvLyBgZGAgaXMgdGhlIG9yaWdpbmFsIGRhdGEgb2JqZWN0IGZvciB0aGUgcm93XG4gICAgICAgIC8qKlxuICAgICAgICBAdG9kbzogZmVsc3plZG5pIGVzIHVwZGF0ZWxuaSBheiBhZG90dCB0ZXJtZWsgbWVtb2phdCBheiBvcmRlcmJhblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc29sZS5ncm91cCgncHJvZHVjdFNlbGVjdERhdGF0YWJsZXNSb3dGb3JtYXR0ZXInKTtcbiAgICAgICAgY29uc29sZS5sb2coZCk7XG4gICAgICAgIGxldCB0ZW1wbGF0ZURhdGE9ZDtcbiAgICAgICAgdGVtcGxhdGVEYXRhLmNvbW1lbnQ9Jyc7XG4vLyAgICAgICAgZGVidWcoT3JkZXIpO1xuICAgICAgICBpZihPcmRlci5wcm9kdWN0Q29tbWVudCAmJiBPcmRlci5wcm9kdWN0Q29tbWVudCE9PW51bGwpe1xuICAgICAgICAgICAgZGVidWcodHlwZW9mIE9yZGVyLnByb2R1Y3RDb21tZW50W2QuaWRdKTtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBPcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXSE9J3VuZGVmaW5lZCcgJiYgT3JkZXIucHJvZHVjdENvbW1lbnRbZC5pZF0ubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5jb21tZW50PU9yZGVyLnByb2R1Y3RDb21tZW50W2QuaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKiBAdHlwZWRlZiB7Ym9vbGVhbn0gZC5mYXZvcml0ZXMgKi9cbiAgICAgICAgaWYoZC5mYXZvcml0ZXM9PT10cnVlKXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5idG5GYXZvcml0ZXNDbGFzcz0nYnRuLXdhcm5pbmcnO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5idG5GYXZvcml0ZXNDbGFzcz0nYnRuLWxpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwib3JkZXJQcm9kdWN0U2VsZWN0RGV0YWlsc1wiXScpLmh0bWwoKVxuICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5PWZhbHNlO1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKCkub3JkZXJUeXBlPT09J3dlZWtseScpe1xuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLndlZWtseT10cnVlO1xuLypcblxuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLndlZWtseURheT1bXG4gICAgICAgICAgICAgICAge1wiaW5kZXhcIjoxLFwibmFtZVwiOlwiSMOpdGbFkVwifSxcbiAgICAgICAgICAgIHtcImluZGV4XCI6MixcIm5hbWVcIjpcIktlZGRcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjMsXCJuYW1lXCI6XCJTemVyZGFcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjQsXCJuYW1lXCI6XCJDc8O8dMO2cnTDtmtcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjUsXCJuYW1lXCI6XCJQw6ludGVrXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjo2LFwibmFtZVwiOlwiU3pvbWJhdFwifSxcbiAgICAgICAgICAgIHtcImluZGV4XCI6NyxcIm5hbWVcIjpcIlZhc8Ohcm5hcFwifSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHlEYXk9W1xuICAgICAgICAgICAgICAgIHtcImluZGV4XCI6MixcIm5hbWVcIjpcIkjDqXRmxZFcIiB9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIktlZGRcIn0sXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiU3plcmRhXCJ9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIkNzw7x0w7ZydMO2a1wifSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJQw6ludGVrXCJ9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlN6b21iYXRcIn0sXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiVmFzw6FybmFwXCJ9XG4gICAgICAgICAgICBdO1xuKi9cbiAgICAgICAgfVxuICAgICAgICBsZXQgcHJvZHVjdFNlbGVjdGVkPU9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpO1xuICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW2QuaWRdIT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuaXRlbVF1YW50aXR5PXByb2R1Y3RTZWxlY3RlZFtkLmlkXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhbJ3RlbXBsYXRlRGF0YScsdGVtcGxhdGVEYXRhXSk7XG4gICAgICAgIGxldCBvbGRUYWdzPU11c3RhY2hlLnRhZ3M7XG4gICAgICAgIE11c3RhY2hlLnRhZ3MgPSBbXCJ+IVwiLCBcIiF+XCJdO1xuICAgICAgICBpZih0ZW1wbGF0ZURhdGFbJ3NwZWNpZmljYXRpb24nXT09J2ZhbHNlJyB8fCB0ZW1wbGF0ZURhdGFbJ3NwZWNpZmljYXRpb24nXT09ZmFsc2Upe1xuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnNwZWNpZmljYXRpb25DbGFzcz0nZC1ub25lJztcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZURhdGEucGljdHVyZUltZz0nJztcbiAgICAgICAgaWYodGVtcGxhdGVEYXRhWydwaWN0dXJlJ109PSdmYWxzZScgfHwgdGVtcGxhdGVEYXRhWydwaWN0dXJlJ109PWZhbHNlKXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5waWN0dXJlQ2xhc3M9J2Qtbm9uZSc7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnBpY3R1cmVJbWc9JzxpbWcgc3JjPSBcIicrdGVtcGxhdGVEYXRhWydwaWN0dXJlJ10rJ1wiIGNsYXNzPVwicHJvZHVjdFBpY3R1cmVcIiA+PC9pbWc+JztcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygndGVtcGxhdGVEYXRhJyx0ZW1wbGF0ZURhdGEpO1xuICAgICAgICAvL3RlbXBsYXRlRGF0YVsnYWFfc3BlY2lmaWNhdGlvbiddPWZhbHNlO1xuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSx0ZW1wbGF0ZURhdGEpO1xuICAgICAgICBNdXN0YWNoZS50YWdzID1vbGRUYWdzO1xuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4vKlxuc29sdXRpb24gYmVmb3JlIHRlbXBsYXRlXG4gICAgICAgIHJldHVybiAnPHRhYmxlIGNlbGxwYWRkaW5nPVwiNVwiIGNlbGxzcGFjaW5nPVwiMFwiIGJvcmRlcj1cIjBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDo1MHB4O1wiPicrXG4gICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAnPHRkPkluZm86PC90ZD4nK1xuICAgICAgICAgICAgJzx0ZD4nK2Qubm90ZSsnPC90ZD4nK1xuICAgICAgICAgICAgJzwvdHI+JytcbiAgICAgICAgICAgICc8dHI+JytcbiAgICAgICAgICAgICc8dGQ+aG9vcmV5Y2EgOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+PHNwYW4gc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAyZW07XCI+JytkLmhvb3JleWNhSWQrJzwvc3Bhbj4nICtcblxuICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiXFxuJyArXG4gICAgICAgICAgICAnICAgICAgICBkYXRhLWlkPVwiJytkLmlkKydcIlxcbicgK1xuICAgICAgICAgICAgJyAgICAgICAgY2xhc3M9XCJidXR0b25JdGVtRmF2b3JpdGVzIGJ0biAnK2J0bkZhdm9yaXRlc0NsYXNzKydcIj5cXG4nICtcbiAgICAgICAgICAgICcgICAgPGkgY2xhc3M9XCJiaSBiaS1zdGFyLWZpbGwgcHItMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cXG4nICtcbiAgICAgICAgICAgICcgICAgS2VkdmVuY1xcbicgK1xuICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgJzwvdGQ+JytcbiAgICAgICAgICAgICc8L3RyPicrXG4gICAgICAgICAgICAvISpcbiAgICAgICAgICAgICAgICAgICAgICAgICc8dHI+JytcbiAgICAgICAgICAgICAgICAgICAgICAgICc8dGQ+RXh0ZW5zaW9uIG51bWJlcjo8L3RkPicrXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRkPicrZC5leHRuKyc8L3RkPicrXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC90cj4nK1xuICAgICAgICAgICAgKiEvXG4gICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAnPHRkPkluZm86PC90ZD4nK1xuICAgICAgICAgICAgJzx0ZD4nK2Qubm90ZSsnPC90ZD4nK1xuICAgICAgICAgICAgJzwvdHI+JytcbiAgICAgICAgICAgICc8dHI+JytcbiAgICAgICAgICAgICc8dGQ+TWVnamVneXrDqXM6PC90ZD4nK1xuICAgICAgICAgICAgJzx0ZD48dGV4dGFyZWEgY2xhc3M9XCJvcmRlckl0ZW1Db21tZW50XCIgZGF0YS1pZD1cIicrZC5pZCsnXCI+Jytjb21tZW50Kyc8L3RleHRhcmVhPjwvdGQ+JytcbiAgICAgICAgICAgICc8L3RyPicrXG4gICAgICAgICAgICAvISpcbiAgICAgICAgICAgICohL1xuICAgICAgICAgICAgJzwvdGFibGU+JztcbiovXG4gICAgfVxuXG4gICAgdGhpcy5zZXREYXRhdGFibGVIZWFkZXJUZXh0PWZ1bmN0aW9uKHRleHQpe1xuICAgICAgICAkKCcudGFibGVIZWFkZXJUZXh0JykudGV4dCh0ZXh0KTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFRyZWVQYXRoTmFtZT1mdW5jdGlvbiAobm9kZSl7XG4gICAgICAgIGxldCByZXM9Jyc7XG4gICAgICAgIGxldCBpdGVtcz0kKG5vZGUpLnBhcmVudHMoJ2xpJykudG9BcnJheSgpO1xuICAgICAgICBpdGVtcy5zaGlmdCgpO1xuICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBpbiBpdGVtcykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykpO1xuICAgICAgICAgICAgaWYoJChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgIHJlcys9JChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykudGV4dCgpKycvJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcys9JChub2RlKS50ZXh0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGVkUHJvZHVjdEdyb3VwPW51bGw7XG4gICAgbGV0IGRhdGFUYWJsZVNlYXJjaFN0cj1udWxsO1xuICAgIGxldCBkYXRhVGFibGVTZWFyY2hLcmVsPWZhbHNlO1xuXG4gICAgdGhpcy5zZWFyY2hQcm9kdWN0QnlTdHJpbmc9ZnVuY3Rpb24gKGZpbHRlclN0cil7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6JytmaWx0ZXJTdHIpO1xuICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9ZmlsdGVyU3RyO1xuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrU2VhcmNoUHJvZHVjdD1mdW5jdGlvbiAoKXtcbiAgICAgICAgZGVidWcodGhpcyk7XG4gICAgICAgIGxldCBmaWx0ZXJTdHI9JCgnLnNpZGViYXItc2VhcmNoIGlucHV0W25hbWU9c2VhcmNoVmFsdWVdJykudmFsKClcbiAgICAgICAgZGVidWcoZmlsdGVyU3RyKTtcbiAgICAgICAgcm9vdC5zZWFyY2hQcm9kdWN0QnlTdHJpbmcoZmlsdGVyU3RyKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrRmF2b3JpdGVzUHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrRmF2b3JpdGVzUHJvZHVjdCcpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5tZW51SXRlbUFjdGl2ZScpLnJlbW92ZUNsYXNzKCdtZW51SXRlbUFjdGl2ZScpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCdtZW51SXRlbUFjdGl2ZScpO1xuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBrZWR2ZW5jZWsnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKmZhdm9yaXRlcyoqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuICAgIHRoaXMuY2xpY2tPZnRlblByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja09mdGVuUHJvZHVjdCcpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5tZW51SXRlbUFjdGl2ZScpLnJlbW92ZUNsYXNzKCdtZW51SXRlbUFjdGl2ZScpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCdtZW51SXRlbUFjdGl2ZScpO1xuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBneWFrcmFuIHbDoXPDoXJvbHQnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKm9mdGVuKionO1xuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrU3BlY2lhbE9mZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tTcGVjaWFsT2ZmZXInKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcubWVudUl0ZW1BY3RpdmUnKS5yZW1vdmVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogQWtjacOzcyB0ZXJtw6lrZWsnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKnNwZWNpYWxPZmZlcioqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NwZWNpYWxDYXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tTcGVjaWFsQ2FydCcpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoXCIubWVudUl0ZW1BY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJtZW51SXRlbUFjdGl2ZVwiKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogS29zw6FyIHRlcm3DqWtlaycpO1xuICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9JyoqY2FydCoqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG5cblxuICAgIHRoaXMuY2xpY2tMYXN0UHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrTGFzdFByb2R1Y3QnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcubWVudUl0ZW1BY3RpdmUnKS5yZW1vdmVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogdXRvbGrDoXJhIHbDoXPDoXJvbHQnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKmxhc3QqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1dlZWtseVByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja1dlZWtseVByb2R1Y3QnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcubWVudUl0ZW1BY3RpdmUnKS5yZW1vdmVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogSGV0aSB0ZXJtw6lrZWsnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKndlZWtseSoqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrS3JlbFByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja0tyZWxQcm9kdWN0Jyk7XG4gICAgICAgIC8vcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogSGV0aSB0ZXJtw6lrZWsnKTtcbiAgICAgICAgLy9kYXRhVGFibGVTZWFyY2hTdHI9Jyoqd2Vla2x5KionO1xuICAgICAgICAvLyQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCdrcmVsQWN0aXZlJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaEtyZWw9IWRhdGFUYWJsZVNlYXJjaEtyZWw7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnM9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XCJ3aWR0aFwiOiBcIjEwcHhcIiwgXCJ0YXJnZXRzXCI6IDAgfSxcbiAgICAgICAgICAgIHsgXCJjbGFzc05hbWVcIjogXCJkdC1sZWZ0XCIsIFwidGFyZ2V0c1wiOiAxIH0sXG4vLyAgICAgICAgICAgICAgICB7IFwid2lkdGhcIjogXCIxMjBweFwiLCBcInRhcmdldHNcIjogMSB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiMjhweFwiLCBcInRhcmdldHNcIjogMiB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNDFweFwiLCBcInRhcmdldHNcIjogMyB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNzZweFwiLCBcInRhcmdldHNcIjogNCB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTVweFwiLCBcInRhcmdldHNcIjogNSB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNzBweFwiLCBcInRhcmdldHNcIjogNiB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTRweFwiLCBcInRhcmdldHNcIjogNyB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTdweFwiLCBcInRhcmdldHNcIjogOCB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNDJweFwiLCBcInRhcmdldHNcIjogOSB9LFxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiMTAwcHhcIiwgXCJ0YXJnZXRzXCI6IDEwfSxcbiAgICAgICAgICAgIHtcImNsYXNzTmFtZVwiOiBcImR0LWNlbnRlclwiLCBcInRhcmdldHNcIjogXCJfYWxsXCJ9LFxuICAgICAgICBdO1xuICAgIH1cbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW49ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBjb2x1bW5EYXRhPVtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiAgICAgICdkZXRhaWxzLWNvbnRyb2wnLFxuICAgICAgICAgICAgICAgIFwib3JkZXJhYmxlXCI6ICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6ICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIFwiZGVmYXVsdENvbnRlbnRcIjogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJrcmVsXCIgfSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicGFja2luZ1wifSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwidW5pdFZhbHVlXCIgfSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicHJvZHVjdFVuaXRcIn0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInNlbGxlclVuaXRcIiB9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJ1bml0TXVsdGlwbGllclwifSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiYW1vdW50VW5pdFwiIH0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcblxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBhY3Rpb25Db2x1bW49eyAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiAgICAgICdkZXRhaWxzLWNvbnRyb2wyJyxcbiAgICAgICAgICAgIFwib3JkZXJhYmxlXCI6ICAgICAgZmFsc2UsXG4gICAgICAgICAgICBcImRhdGFcIjogICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBcIndpZHRoXCI6IFwiMTAwcHhcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdENvbnRlbnRcIjonJ1xuICAgICAgICB9O1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKCdvcmRlclR5cGUnKT09J2RhaWx5Jyl7XG4gICAgICAgICAgICBhY3Rpb25Db2x1bW4ucmVuZGVyID0gZnVuY3Rpb24gKGRhdGEsIHR5cGUsIHJvdykge1xuICAgICAgICAgICAgICAgIGlmIChyb3cuc3RvY2tfc3RhdHVzID09PSAnb3V0X29mX3N0b2NrJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzxpbWcgc3JjPVwiL2ltYWdlcy9pY29ucy9kZXRhaWxzX2Nsb3NlLnBuZ1wiIHRpdGxlPVwiTmluY3MgcmFrdMOhcm9uXCIgc3R5bGU9XCJ3aWR0aDogMjRweDtcIj4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdmFsdWU9XCIwXCIgbWluPVwiMFwiIG1heD1cIjk5OTlcIiBzdGVwPVwiMVwiIGRhdGEtZGVjaW1hbHM9XCIxXCIgIGNsYXNzPVwiZm9ybS1jb250cm9sLXNtIGlucHV0TnVtYmVyU3Bpbm5lclwiIHN0eWxlPVwid2lkdGg6IDFlbTtcIi8+JztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uRGF0YS5wdXNoKGFjdGlvbkNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW5EYXRhO1xuICAgIH1cbiAgICB0aGlzLmdldERhdGF0YWJsZXM9ZnVuY3Rpb24gKG9yZGVyVHlwZSl7XG4gICAgICAgIGNvbnNvbGUuZXJyb3Iob3JkZXJUeXBlKTtcbiAgICAgICAgdmFyIHRhYmxlID0gJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgge1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICBcImFqYXhcIjoge1xuICAgICAgICAgICAgICAgIHVybDpPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QsXG4gICAgICAgICAgICAgICAgZGF0YTpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFN0cj1kYXRhVGFibGVTZWFyY2hTdHI7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEua3JlbD1kYXRhVGFibGVTZWFyY2hLcmVsO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxpZXJJZD1PcmRlci5zdXBwbGllcklkO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1PcmRlci5kZWxpdmVyeURhdGU7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEub3JkZXJJZD1PcmRlci5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMoKSxcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiByb290LnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW4oKSxcbiAgICAgICAgICAgIFwib3JkZXJcIjogW1sxLCAnYXNjJ11dLFxuICAgICAgICB9ICk7XG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQ9ZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy9kZWJ1ZyggJ1RhYmxlIGRyYXcgY29tcGxldGU6ICcrbmV3IERhdGUoKS5nZXRUaW1lKCkgKTtcblxuICAgICAgICAvLyQoJ3RkOmNvbnRhaW5zKFwiKlwiKScpLmh0bWwoJzxpIGNsYXNzPVwiYmkgYmktY2hlY2stY2lyY2xlLWZpbGxcIj48L2k+Jyk7XG4gICAgICAgICQoXCJ0ZFwiKS5maWx0ZXIoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHJldHVybiAkKHRoaXMpLnRleHQoKSA9PT0gJyonO1xuICAgICAgICB9KS5odG1sKCc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCI+PC9pPicpO1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKCkub3JkZXJUeXBlPT0nZGFpbHknKXtcbiAgICAgICAgICAgICQoXCJpbnB1dFt0eXBlPSdudW1iZXInXS5pbnB1dE51bWJlclNwaW5uZXJcIikuaW5wdXRTcGlubmVyKHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCAke2dyb3VwQ2xhc3N9XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHN0eWxlPVwibWluLXdpZHRoOiAke2J1dHRvbnNXaWR0aH1cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRlY3JlbWVudCAke2J1dHRvbnNDbGFzc31cIiB0eXBlPVwiYnV0dG9uXCI+JHtkZWNyZW1lbnRCdXR0b259PC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgIC8vJzxpbnB1dCB0eXBlPVwidGV4dFwiIGlucHV0bW9kZT1cImRlY2ltYWxcIiBzdHlsZT1cInRleHQtYWxpZ246ICR7dGV4dEFsaWdufVwiIGNsYXNzPVwicHJvZHVjdFF1YW50aXR5IGZvcm0tY29udHJvbFwiLz4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIHN0ZXA9XCIwLjFcIiBkYXRhLWRlY2ltYWxzPVwiMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogJHt0ZXh0QWxpZ259XCIgY2xhc3M9XCJwcm9kdWN0UXVhbnRpdHkgZm9ybS1jb250cm9sXCIvPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogJHtidXR0b25zV2lkdGh9XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pbmNyZW1lbnQgJHtidXR0b25zQ2xhc3N9XCIgdHlwZT1cImJ1dHRvblwiPiR7aW5jcmVtZW50QnV0dG9ufTwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyxcbiAgICAgICAgICAgICAgICBidXR0b25zV2lkdGg6IFwiMC41cmVtXCIsXG4gICAgICAgICAgICAgICAgZ3JvdXBDbGFzczogXCJcIiwgLy8gY3NzIGNsYXNzIG9mIHRoZSByZXN1bHRpbmcgaW5wdXQtZ3JvdXBcbiAgICAgICAgICAgICAgICBidXR0b25zQ2xhc3M6IFwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByb290LmJpbmRXZWFrVXNlckhlbHBlcigpO1xuICAgICAgICAvKlxuICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIGNoYW5nZSBvcmRlciBxdWFudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5vZmYoJ2NoYW5nZScpO1xuICAgICAgICAkKFwiLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCAuZGV0YWlscy1jb250cm9sMiBpbnB1dFt0eXBlPXRleHRdXCIpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uIChlKXtcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgcXVhbnRpdHk9cXVhbnRpdHkucmVwbGFjZSgnLCcsJy4nKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXBhcnNlRmxvYXQocXVhbnRpdHkpO1xuICAgICAgICAgICAgbGV0IHJvd0RhdGE9JCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLnJvdygkKHRoaXMpLmNsb3Nlc3QoJ3RyJykpLmRhdGEoKTtcbiAgICAgICAgICAgIHJvb3Qub3JkZXJJdGVtc0NoYW5nZShyb3dEYXRhLHF1YW50aXR5KVxuICAgICAgICB9KTtcblxuICAgICAgICAkKFwiLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCAuZGV0YWlscy1jb250cm9sMiBpbnB1dFt0eXBlPXRleHRdXCIpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAvL2RlYnVnKCdleiBhIGZ1bmN0aW9uMicpXG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIGxldCByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3coJCh0aGlzKS5jbG9zZXN0KCd0cicpKS5kYXRhKCk7XG5cbiAgICAgICAgICAgIGlmKE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtyb3dEYXRhLmlkXSl7XG4gICAgICAgICAgICAgICAgZGVidWcocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgZGVidWcoJCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnaW5wdXRbdHlwZT1udW1iZXJdJylbMF0pKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhPcmRlci5wcm9kdWN0U2VsZWN0ZWRbcm93RGF0YS5pZF0pO1xuICAgICAgICAgICAgICAgIGxldCBxdWFudGl0eUN1cnJlbnQ9T3JkZXIucHJvZHVjdFNlbGVjdGVkW3Jvd0RhdGEuaWRdO1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBxdWFudGl0eUN1cnJlbnQhPSdzdHJpbmcnKXtcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHlDdXJyZW50Kz0nJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnaW5wdXRbdHlwZT1udW1iZXJdJylbMF0pLnZhbChxdWFudGl0eUN1cnJlbnQucmVwbGFjZSgnLCcsJy4nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgYnV0dG9uXCIpLm9mZignY2xpY2snKTtcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgYnV0dG9uXCIpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gZGVidWcoJy5kZXRhaWxzLWNvbnRyb2wyIGJ1dHRvbiBjbGljayAnKVxuICAgICAgICAgICAgLy8gZGVidWcodGhpcyk7XG4gICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJ2lucHV0W3R5cGU9dGV4dF0nKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBmdW5jdGlvbk5hbWU9J2luaXRWaWV3UHJvZHVjdFNlbGVjdCc7XG4gICAgICAgIGNvbnNvbGUubG9nKGZ1bmN0aW9uTmFtZSsnIGNhbGxlZCcpO1xuICAgICAgICBpZih2aWV3SW5pY2lhbGl6ZWQuaW5jbHVkZXMoZnVuY3Rpb25OYW1lKSl7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWJ1ZyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyb290KSk7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyQWN0aXZhdGU6ZnVuY3Rpb24gKCl7fX0pO1xuICAgICAgICAvL0Bub3RlOiBiZSBrZWxsIGthcGNzb2xuaSBheiBlbG9uZXpldGV0XG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ2ludm9pY2UnKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLmFkZEVuYWJsZWQoJ2ludm9pY2UnKTtcblxuICAgICAgICAvLyDDiXJ2w6lueXRlbGVuIHN6w6FsbMOtdMOhc2kgZMOhdHVtIGVzZXTDqW4gVG9hc3QgZmlneWVsbWV6dGV0w6lzIG1lZ2plbGVuw610w6lzZS5cbiAgICAgICAgcm9vdC5jaGVja0RlbGl2ZXJ5RGF0ZVRvYXN0KCk7XG5cbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nLm9yZGVyUGFyYW1ldGVyRm9ybSc7XG4gICAgICAgIC8vY29uc29sZS5sb2coT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0KTtjaGFuZ2VcbiAgICAgICAgZGVidWcoKENTU1NlbGVjdG9yRm9ybSsnIC5mYS1zZWFyY2gnKSk7XG5cbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIC5mYS1zZWFyY2gnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5zaWRlYmFyLXNlYXJjaCAuZmEtc2VhcmNoJykub24oJ2NsaWNrJyxyb290LmNsaWNrU2VhcmNoUHJvZHVjdCk7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLmZhdm9yaXRlcycpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLmZhdm9yaXRlcycpLm9uKCdjbGljaycscm9vdC5jbGlja0Zhdm9yaXRlc1Byb2R1Y3QpO1xuXG4gICAgICAgICQoJ2Euc2lkZWJhci5vZnRlbicpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLm9mdGVuJykub24oJ2NsaWNrJyxyb290LmNsaWNrT2Z0ZW5Qcm9kdWN0KTtcblxuICAgICAgICAkKCdhLnNpZGViYXIubGFzdCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLmxhc3QnKS5vbignY2xpY2snLHJvb3QuY2xpY2tMYXN0UHJvZHVjdCk7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLndlZWtseScpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLndlZWtseScpLm9uKCdjbGljaycscm9vdC5jbGlja1dlZWtseVByb2R1Y3QpO1xuXG4gICAgICAgICQoJ2Euc2lkZWJhci5rcmVsJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCdhLnNpZGViYXIua3JlbCcpLm9uKCdjbGljaycscm9vdC5jbGlja0tyZWxQcm9kdWN0KTtcblxuICAgICAgICAkKCdhLnNpZGViYXIuc3BlY2lhbE9mZmVyJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCdhLnNpZGViYXIuc3BlY2lhbE9mZmVyJykub24oJ2NsaWNrJyxyb290LmNsaWNrU3BlY2lhbE9mZmVyKTtcblxuICAgICAgICAkKCdhLnNpZGViYXIuY2FydCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLmNhcnQnKS5vbignY2xpY2snLHJvb3QuY2xpY2tTcGVjaWFsQ2FydCk7XG5cblxuXG5cbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIGlucHV0W25hbWU9c2VhcmNoVmFsdWVdJykub2ZmKCdrZXlwcmVzcycpO1xuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggaW5wdXRbbmFtZT1zZWFyY2hWYWx1ZV0nKS5vbigna2V5cHJlc3MnLGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSAxMyApIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoJCh0aGlzKS52YWwoKS5sZW5ndGg+PTIpe1xuICAgICAgICAgICAgICAgIHJvb3Quc2VhcmNoUHJvZHVjdEJ5U3RyaW5nKCQodGhpcykudmFsKCkrZXZlbnQua2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cblxuXG4gICAgICAgICQoJy5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLnNpZGViYXItd3JhcHBlciAuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub24oJ2NsaWNrJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBJZD0kKHRoaXMpLmRhdGEoJ2lkJyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9Z3JvdXBJZDtcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9bnVsbDtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhncm91cElkKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcbi8qXG4gICAgICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgJ2dyb3VwSWQnOmdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgICdzdXBwbGllcl9pZCc6T3JkZXIuc3VwcGxpZXJJZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXguZGF0YShhamF4RGF0YSkubG9hZCgpO1xuXG4qL1xuLypcbiAgICAgICAgICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QrJz9ncm91cElkPScrZ3JvdXBJZCsnJnN1cHBsaWVyX2lkPScrT3JkZXIuc3VwcGxpZXJJZDtcbiAgICAgICAgICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC51cmwoYWpheFVybCkubG9hZCgpO1xuKi9cbiAgICAgICAgICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgbGV0IHRhYmxlID0gcm9vdC5nZXREYXRhdGFibGVzKE9yZGVyLmdldERhdGEoJ29yZGVyVHlwZScpKTtcblxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdpbml0LmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coICdUYWJsZSBpbml0aWFsaXNhdGlvbiBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xuICAgICAgICB9ICkuZGF0YVRhYmxlKCk7XG5cblxuXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2RyYXcuZHQnLHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCkuZGF0YVRhYmxlKCk7XG5cbiAgICAgICAgLy8kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdkcmF3LmR0JywgICkuZGF0YVRhYmxlKCk7XG5cbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLm9uKCAneGhyLmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVidWcoICdUYWJsZSB4aHIgY29tcGxldGU6ICcrbmV3IERhdGUoKS5nZXRUaW1lKCkgKTtcbiAgICAgICAgfSApLmRhdGFUYWJsZSgpO1xuXG4gICAgICAgIC8vJChcImlucHV0W3R5cGU9J251bWJlciddLmlucHV0TnVtYmVyU3Bpbm5lclwiKS5pbnB1dFNwaW5uZXIoKTtcblxuLypcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV0YWlsc1xuICovXG5cbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdHIgPSAkKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgICAgICBsZXQgcm93ID0gdGFibGUucm93KCB0ciApO1xuXG4gICAgICAgICAgICBpZiAoIHJvdy5jaGlsZC5pc1Nob3duKCkgKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyByb3cgaXMgYWxyZWFkeSBvcGVuIC0gY2xvc2UgaXRcbiAgICAgICAgICAgICAgICByb3cuY2hpbGQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHRyLnJlbW92ZUNsYXNzKCdzaG93bicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3BlbiB0aGlzIHJvd1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZCggcm9vdC5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcihyb3cuZGF0YSgpKSApLnNob3coKTtcbiAgICAgICAgICAgICAgICB0ci5hZGRDbGFzcygnc2hvd24nKTtcbiAgICAgICAgICAgICAgICByb290LmJpbmRQcm9kdWN0RGV0YWlsc0FjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICAgIHZpZXdJbmljaWFsaXplZC5wdXNoKGZ1bmN0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUHJvZHVjdERldGFpbHNBY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJvb3QuYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uKCk7XG4gICAgICAgIHJvb3QuYmluZFJvd0Zhdm9yaXRlc0FjdGlvbigpO1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddPT0nd2Vla2x5Jyl7XG4gICAgICAgICAgICByb290LmJpbmRPcmRlckl0ZW1XZWVrUXVhbnRpdHkoKTtcbiAgICAgICAgfVxuICAgfVxuXG4gICAgdGhpcy5iaW5kV2Vha1VzZXJIZWxwZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoIFwiaW5wdXQuaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vZmYoIFwiZm9jdXNcIik7XG4gICAgICAgICQoIFwiaW5wdXQuaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vbiggXCJmb2N1c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgcXVhbnRpdHk9cXVhbnRpdHkucmVwbGFjZSgnLCcsJy4nKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXBhcnNlRmxvYXQocXVhbnRpdHkpO1xuICAgICAgICAgICAgaWYocXVhbnRpdHk9PT0wKXtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgnJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQoIFwiaW5wdXRbdHlwZT10ZXh0XS5pbnB1dE51bWJlclNwaW5uZXJcIiApLm9mZiggXCJrZXlwcmVzc1wiKTtcbiAgICAgICAgJCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICkub24oIFwia2V5cHJlc3NcIiwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gMTMgKSB7XG4vLyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlbnRlciBwcmVzc2VkJyk7XG4gICAgICAgICAgICAgICAgbGV0IGFjdHVhbEl0ZW09dGhpcztcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXM9JCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICk7XG4gICAgICAgICAgICAgICAgaXRlbXMuZWFjaChmdW5jdGlvbiAoaXRlbSl7XG4vLyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXM9PWFjdHVhbEl0ZW0pe1xuLy8gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbSsxPD1pdGVtcy5sZW5ndGgpe1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihpdGVtc1tpdGVtKzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGl0ZW1zW2l0ZW0rMV0pLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kT3JkZXJJdGVtV2Vla1F1YW50aXR5PWZ1bmN0aW9uICgpe1xuICAgICAgICAkKFwiaW5wdXQucHJvZHVjdFNlbGVjdERheVF1YW50aXR5XCIpLm9mZignY2hhbmdlJyk7XG4gICAgICAgICQoXCJpbnB1dC5wcm9kdWN0U2VsZWN0RGF5UXVhbnRpdHlcIikub24oJ2NoYW5nZScsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5uYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdkYXlpbmRleCcpKTtcblxuICAgICAgICAgICAgbGV0IHJvd0RhdGE9bnVsbDtcbiAgICAgICAgICAgIGxldCByb3dOb2RlPSQoJCh0aGlzKS5jbG9zZXN0KCd0YWJsZS5vcmRlclByb2R1Y3RTZWxlY3RSb3dEZXRhaWxzVGFibGUnKS5jbG9zZXN0KCd0cicpKS5wcmV2KCk7XG4gICAgICAgICAgICByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3cocm93Tm9kZSkuZGF0YSgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm93RGF0YSk7XG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXF1YW50aXR5LnJlcGxhY2UoJywnLCcuJyk7XG4gICAgICAgICAgICBxdWFudGl0eT1wYXJzZUZsb2F0KHF1YW50aXR5KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgcm9vdC5vcmRlckl0ZW1zQ2hhbmdlKHJvd0RhdGEscXVhbnRpdHksJCh0aGlzKS5kYXRhKCdkYXlpbmRleCcpKTtcbi8vICAgICAgICAgICAgcm9vdC5vcmRlckl0ZW1zQ2hhbmdlXG4gICAgICAgICAgICAvL29yZGVySXRlbXNDaGFuZ2VcbiAgICAgICAgICAgIC8vcXVhbnRpdHlbMTY4M11bMV1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vcm9vdC50b2dnbGVFbmFibGVTZW5kKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ21vc3QgdmVnemV0dC4gZW5ueWl0IGtpc3plZCcrYmF0Y2hOdW0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8cXVldWVBamF4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc2hpZnRlbCcpXG4gICAgICAgICAgICBxdWV1ZUFqYXguc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdyZW1haW5pbmcgbGVmdCAnK3F1ZXVlQWpheC5sZW5ndGgpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBzeW5jRG9pbmc9ZmFsc2U7XG4gICAgICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xuICAgICAgICB9LCBPcHRzLmRhdGFTeW5jUGF1c2VUaW1lKTtcbiAgICB9XG4gICAgbGV0IHF1ZXVlQWpheD1bXTtcbiAgICBsZXQgc3luY0RvaW5nPWZhbHNlO1xuXG4gICAgdGhpcy5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXI9ZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2RlYnVnKHF1ZXVlQWpheCk7XG4gICAgICAgIGlmKHN5bmNEb2luZyl7XG4gICAgICAgICAgICAvL2RlYnVnKCdzeW5jIGluIHByb2dyZXNzLi4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHF1ZXVlQWpheC5sZW5ndGg8MSl7XG4gICAgICAgICAgICByZXR1cm4gO1xuICAgICAgICB9XG4gICAgICAgIHN5bmNEb2luZz10cnVlO1xuXG4gICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdwcm9kdWN0U2VsZWN0Jyxyb290LmFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyKTtcbiAgICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLm9yZGVySXRlbXNDaGFuZ2U9ZnVuY3Rpb24oSXRlbURhdGEscXVhbnRpdHksZGF5SW5kZXgpe1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgICAgICAgY29uc29sZS5sb2coSXRlbURhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZyhxdWFudGl0eSk7XG4gICAgICAgIGNvbnNvbGUubG9nKE9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpKTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tJyk7XG4vKlxuKi9cbiAgICAgICAgaWYoaXNOYU4ocXVhbnRpdHkpKXtcbiAgICAgICAgICAgIHF1YW50aXR5PTA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZD1PcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKTtcbiAgICAgICAgY29uc29sZS5ncm91cCgnb3JkZXJJdGVtc0NoYW5nZScpO1xuICAgICAgICBjb25zb2xlLmxvZyhbJ3Byb2R1Y3RTZWxlY3RlZCcscHJvZHVjdFNlbGVjdGVkXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEnLEl0ZW1EYXRhXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEuaWQnLEl0ZW1EYXRhLmlkXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsncXVhbnRpdHknLHF1YW50aXR5XSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnZGF5SW5kZXgnLGRheUluZGV4XSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF0pO1xuXG4gICAgICAgIGxldCBwcm9kdWN0U2VsZWN0ZWRJdGVtPXByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF07XG4gICAgICAgIC8qXG4gICAgICAgIGhhIDAgZXJ0ZWsgam9uIGVzIG5lbSBpcyB2b2x0IGFra29yIGhhbWFyIGtpdWdyYXRqdWtcbiAgICAgICAgICovXG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3F1YW50aXR5PT0wJyk7XG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkSXRlbT09J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaXR0IGxlcDEnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbiBkYXlJbmRleCcpXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFsncHJvZHVjdFNlbGVjdGVkSXRlbScscHJvZHVjdFNlbGVjdGVkSXRlbV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpdHQgbGVwMicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgaGEgYXpvbm9zIGF6IGVydGVrIGtpdWdydW5rXG4gICAgICAgICAqL1xuICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXSE9J3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICBpZihwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhem9ub3MgbmFwaScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2F6b25vcycpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWFudGl0eT09MCl7XG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBoYSB2YW4gZXJ0ZWsgZXJ0ZWtldCBhZHVuayFcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYoZGF5SW5kZXgpe1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09W107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXQgcXVhbnRpdHkgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0nLHF1YW50aXR5KTtcbiAgICAgICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT1xdWFudGl0eTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NldCBxdWFudGl0eSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdJyxxdWFudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coWydwcm9kdWN0U2VsZWN0ZWQnLHByb2R1Y3RTZWxlY3RlZF0pO1xuICAgICAgICBPcmRlci5wcm9kdWN0U2VsZWN0ZWQ9cHJvZHVjdFNlbGVjdGVkO1xuXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgcXVldWVBamF4LnB1c2goRGF0ZS5ub3coKSk7XG4gICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuXG5cbiAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgZGVidWcoJ2l0dCBsZXAxMicpO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcbiAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICB9XG4gICAgICAgIE9yZGVyLnByb2R1Y3RTZWxlY3RlZD1wcm9kdWN0U2VsZWN0ZWQ7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHF1ZXVlQWpheC5wdXNoKERhdGUubm93KCkpO1xuICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpKTtcbiAgICAgICAgZGVidWcoJyoqKioqKioqKioqKioqKioqKionKTtcbiovXG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdJbnZvaWNlPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcblxuICAgICAgICBpZihPYmplY3Qua2V5cyhPcmRlci5wcm9kdWN0U2VsZWN0ZWQpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3NlbmQnKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdzZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0eWxlU3RyPSc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIicrT3B0cy5VUkwucm9vdCsnL2Nzcy9pbnZvaWNlLmNzc1wiPic7XG4gICAgICAgICQoJ3RhYmxlLmludm9pY2UgYnV0dG9uLnByaW50QnV0dG9uJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCd0YWJsZS5pbnZvaWNlIGJ1dHRvbi5wcmludEJ1dHRvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnByaW50KCk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBuZXdXaW49IHdpbmRvdy5vcGVuKFwiXCIpO1xuICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHN0eWxlU3RyKTtcbiAgICAgICAgICAgIGxldCBwcmludD0kKCd0YWJsZS5pbnZvaWNlJykuY2xvbmUoKTtcbiAgICAgICAgICAgIHByaW50LmZpbmQoJ2J1dHRvbi5wcmludEJ1dHRvbicpLnJlbW92ZSgpO1xuLy8gICAgICAgICAgICBuZXdXaW4uZG9jdW1lbnQud3JpdGUoJCgndGFibGUuaW52b2ljZScpLnByb3AoJ291dGVySFRNTCcpKTtcbiAgICAgICAgICAgIG5ld1dpbi5kb2N1bWVudC53cml0ZShwcmludC5wcm9wKCdvdXRlckhUTUwnKSk7XG4gICAgICAgICAgICBuZXdXaW4ucHJpbnQoKTtcbiAgICAgICAgICAgbmV3V2luLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIMOJcnbDqW55dGVsZW4gc3rDoWxsw610w6FzaSBkw6F0dW0gZXNldMOpbiBUb2FzdCBmaWd5ZWxtZXp0ZXTDqXMgbWVnamVsZW7DrXTDqXNlLlxuICAgICAgICByb290LmNoZWNrRGVsaXZlcnlEYXRlVG9hc3QoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0T3JkZXI9ZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmluaXQoKTtcbiAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJy0nKTtcbiAgICAgICAgcm9vdC5zZXRTdXBwbGllcignLScpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5hZnRlck9yZGVyU2VuZE9rPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNlbnQhXCIsIG1lc3NhZ2U6ICdPcmRlciBTZW50JyAsIHN0YXR1czogVE9BU1RfU1RBVFVTLklORk8sIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5wcm9wKCdkaXNhYmxlZCcsdHJ1ZSk7XG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS5yZW1vdmVDbGFzcygnc3RhdHVzQmxpbmsnKTtcbiAgICAgICAgJCgnLnN0YXR1c05hbWVQbGFjZScpLnRleHQoJ2Vsa8O8bGR2ZScpO1xuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kT2snKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICQoJ2Rpdi5pbnZvaWNlQ29udGFpbmVyJykuaHRtbChkYXRhLnJldEhUTUwpO1xuICAgICAgICAvL3Jvb3QucmVzZXRPcmRlcigpO1xuICAgIH1cbiAgICB0aGlzLmFmdGVyT3JkZXJTZW5kRXJyb3I9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZGluZycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJC5lYWNoKEFQUC5PcmRlck1vZHVsZS5TdGVwcGVyLmdldE9wdHMoKS5hdmFpbGFibGUsZnVuY3Rpb24gKGluZGV4LHZhbHVlKSB7XG4gICAgICAgICAgICBBUFAuT3JkZXJNb2R1bGUuU3RlcHBlci5zZXRFbmFibGVkKHZhbHVlKTtcbiAgICAgICAgICAgIEFQUC5PcmRlck1vZHVsZS5TdGVwcGVyLnNldENvbXBsZXRlZCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEEgc3rDoWxsw610w6FzaSBkw6F0dW0gYSBrw7xsZMOpcyBwaWxsYW5hdMOhYmFuIG3DoXIgw6lydsOpbnl0ZWxlbiAocGwuIHBpc3prb3phdCBpZMWRa8O2emJlbmkgdsOhbHRvesOhcykuXG4gICAgICAgIGlmKGRhdGEgJiYgZGF0YS5lcnJvckNvZGUgPT09ICdJTlZBTElEX0RFTElWRVJZX0RBVEUnKXtcbiAgICAgICAgICAgIHJvb3Quc2hvd0ludmFsaWREZWxpdmVyeURhdGUoZGF0YS5zdWdnZXN0ZWREZWxpdmVyeURhdGUgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbGxlbsWRcnppIGEgc3rDoWxsw610w6FzaSBkw6F0dW1vdCDDqXMgaGEgw6lydsOpbnl0ZWxlbiwgVG9hc3Qgw7x6ZW5ldGV0IGplbGVuw610IG1lZy5cbiAgICAgKiBDc2FrIGEgcHJvZHVjdFNlbGVjdCDDqXMgaW52b2ljZSBuw6l6ZXRla2LFkWwgaMOtdmhhdMOzIOKAkyBhIHNlbmQgbsOpemV0YmVuIGEgdG9nZ2xlRW5hYmxlU2VuZCB2w6lnemkgZXp0LlxuICAgICAqL1xuICAgIHRoaXMuY2hlY2tEZWxpdmVyeURhdGVUb2FzdD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghT3JkZXIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5jaGVja1JlYWR5VG9TZW5kLnJlcGxhY2UoJyVpZCUnLE9yZGVyLmlkKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmKGRhdGEgJiYgZGF0YS5zdWNjZXNzICYmIGRhdGEud2h5ICYmICQuaW5BcnJheSgnZGVsaXZlcnlEYXRlJywgZGF0YS53aHkpICE9PSAtMSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWdnZXN0ZWQgPSBkYXRhLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3VnZ2VzdGVkSHVtYW4gPSBzdWdnZXN0ZWQgPyBzdWdnZXN0ZWQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICdBIGtpdsOhbGFzenRvdHQgc3rDoWxsw610w6FzaSBkw6F0dW0gbcOhciBuZW0gbWVnZmVsZWzFkS4nO1xuICAgICAgICAgICAgICAgICAgICBpZihzdWdnZXN0ZWRIdW1hbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICcgSmF2YXNvbHQgw7pqIGTDoXR1bTogJyArIHN1Z2dlc3RlZEh1bWFuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIsOJcnbDqW55dGVsZW4gc3rDoWxsw610w6FzaSBkw6F0dW1cIiwgbWVzc2FnZTogbWVzc2FnZSwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuV0FSTklORywgdGltZW91dDogODAwMCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lZ2plbGVuw610aSBhIHNlbmQgbsOpemV0ZW4gYXogw6lydsOpbnl0ZWxlbiBzesOhbGzDrXTDoXNpIGTDoXR1bSBmaWd5ZWxtZXp0ZXTDqXN0IGEgamF2YXNvbHQgw7pqIGTDoXR1bW1hbCxcbiAgICAgKiDDqXMgbGV0aWx0amEgYSBcIk1FR1JFTkRFTMOJU1QgRUxLw5xMRMOWTVwiIGdvbWJvdCwgYW3DrWcgYSBmZWxoYXN6bsOhbMOzIG5lbSBoYWd5amEgasOzdsOhIGF6IMO6aiBkw6F0dW1vdC5cbiAgICAgKi9cbiAgICB0aGlzLnNob3dJbnZhbGlkRGVsaXZlcnlEYXRlPWZ1bmN0aW9uIChzdWdnZXN0ZWQpIHtcbiAgICAgICAgbGV0IHN1Z2dlc3RlZEh1bWFuID0gc3VnZ2VzdGVkID8gc3VnZ2VzdGVkLnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nIDogJy0nO1xuICAgICAgICAkKCcuc3VnZ2VzdGVkRGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KHN1Z2dlc3RlZEh1bWFuKTtcbiAgICAgICAgJCgnLmludmFsaWREZWxpdmVyeURhdGVXYXJuaW5nJykuZGF0YSgnc3VnZ2VzdGVkLWRhdGUnLCBzdWdnZXN0ZWQgfHwgJycpO1xuICAgICAgICAkKCcuaW52YWxpZERlbGl2ZXJ5RGF0ZVdhcm5pbmcnKS5yZW1vdmVDbGFzcygnZC1ub25lJykuYWRkQ2xhc3MoJ2QtZmxleCcpO1xuXG4gICAgICAgIC8vIEFtw61nIGEgZmVsaGFzem7DoWzDsyBuZW0gaGFneWphIGrDs3bDoSBheiDDumogZMOhdHVtb3QsIGF6IGVsa8O8bGTDqXMgZ29tYiBzZSBuZSBsw6F0c3N6b24sIHNlIG5lIGxlZ3llbiBha3TDrXYuXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5hZGRDbGFzcygnZC1ub25lJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblxuICAgICAgICAvLyBBIGphdmFzbGF0IG1lZ2zDqXTDqXTFkWwgZsO8Z2fFkWVuIMOhbGzDrXRqdWsgYmUgYSBqw7N2w6FoYWd5w7MgZ29tYm90LlxuICAgICAgICBpZihzdWdnZXN0ZWQpe1xuICAgICAgICAgICAgJCgnLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZUJsb2NrJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmJ1dHRvbkFwcHJvdmVTdWdnZXN0ZWREYXRlJykudGV4dCgnSsOzdsOhaGFneW9tIMOpcyBtw7Nkb3PDrXRvbSBhIGTDoXR1bW90Jyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgJCgnLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZUJsb2NrJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmJ1dHRvbkFwcHJvdmVTdWdnZXN0ZWREYXRlJykudGV4dCgnw5pqIHN6w6FsbMOtdMOhc2kgZMOhdHVtIHbDoWxhc3p0w6FzYScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnQSBraXbDoWxhc3p0b3R0IHN6w6FsbMOtdMOhc2kgZMOhdHVtIG3DoXIgbmVtIG1lZ2ZlbGVsxZEuJztcbiAgICAgICAgaWYoc3VnZ2VzdGVkKXtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gJyBKYXZhc29sdCDDumogZMOhdHVtOiAnICsgc3VnZ2VzdGVkSHVtYW47XG4gICAgICAgIH1cbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiw4lydsOpbnl0ZWxlbiBzesOhbGzDrXTDoXNpIGTDoXR1bVwiLCBtZXNzYWdlOiBtZXNzYWdlLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5XQVJOSU5HLCB0aW1lb3V0OiA4MDAwIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZmVsaGFzem7DoWzDsyBqw7N2w6FoYWd5amEgYSBqYXZhc29sdCDDumogc3rDoWxsw610w6FzaSBkw6F0dW1vdDogdmlzc3phbmF2aWfDoWx1bmsgYSBwYXJhbcOpdGVyXG4gICAgICogKG5hcHTDoXIpIGzDqXDDqXNoZXosIGFob2wgYXogw7pqIGTDoXR1bSBsZXN6IGVsxZF2w6FsYXN6dHZhLCDDrWd5IG9ubmFuIMO6anJhIHbDqWdpZ3ZpaGV0xZEgYSBmb2x5YW1hdC5cbiAgICAgKi9cbiAgICB0aGlzLmFwcHJvdmVTdWdnZXN0ZWREZWxpdmVyeURhdGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3VnZ2VzdGVkID0gJCgnLmludmFsaWREZWxpdmVyeURhdGVXYXJuaW5nJykuZGF0YSgnc3VnZ2VzdGVkLWRhdGUnKTtcbiAgICAgICAgaWYoc3VnZ2VzdGVkKXtcbiAgICAgICAgICAgIE9yZGVyLnNldERhdGEoe2RlbGl2ZXJ5RGF0ZTogc3VnZ2VzdGVkfSk7XG4gICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShzdWdnZXN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgICQoJy5pbnZhbGlkRGVsaXZlcnlEYXRlV2FybmluZycpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgIC8vIEEga8O8bGTDqXMgZ29tYm90IGNzYWsgYWtrb3IgZW5nZWRqw7xrIMO6anJhLCBoYSBhIGZlbGhhc3puw6Fsw7MgYSBwYXJhbcOpdGVyIGzDqXDDqXNiZW5cbiAgICAgICAgLy8gw6lydsOpbnllcyBkw6F0dW1vdCB2w6FsYXN6dCDigJMgZXrDqXJ0IGl0dCB2aXNzemFuYXZpZ8OhbHVuayBhIG5hcHTDoXJob3ouXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5yZW1vdmVDbGFzcygnZC1ub25lJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3BhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdTZW5kPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2luaXRWaWV3U2VuZCBjYWxsZWQgMicpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xuXG4gICAgICAgIC8vIEZpZ3llbG1lenRldMWRIHBhbmVsIGFsYXBoZWx5emV0YmUgw6FsbMOtdMOhc2Egw6lzIGEgasOzdsOhaGFnecOhcyBnb21iIGJla8O2dMOpc2UuXG4gICAgICAgIC8vIEEga8O8bGTDqXMgZ29tYm90IHN6w6FuZMOpa29zYW4gTkVNIHRlc3N6w7xrIGzDoXRoYXTDs3bDoSBpdHQg4oCTIGEgdG9nZ2xlRW5hYmxlU2VuZCgpXG4gICAgICAgIC8vIGFzemlua3JvbiBjaGVja1JlYWR5VG9TZW5kIHbDoWxhc3phIGZvZ2phIGEgdsOpZ3PFkSDDoWxsYXBvdG90IGJlw6FsbMOtdGFuaS5cbiAgICAgICAgJCgnLmludmFsaWREZWxpdmVyeURhdGVXYXJuaW5nJykucmVtb3ZlQ2xhc3MoJ2QtZmxleCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLmFkZENsYXNzKCdkLW5vbmUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAkKCcuYnV0dG9uQXBwcm92ZVN1Z2dlc3RlZERhdGUnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25BcHByb3ZlU3VnZ2VzdGVkRGF0ZScpLm9uKCdjbGljaycsIHJvb3QuYXBwcm92ZVN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZSk7XG5cbiAgICAgICAgLy8gUHJvYWt0w612IFVYLWVsbGVuxZFyesOpczogYSBzZW5kIG7DqXpldCBiZXTDtmx0w6lzZWtvciBqZWxlenrDvGssIGhhIGEgc3rDoWxsw610w6FzaSBkw6F0dW1cbiAgICAgICAgLy8gaWTFkWvDtnpiZW4gw6lydsOpbnl0ZWxlbm7DqSB2w6FsdCwgw6lzIGZlbGFqw6FubGp1ayBhIGvDtnZldGtlesWRIMOpcnbDqW55ZXMgZMOhdHVtb3QuXG4gICAgICAgIHJvb3QudG9nZ2xlRW5hYmxlU2VuZCgpO1xuXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZW5kIGJ1dG9uIGNsaWNrZWQnKTtcbiAgICAgICAgICAgIC8vQHRvZG86IGRhdGFzeW5jaGVyZSBhbmQgY2FsbGJhY2tcbiAgICAgICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBQTTE1OFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkLmVhY2goQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuZ2V0T3B0cygpLmF2YWlsYWJsZSxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRFbmFibGVkKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvKipcblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByb290LnNlbmRPcmRlckRhdGFUb1NlcnZlcignc2VuZCcscm9vdC5hZnRlck9yZGVyU2VuZE9rLHJvb3QuYWZ0ZXJPcmRlclNlbmRFcnJvcik7XG5cbi8qICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgICAgICBhamF4RGF0YS5zZW5kPXRydWU7XG4gICAgICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5zdG9yZSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlck9yZGVyU2VuZE9rKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLnRlc3RNb2RlU2VuZD1mdW5jdGlvbiAoKSB7XG5cbiAgICB9XG5cblxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygndGVzdE1vZGUgY2FsbGVkICcpXG4gICAgICAgIE9yZGVyLnNldERhdGEoe1xuICAgICAgICAgICAgaWQ6MjM0LFxuICAgICAgICAgICAgc3VwcGxpZXJJZDo3LFxuICAgICAgICAgICAgcHJvZHVjdFNlbGVjdGVkOntcbiAgICAgICAgICAgICAgICAxMTYgOiAzLFxuICAgICAgICAgICAgICAgIDI5MyA6IDIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFjdE5hbWU6J0NvbnRhY3QgTmFtZScsXG4gICAgICAgICAgICBub3RlOidOb3RlJyxcbiAgICAgICAgICAgIHR5cGU6J2RhaWx5JyxcbiAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTpPcHRzLmRlZmF1bHREZWxpdmVyeURhdGUsXG4gICAgICAgICAgICBkZWxpdmVyeUFkZHJlc3M6MTIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyhPcmRlci5nZXREYXRhKCkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOnN1cHBsaWVySWR9fSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfX0pO1xuICAgICAgICB0aGlzLlN0ZXBwZXIuaW5pdCh7XG4gICAgICAgICAgICBVUkw6IHtcbiAgICAgICAgICAgICAgICBjcmVhdGU6IE9wdHMuVVJMLmNyZWF0ZSxcbiAgICAgICAgICAgIH0sXG4vKlxuY3N1cGFzeiBheiBlbGVqZXJvbFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllciddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdzdXBwbGllcicsXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1N1cHBsaWVyLFxuXG5wcm9kdWN0IHNlbGVjdFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcbiAgICAgICAgICAgIGFjdGl2ZTogJ3Byb2R1Y3RTZWxlY3QnLFxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdQcm9kdWN0U2VsZWN0LFxuXG5mdWxsb3NcbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0JywnaW52b2ljZSddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuc2VuZFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnLCdpbnZvaWNlJywnc2VuZCddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdzZW5kJyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuKi9cbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXG4gICAgICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuXG4gICAgICAgICAgICBhdXRvQ2FsbGJhY2s6IHtcbiAgICAgICAgICAgICAgICBpbnZvaWNlOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3SW52b2ljZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VuZDoge1xuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld1NlbmRcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XG5cbiAgICB9XG4gICAgdGhpcy50b2dnbGVFbmFibGVTZW5kPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3RvZ2dsZUVuYWJsZVNlbmQgY2FsbGVkJyk7XG4gICAgICAgIC8vIEhhIG3DqWcgbmluY3MgbWVudGV0dCByZW5kZWzDqXMgSUQgKHBsLiDDumogcmVuZGVsw6lzIGzDqXRyZWhvesOhc2Frb3IgYSBzdXBwbGllciBsw6lww6lzbsOpbCksXG4gICAgICAgIC8vIGEgY2hlY2tSZWFkeVRvU2VuZCBow612w6FzIGZlbGVzbGVnZXMgw6lzIGhpYsOhdCBva296bmEgKC9vcmRlci91bmRlZmluZWQvY2hlY2tSZWFkeVRvU2VuZCkuXG4gICAgICAgIGlmICghT3JkZXIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5jaGVja1JlYWR5VG9TZW5kLnJlcGxhY2UoJyVpZCUnLE9yZGVyLmlkKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0b2dnbGVFbmFibGVTZW5kIHJlc3BvbnNlOicsIGRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIEFsYXDDqXJ0ZWxtZXpldHRlbiBlbHJlanRqw7xrIGEgZmlneWVsbWV6dGV0w6lzdCDigJMgY3NhayBrb25rcsOpdCBkZWxpdmVyeURhdGUgaGliYSBlc2V0w6luIG11dGF0anVrLlxuICAgICAgICAgICAgICAgICQoJy5pbnZhbGlkRGVsaXZlcnlEYXRlV2FybmluZycpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKS5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICAgICAgICAgICAgICBpZihkYXRhICYmIGRhdGEuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgc3rDoWxsw610w6FzaSBkw6F0dW0gaWTFkWvDtnpiZW4gw6lydsOpbnl0ZWxlbm7DqSB2w6FsdCDigJMgZmlneWVsbWV6dGV0w6lzIGEgamF2YXNvbHQgZMOhdHVtbWFsLlxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLndoeSAmJiAkLmluQXJyYXkoJ2RlbGl2ZXJ5RGF0ZScsIGRhdGEud2h5KSAhPT0gLTEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93SW52YWxpZERlbGl2ZXJ5RGF0ZShkYXRhLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZSB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoZGF0YS5yZWFkeVRvU2VuZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5hZGRDbGFzcygnZC1ub25lJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjpmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgLy8gQUpBWCBoaWJhIGVzZXTDqW4gKHBsLiA0MTksIDUwMCkg4oCTIGEgZmlneWVsbWV6dGV0w6lzIHJlanR2ZSBtYXJhZCwgZ29tYiBsZXRpbHR2YS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndG9nZ2xlRW5hYmxlU2VuZCBBSkFYIGVycm9yOicsIHhoci5zdGF0dXMsIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICQoJy5pbnZhbGlkRGVsaXZlcnlEYXRlV2FybmluZycpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLmFkZENsYXNzKCdkLW5vbmUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJPcmRlck1vZHVsRGVmYXVsdCIsImFjdGlvbkZ1bmN0aW9uIiwiRGF0YU1vZGVsT3JkZXIiLCJfRGF0YU1vZGVsIiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJwcm9kdWN0U2VsZWN0ZWQiLCJwcm9kdWN0Q29tbWVudCIsImNvbnNvbGUiLCJsb2ciLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJEYXRhTW9kZWwiLCJTdGVwcGVyIiwiT3B0cyIsImNvbXBsZXRlIiwiYXZhaWxhYmxlIiwiZW5hYmxlIiwibG9hZCIsImV4Y2x1ZGVMb2FkZWQiLCJsb2FkZWQiLCJhY3RpdmUiLCJVUkwiLCJjcmVhdGUiLCJVcmxEYXRhIiwib25BZnRlckxvYWQiLCJvbkFmdGVyQWN0aXZhdGUiLCJhdXRvQ2FsbGJhY2siLCJub3dMb2FkZWQiLCJyb290IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsImdldE9wdHMiLCJzZXRPcHRzIiwiaW5pdCIsImRlYnVnIiwiZWFjaCIsInN0ZXBOYW1lIiwiaW5jbHVkZXMiLCJzZXRDb21wbGV0ZWQiLCJzZXRFbmFibGVkIiwibG9hZFN0ZXBDb250ZW50Iiwic2V0QWN0aXZlIiwiYmluZENsaWNrQWN0aW9uIiwic3RlcENsaWNrQnV0dG9ucyIsIm9mZiIsIm9uIiwic3RlcENsaWNrIiwiYWRkQ2xhc3MiLCJ1bnNldENvbXBsZXRlZCIsInJlbW92ZUNsYXNzIiwiYXJyYXlSZW1vdmUiLCJ1bnNldEVuYWJsZWQiLCJjb250ZW50cyIsInVud3JhcCIsInN0ZXBJdGVtIiwiaHRtbCIsImFkZEVuYWJsZWQiLCJwdXNoIiwiYWRkQ29tcGxldGVkIiwiYWpheCIsImFzeW5jIiwidHlwZSIsInVybCIsImNhY2hlIiwic3VjY2VzcyIsInJlc3VsdCIsImNvbnRhaW5lciIsImNhcGl0YWxpemUiLCJpbkFycmF5IiwiY2xlYXJMb2FkZWQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInNldEFjdGl2ZUZpbmlzaCIsInNob3ciLCJoaWRlIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJPcmRlck1vZHVsZSIsInRlc3RNb2RlIiwibmVlZFN0ZXBwZXIiLCJDU1NTZWxlY3RvckZvcm0iLCJkZWZhdWx0RGVsaXZlcnlEYXRlIiwiZGF0YVN5bmNQYXVzZVRpbWUiLCJ0b2tlbiIsImdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCIsImNoZWNrUmVhZHlUb1NlbmQiLCJpbmRleCIsImVkaXQiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJ0b2dnbGVGYXZvcml0ZXMiLCJQdWJsaWNWYXIiLCJQdWJsaWNWYXIyIiwiQXBpVG9rZW4iLCJPcmRlciIsInZpZXdJbmljaWFsaXplZCIsImNsaWNrT3JkZXJFZGl0IiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsIkFQUCIsImxvYWRNYWluQ29udGVudCIsImFmdGVyT3JkZXJEZWxldGVkIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiYWpheERhdGEiLCJfdG9rZW4iLCJtZXRob2QiLCJpbml0Vmlld09yZGVyU2VsZWN0IiwiYWN0aW9uIiwib3JkZXJJZCIsImNsb3Nlc3QiLCJmaW5kIiwidGV4dCIsImluaXRTdGVwcGVyIiwiZ2V0RGF0YSIsInNldERlbGl2ZXJ5RGF0ZSIsInNldFN1cHBsaWVyIiwidW5FbmFibGVkIiwidmFsdWUiLCJzdGVwQWN0aXZlIiwic3RlcENvbXBsZXRlIiwic3RlcEVuYWJsZSIsInN0ZXBPbkFmdGVyQWN0aXZhdGUiLCJhdmFsYWlibGVTdGVwcyIsInN0ZXBVcmxEYXRhIiwic3RlcEF1dG9DYWxsYmFjayIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwiZXJyIiwiZSIsImYiLCJzdXBwbGllcklkIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluaXRPcmRlciIsInN1cHBsaWVyTmFtZSIsInNldERhdGEiLCJkYXRlVGV4dCIsImRhdGVUZXh0VG8iLCJkYXRlVGV4dEh1bWFuIiwicmVwbGFjZUFsbCIsImxlbmd0aCIsInZhbCIsInNldFN1cHBsaWVyQ29tcGxldGVkIiwiaW5pdFZpZXdQYXJhbWV0ZXIiLCJhZnRlck9yZGVyU2V0U3VwcGxpZXJPayIsInN1cHBsaWVyIiwiSU5GTyIsImluaXRWaWV3U3VwcGxpZXIiLCJzdG9yZVR5cGUiLCJXQVJOSU5HIiwiY2hlY2tDb250YWN0TmFtZUZpZWxkIiwibm9kZSIsInNlbmRPcmRlckRhdGFUb1NlcnZlciIsInVwZGF0ZVR5cGUiLCJjYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJhamF4TWV0aG9kIiwiX21ldGhvZCIsImpzb25Ub0Zvcm1EYXRhIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImVycm9yIiwieGhyIiwiYWpheE9wdGlvbnMiLCJ0aHJvd25FcnJvciIsImFqYXhFcnJvckhhbmRsZXIiLCJyZXNwb25zZUpTT04iLCJhZnRlck9yZGVyU2V0UGFyYW1ldGVyT2siLCJzZWxlY3RDdXJyZW50V2VlayIsIndlZWtIb3ZlciIsIndlZWtIb3ZlclNsb3ciLCJzZXRUaW1lb3V0IiwiaW5pdERhdGVQaWNrZXIiLCJzdGFydERhdGUiLCJEYXRlIiwiZW5kRGF0ZSIsImRhdGVwaWNrZXIiLCJzaG93T3RoZXJNb250aHMiLCJzZWxlY3RPdGhlck1vbnRocyIsInNob3dXZWVrIiwiZGF0ZUZvcm1hdCIsImZpcnN0RGF5IiwibWluRGF0ZSIsImFmdGVyU2hvdyIsImluc3QiLCJvblNlbGVjdCIsImRhdGUiLCJnZXRNb25kYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldERheSIsImZvcm1hdERhdGUiLCJiZWZvcmVTaG93IiwiZ3JvdXAiLCJncm91cEVuZCIsImJlZm9yZVNob3dEYXkiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJjc3NDbGFzcyIsIm9uQ2hhbmdlTW9udGhZZWFyIiwieWVhciIsIm1vbnRoIiwiYXZhaWxhYmxlRGF0ZXMiLCJuZXh0RGVsaXZlcnlEYXRlIiwiaGFzRGVsaXZlcnlDb25zdHJhaW50IiwiaG9saWRheXMiLCJ3b3JraW5nRGF5cyIsImRhdGVwaWNrZXJJbnB1dCIsImNhbGVuZGFyVXJsIiwicHJvZml0Q2VudGVySWQiLCJvcmRlckRhdGVUaW1lIiwidG9JU09TdHJpbmciLCJtYXAiLCJoIiwiZGVzY3JpcHRpb24iLCJ3IiwiZGF0ZXBpY2tlck9wdHMiLCJkYXRlU3RyIiwiaG9saWRheUVudHJ5Iiwid29ya2luZ0RheUVudHJ5IiwiaXNEZWxpdmVyeSIsImNzc0NsYXNzZXMiLCJ0b29sdGlwIiwic2VsZWN0YWJsZSIsImpvaW4iLCJjYWxsQ2hhbmdlT3JkZXJUeXBlIiwiY2xpY2siLCJzZWxlY3QyIiwicHJvcCIsInNldERhdGUiLCJzdWJtaXQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29udGFjdE5hbWUiLCJub3RlIiwib3JkZXJUeXBlIiwiZGVsaXZlcnlEYXRlIiwiZGVsaXZlcnlBZGRyZXNzSWQiLCJkZWxpdmVyeUFkZHJlc3MiLCJjdXN0b21Ob3RpZmljYXRpb25FbWFpbCIsImJsYW5rIiwic2V0UGFyYW1ldGVyQ29tcGxldGVkIiwiYmluZFJvd0Zhdm9yaXRlc0FjdGlvbiIsInByb2R1Y3RJZCIsImJ1dHRvbiIsInJlc3BvbnNlIiwiYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uIiwiY29tbWVudCIsInF1ZXVlQWpheCIsIm5vdyIsInN5bmNPcmRlckRhdGFUb1NlcnZlciIsInByb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyIiwiZCIsInRlbXBsYXRlRGF0YSIsIl90eXBlb2YiLCJmYXZvcml0ZXMiLCJidG5GYXZvcml0ZXNDbGFzcyIsInRlbXBsYXRlIiwid2Vla2x5IiwiaXRlbVF1YW50aXR5Iiwib2xkVGFncyIsIk11c3RhY2hlIiwidGFncyIsInNwZWNpZmljYXRpb25DbGFzcyIsInBpY3R1cmVJbWciLCJwaWN0dXJlQ2xhc3MiLCJyZW5kZXIiLCJzZXREYXRhdGFibGVIZWFkZXJUZXh0IiwiZ2V0VHJlZVBhdGhOYW1lIiwicmVzIiwiaXRlbXMiLCJwYXJlbnRzIiwidG9BcnJheSIsInNoaWZ0IiwicmV2ZXJzZSIsImNoaWxkcmVuIiwic2VsZWN0ZWRQcm9kdWN0R3JvdXAiLCJkYXRhVGFibGVTZWFyY2hTdHIiLCJkYXRhVGFibGVTZWFyY2hLcmVsIiwic2VhcmNoUHJvZHVjdEJ5U3RyaW5nIiwiZmlsdGVyU3RyIiwiRGF0YVRhYmxlIiwicmVsb2FkIiwiY2xpY2tTZWFyY2hQcm9kdWN0IiwiY2xpY2tGYXZvcml0ZXNQcm9kdWN0IiwicGFyZW50IiwidG9nZ2xlQ2xhc3MiLCJjbGlja09mdGVuUHJvZHVjdCIsImNsaWNrU3BlY2lhbE9mZmVyIiwiY2xpY2tTcGVjaWFsQ2FydCIsImNsaWNrTGFzdFByb2R1Y3QiLCJjbGlja1dlZWtseVByb2R1Y3QiLCJjbGlja0tyZWxQcm9kdWN0IiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIiwiY29sdW1uRGF0YSIsImFjdGlvbkNvbHVtbiIsInJvdyIsInN0b2NrX3N0YXR1cyIsImdldERhdGF0YWJsZXMiLCJ0YWJsZSIsImxhbmd1YWdlIiwic2VhcmNoU3RyIiwia3JlbCIsImdyb3VwSWQiLCJidXR0b25zIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCIsImZpbHRlciIsImlucHV0U3Bpbm5lciIsImJ1dHRvbnNXaWR0aCIsImdyb3VwQ2xhc3MiLCJidXR0b25zQ2xhc3MiLCJiaW5kV2Vha1VzZXJIZWxwZXIiLCJxdWFudGl0eSIsInBhcnNlRmxvYXQiLCJyb3dEYXRhIiwib3JkZXJJdGVtc0NoYW5nZSIsInF1YW50aXR5Q3VycmVudCIsInRyaWdnZXIiLCJpbml0Vmlld1Byb2R1Y3RTZWxlY3QiLCJmdW5jdGlvbk5hbWUiLCJjaGVja0RlbGl2ZXJ5RGF0ZVRvYXN0Iiwid2hpY2giLCJrZXkiLCJnZXRUaW1lIiwiZGF0YVRhYmxlIiwidHIiLCJjaGlsZCIsImlzU2hvd24iLCJiaW5kUHJvZHVjdERldGFpbHNBY3Rpb24iLCJiaW5kT3JkZXJJdGVtV2Vla1F1YW50aXR5IiwiYWN0dWFsSXRlbSIsImZvY3VzIiwicm93Tm9kZSIsInByZXYiLCJhZnRlclN5bmNPcmRlckRhdGFUb1NlcnZlciIsImkiLCJzeW5jRG9pbmciLCJJdGVtRGF0YSIsImRheUluZGV4IiwiaXNOYU4iLCJwcm9kdWN0U2VsZWN0ZWRJdGVtIiwiaW5pdFZpZXdJbnZvaWNlIiwiT2JqZWN0Iiwia2V5cyIsInN0eWxlU3RyIiwicHJpbnQiLCJuZXdXaW4iLCJvcGVuIiwiZG9jdW1lbnQiLCJ3cml0ZSIsImNsb25lIiwicmVtb3ZlIiwiY2xvc2UiLCJyZXNldE9yZGVyIiwiYWZ0ZXJPcmRlclNlbmRPayIsInJldEhUTUwiLCJhZnRlck9yZGVyU2VuZEVycm9yIiwiZXJyb3JDb2RlIiwic2hvd0ludmFsaWREZWxpdmVyeURhdGUiLCJzdWdnZXN0ZWREZWxpdmVyeURhdGUiLCJ3aHkiLCJzdWdnZXN0ZWQiLCJzdWdnZXN0ZWRIdW1hbiIsImFwcHJvdmVTdWdnZXN0ZWREZWxpdmVyeURhdGUiLCJpbml0Vmlld1NlbmQiLCJ0b2dnbGVFbmFibGVTZW5kIiwidGVzdE1vZGVTZW5kIiwiaW52b2ljZSIsInNlbmQiLCJyZWFkeVRvU2VuZCIsInJlc3BvbnNlVGV4dCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/order.js\n\n}"); +eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nwindow.OrderModulDefault = {\n actionFunction: function actionFunction() {}\n};\nvar DataModelOrder = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function DataModelOrder(data, options) {\n var _this;\n _classCallCheck(this, DataModelOrder);\n _this = _callSuper(this, DataModelOrder, [data, options]);\n if (typeof _this.productSelected === \"undefined\") {\n _this.productSelected = {};\n }\n if (typeof _this.productComment === \"undefined\") {\n _this.productComment = {};\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(DataModelOrder, _DataModel);\n return _createClass(DataModelOrder);\n}(DataModel);\n;\nwindow.DataModelOrder = DataModelOrder;\nwindow.Stepper = function () {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n complete: ['supplier'],\n available: ['supplier', 'parameter', 'productSelect', 'invoice', 'send'],\n enable: ['supplier', 'invoice'],\n load: [],\n excludeLoaded: ['invoice', 'send'],\n loaded: [],\n active: false,\n URL: {\n create: ''\n },\n UrlData: false,\n onAfterLoad: function onAfterLoad() {},\n onAfterActivate: function onAfterActivate() {},\n autoCallback: {\n 'invoice': {\n onAfterActivate: function onAfterActivate() {}\n },\n 'send': {\n onAfterActivate: function onAfterActivate() {}\n }\n },\n nowLoaded: false\n };\n var root = this;\n /*\n * Constructor\n */\n this.construct = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.init = function (options) {\n $.extend(Opts, options);\n debug(Opts);\n $('.step').each(function () {\n var stepName = $(this).data('stepname');\n if (Opts.complete.includes(stepName)) {\n root.setCompleted(stepName);\n }\n if (Opts.enable.includes(stepName)) {\n root.setEnabled(stepName);\n }\n if (Opts.load.includes(stepName)) {\n root.loadStepContent(stepName);\n }\n if (Opts.active === stepName) {\n root.setActive(stepName);\n }\n });\n root.bindClickAction();\n };\n this.bindClickAction = function () {\n var stepClickButtons = $('.stepClick');\n stepClickButtons.off('click');\n stepClickButtons.on('click', root.stepClick);\n };\n this.setCompleted = function (stepName) {\n console.log(stepName + ' completed');\n $('.step[data-stepName=\"' + stepName + '\"]').addClass('completed');\n };\n this.unsetCompleted = function (stepName) {\n console.log(stepName + ' Uncompleted');\n $('.step[data-stepName=\"' + stepName + '\"]').removeClass('completed');\n Opts.complete = arrayRemove(Opts.complete, stepName);\n };\n this.unsetEnabled = function (stepName) {\n console.log(stepName + ' Un enabled');\n $('.click' + stepName).contents().unwrap();\n Opts.enable = arrayRemove(Opts.enable, stepName);\n };\n this.setEnabled = function (stepName) {\n console.log(stepName + ' enabled');\n var stepItem = $('.step[data-stepName=\"' + stepName + '\"]');\n stepItem.html('' + stepItem.html() + '');\n root.bindClickAction();\n //$('.stepClick').click(root.stepClick);\n };\n this.addEnabled = function (stepName) {\n if (!Opts.enable.includes(stepName)) {\n Opts.enable.push(stepName);\n }\n root.setEnabled(stepName);\n };\n this.addCompleted = function (stepName) {\n if (!Opts.complete.includes(stepName)) {\n Opts.complete.push(stepName);\n }\n root.setCompleted(stepName);\n root.bindClickAction();\n };\n this.loadStepContent = function (stepName) {\n var data = {\n 'type': stepName\n };\n $.extend(data, Opts.UrlData);\n $.ajax({\n async: true,\n type: \"GET\",\n url: Opts.URL.create,\n data: data,\n cache: false,\n success: function success(result) {\n var container = $('.SC' + stepName.capitalize());\n if ($.inArray(stepName, Opts.excludeLoaded) == -1) {\n Opts.loaded.push(stepName);\n } else {\n console.log('excluded View');\n }\n container.html(result);\n if (Opts.nowLoaded) {\n Opts.nowLoaded(stepName);\n }\n Opts.onAfterLoad();\n }\n });\n };\n this.clearLoaded = function () {\n Opts.loaded = ['supplier'];\n $('.stepContainer').each(function () {\n /*\n console.log(this.classList);\n console.log(this.classList.contains('SCSupplier'));\n console.log($(this).attr('class'));\n */\n if (!this.classList.contains('SCSupplier')) {\n $(this).html('');\n }\n });\n };\n this.setActiveFinish = function (stepName) {\n var container = $('.SC' + stepName.capitalize());\n if (stepName === 'productSelect') {\n $('.containerStepper').addClass('activeSideBar');\n } else {\n $('.containerStepper').removeClass('activeSideBar');\n }\n debug('setActiveFinish show:' + stepName);\n container.show();\n Opts.nowLoaded = false;\n root.active = stepName;\n Opts.onAfterActivate();\n if (typeof Opts.autoCallback[stepName] !== 'undefined') {\n Opts.autoCallback[stepName].onAfterActivate();\n }\n };\n this.setActive = function (stepName) {\n $('.stepContainer').hide();\n if (!Opts.loaded.includes(stepName)) {\n root.loadStepContent(stepName);\n Opts.nowLoaded = this.setActiveFinish;\n } else {\n this.setActiveFinish(stepName);\n }\n };\n this.stepClick = function (event) {\n event.preventDefault();\n var stepName = $(event.currentTarget).data('stepname');\n console.log('setActive:' + stepName);\n root.setActive(stepName);\n };\n};\nwindow.OrderModule = function () {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n testMode: false,\n needStepper: true,\n CSSSelectorForm: '.orderParameterForm',\n defaultDeliveryDate: '',\n dataSyncPauseTime: 500,\n token: null,\n URL: {\n root: null,\n getDataTableContentProductList: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null,\n toggleFavorites: null\n }\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var Order = null;\n var root = this;\n var viewInicialized = [];\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.clickOrderEdit = function (data) {\n debug('clickEdit');\n debug(data);\n var ajaxUrl = Opts.URL.edit.replace('%id%', data.id);\n APP.loadMainContent(ajaxUrl);\n /* let ajaxData={};\n ajaxData._token=Opts.token;\n $.extend(ajaxData,Order);\n let ajaxUrl=Opts.URL.edit.replace('%id%',data.id);\n $.ajax({\n url: ajaxUrl,\n method:'GET',\n data:ajaxData,\n success:function (response) {\n if(response.success){\n let orderData=response.data;\n orderData.supplierId=orderData.supplier_id;\n delete(orderData.supplier_id);\n root.initOrder(orderData);\n root.initStepper();\n //root.afterOrderSetSupplierOk(data.data);\n }\n }\n });*/\n };\n this.afterOrderDeleted = function (data) {\n if (data.success == true) {\n debug('Order delete success');\n APP.loadMainContent(Opts.URL.index);\n } else {\n Toast.create({\n title: \"Error deleted !\",\n message: '',\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n }\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickOrderDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: root.afterOrderDeleted\n //error:ajaxErrorHandler\n });\n };\n this.initViewOrderSelect = function () {\n debug('called initViewOrderSelect ');\n $('.ordersSelectTable button').off('click');\n $('.ordersSelectTable button').on('click', function () {\n var action = $(this).data('action');\n var orderId = $($(this).closest('tr')[0]).data('orderid');\n debug(action);\n debug(orderId);\n if (action == 'delete') {\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a megrendelést?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: orderId\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n } else {\n root.clickOrderEdit({\n id: orderId\n });\n }\n });\n $('.buttonNew').off('click');\n $('.buttonNew').on('click', function () {\n APP.loadMainContent(Opts.URL.index, 'force=true');\n });\n };\n this.initStepper = function () {\n debug(Order.getData());\n viewInicialized = [];\n $('.statusNamePlace').text('Nincs elküldve');\n $('.statusNamePlace').addClass('statusBlink');\n root.setDeliveryDate('-');\n root.setSupplier('-');\n var unEnabled = ['parameter', 'productSelect', 'invoice', 'send'];\n $.each(unEnabled, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n debug(root.Stepper.getOpts()['available']);\n debug(Order.getData()['orderStatus']);\n var stepActive = 'supplier';\n var stepComplete = ['supplier'];\n var stepEnable = [];\n var stepOnAfterActivate = function stepOnAfterActivate() {};\n var avalaibleSteps = root.Stepper.getOpts()['available'];\n var stepUrlData = false;\n var stepAutoCallback = [];\n var _iterator = _createForOfIteratorHelper(avalaibleSteps),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _stepName = _step.value;\n stepOnAfterActivate = this['initView' + _stepName.capitalize()];\n var item = {};\n item['onAfterActivate'] = stepOnAfterActivate;\n stepAutoCallback[_stepName] = item;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n debug(stepAutoCallback);\n debug(Order.getData()['id']);\n if (Order.getData()['id'] > 0) {\n debug('hajra');\n debug(Order.getData());\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n /*\n @todo: weekly-t beallitani\n */\n }\n if (Order.getData()['supplierName']) {\n root.setSupplier(Order.getData()['supplierName']);\n }\n stepUrlData = {\n 'supplierId': Order.supplierId,\n id: Order.id\n };\n var _iterator2 = _createForOfIteratorHelper(avalaibleSteps),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var stepName = _step2.value;\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if (Order.getData()['orderStatus'] == stepName) {\n stepActive = stepName;\n // Az invoice és send lépéseknél az autoCallback hívja meg az initView*-ot,\n // ezért a globális onAfterActivate-et üresen hagyjuk – különben kétszer hívódna.\n if (stepName !== 'invoice' && stepName !== 'send') {\n stepOnAfterActivate = this['initView' + stepName.capitalize()];\n } else {\n stepOnAfterActivate = function stepOnAfterActivate() {};\n }\n break;\n }\n }\n\n /*\n //refactored for loop\n var BreakException = {};\n try {\n avalaibleSteps.forEach(function(stepName) {\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if(Order.getData()['orderStatus']==stepName){\n stepActive=stepName;\n throw BreakException;\n }\n \n });\n } catch (e) {\n if (e !== BreakException) throw e;\n }*/\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n root.Stepper.init({\n complete: stepComplete,\n enable: stepEnable,\n loaded: [],\n active: stepActive,\n URL: {\n create: Opts.URL.create\n },\n UrlData: stepUrlData,\n onAfterActivate: stepOnAfterActivate,\n autoCallback: stepAutoCallback\n /*{\n invoice: {\n onAfterActivate:root.initViewInvoice\n },\n send: {\n onAfterActivate:root.initViewSend\n },\n }*/\n });\n };\n this.initOrder = function (data) {\n Order = new DataModelOrder(data);\n };\n this.init = function (options) {\n debug('OrderModul init called');\n $.extend(Opts, window.OrderModulDefault, options);\n Order = new DataModelOrder();\n if (Opts.needStepper) {\n if (typeof this.Stepper == 'undefined') {\n this.Stepper = new Stepper();\n }\n }\n if (Opts.testMode) {\n return root.testMode();\n }\n };\n this.setSupplier = function (supplierName, supplierId) {\n if (supplierName) {\n $('.supplierNamePlace').text(supplierName);\n }\n if (supplierId) {\n Order.setData({\n supplierId: supplierId\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': supplierId\n }\n });\n }\n };\n this.setDeliveryDate = function (dateText, dateTextTo) {\n var dateTextHuman = dateText.replaceAll('-', '.') + '.';\n if (dateTextHuman.length < 5) {\n $('.deliveryDatePlace').text(dateText);\n return;\n }\n if (dateTextTo) {\n dateTextHuman += ' - ' + dateTextTo.replaceAll('-', '.') + '.';\n }\n $(Opts.CSSSelectorForm + ' .selectedDateText').text(dateTextHuman);\n $('.deliveryDatePlace').text(dateTextHuman);\n $(Opts.CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n };\n this.getData = function () {\n return Order;\n };\n this.setSupplierCompleted = function () {\n console.log('bingo');\n root.initViewParameter();\n };\n this.afterOrderSetSupplierOk = function (data) {\n Toast.create({\n title: \"Supplier selected !\",\n message: data.supplier.name,\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n root.setSupplier(data.supplier.name, data.supplier.id);\n Order.setData({\n id: data.id\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted})\n root.Stepper.setEnabled('parameter');\n root.Stepper.addCompleted('parameter');\n root.Stepper.setCompleted('parameter');\n root.Stepper.setActive('parameter');\n };\n this.initViewSupplier = function () {\n debug('call initViewSupplier');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.supplierItem').off('click');\n $('.supplierItem').on('click', function (event) {\n console.log(Order.getData());\n event.preventDefault();\n var supplierId = $(event.currentTarget).data('id');\n var supplierName = $(event.currentTarget).find('h5.card-title').text();\n if (typeof Order.supplierId == 'undefined') {\n //new order\n\n var ajaxData = {};\n ajaxData._token = Opts.token;\n ajaxData.supplierId = supplierId;\n ajaxData.storeType = 'supplierSelect';\n $.extend(ajaxData, Order);\n $.ajax({\n url: Opts.URL.store,\n method: 'POST',\n data: ajaxData,\n success: function success(data) {\n if (data.success) {\n root.afterOrderSetSupplierOk(data.data);\n }\n }\n });\n //Order.setData({supplierId:supplierId});\n } else {\n //ide kellene egy jo kis kerdes\n if (Order.supplierId != supplierId) {\n Toast.create({\n title: \"Supplier change to!\",\n message: supplierName,\n status: TOAST_STATUS.WARNING,\n timeout: 5000\n });\n root.Stepper.clearLoaded();\n Order = new DataModelOrder();\n //Order.setData({supplierId:supplierId});\n }\n }\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n //$('.supplierNamePlace').text(supplierName);\n // removed by dead control flow\n\n // removed by dead control flow\n\n //@todo:ide kell egy mentes!\n //@todo:mentes eredemenyekeppen lehet valtani\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.checkContactNameField = function () {\n var CSSSelectorForm = '.orderParameterForm';\n var node = $(CSSSelectorForm + ' input[name=contactName]');\n if (node.val().length < 2) {\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n } else {\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n };\n this.sendOrderDataToServer = function (updateType, callback, errorCallback) {\n var ajaxData = {};\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (Order.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', Order.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData._method = 'PUT';\n }\n ajaxData._token = Opts.token;\n ajaxData.updateType = updateType;\n $.extend(ajaxData, Order);\n debug(Order);\n debug(ajaxData);\n debug('ajaxUrl:' + ajaxUrl);\n ajaxData = jsonToFormData(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n success: function success(data) {\n debug('ajax returned data');\n debug(data);\n if (data.success) {\n //root.afterOrderSetSupplierOk(data.data);\n callback(data);\n }\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n ajaxErrorHandler(xhr, ajaxOptions, thrownError);\n if (typeof errorCallback != 'undefined') {\n errorCallback(xhr.responseJSON);\n }\n }\n });\n };\n this.afterOrderSetParameterOk = function (data) {\n debug('called afterOrderSetParameterOk');\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n 'id': Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setParameterCompleted})\n root.Stepper.setEnabled('productSelect');\n root.Stepper.addCompleted('productSelect');\n root.Stepper.setCompleted('productSelect');\n root.Stepper.setActive('productSelect');\n };\n this.selectCurrentWeek = function () {\n console.error('selectCurrentWeek');\n console.error($('.ui-datepicker').find('.ui-datepicker-current-day a'));\n $('.ui-datepicker').find('.ui-datepicker-current-selected-weekday a').addClass('ui-state-active');\n };\n this.weekHover = function () {\n console.error('hover Active');\n $('.ui-datepicker-calendar tr').off('mousemove');\n $('.ui-datepicker-calendar tr').off('mouseleave');\n $('.ui-datepicker-calendar tr').on('mousemove', function () {\n $(this).find('td a').addClass('ui-state-hover');\n });\n $('.ui-datepicker-calendar tr').on('mouseleave', function () {\n $(this).find('td a').removeClass('ui-state-hover');\n });\n };\n this.weekHoverSlow = function () {\n console.error('weekHoverSlow');\n if ($('.ui-datepicker-calendar tr').length < 1) {\n setTimeout(root.weekHoverSlow, 1);\n return;\n }\n root.weekHover();\n };\n this.initDatePicker = function (type) {\n console.error('asdasdadad');\n console.log('tipus' + type);\n var CSSSelectorForm = '.orderParameterForm';\n var startDate = new Date('1900-01-01');\n var endDate = new Date('1900-01-02');\n $(CSSSelectorForm + ' .datePicker').datepicker(\"destroy\");\n if (type == 'weekly') {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n showOtherMonths: true,\n selectOtherMonths: true,\n showWeek: true,\n dateFormat: 'yy-mm-dd',\n firstDay: 1,\n minDate: new Date(),\n afterShow: function afterShow(dateText, inst) {\n root.weekHover();\n root.selectCurrentWeek();\n },\n onSelect: function onSelect(dateText, inst) {\n var date = $(this).datepicker('getDate');\n startDate = new getMonday(date);\n endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7);\n root.setDeliveryDate($.datepicker.formatDate('yy-mm-dd', startDate), $.datepicker.formatDate('yy-mm-dd', endDate));\n },\n beforeShow: function beforeShow() {\n console.group('beforeShow');\n console.log(startDate);\n console.log(endDate);\n //root.weekHoverSlow();\n console.groupEnd();\n },\n beforeShowDay: function beforeShowDay(date) {\n console.group('beforeShowDay');\n console.log(date.toLocaleDateString('hu-Hu'));\n var cssClass = '';\n if (date >= startDate && date <= endDate) {\n console.error(date.toLocaleDateString('hu-Hu'));\n cssClass = 'ui-datepicker-current-selected-weekday';\n //cssClass = 'ui-state-active';\n }\n console.log(cssClass);\n console.groupEnd();\n return [true, cssClass];\n },\n onChangeMonthYear: function onChangeMonthYear(year, month, inst) {\n //root.selectCurrentWeek();\n }\n });\n } else {\n // Szállítási korlátozás adatok betöltése (csak ha hasDeliveryConstraint = true)\n var availableDates = [];\n var nextDeliveryDate = null;\n var hasDeliveryConstraint = false;\n var holidays = [];\n var workingDays = [];\n var datepickerInput = $(CSSSelectorForm + ' .datePicker');\n var calendarUrl = datepickerInput.data('delivery-calendar-url');\n var supplierId = datepickerInput.data('supplier-id');\n var profitCenterId = datepickerInput.data('profit-center-id');\n if (calendarUrl && supplierId && profitCenterId) {\n $.ajax({\n url: calendarUrl,\n data: {\n supplierId: supplierId,\n profitCenterId: profitCenterId,\n orderDateTime: new Date().toISOString()\n },\n async: false,\n success: function success(data) {\n hasDeliveryConstraint = data.hasDeliveryConstraint || false;\n // Ünnepnapok és áthelyezett munkanapok – mindig betöltjük\n holidays = (data.holidays || []).map(function (h) {\n return {\n date: h.date,\n description: h.description\n };\n });\n workingDays = (data.workingDays || []).map(function (w) {\n return {\n date: w.date,\n description: w.description\n };\n });\n if (hasDeliveryConstraint) {\n availableDates = data.availableDates || [];\n nextDeliveryDate = data.nextDeliveryDate || null;\n }\n // Ha nincs szállítási korlátozás, az availableDates és nextDeliveryDate\n // üres marad – a datepicker az eredeti módon viselkedik\n }\n });\n }\n if (hasDeliveryConstraint && nextDeliveryDate) {\n // Következő szállítási nap beállítása alapértelmezettként\n root.setDeliveryDate(nextDeliveryDate);\n $(CSSSelectorForm + ' .selectedDateText').text(nextDeliveryDate);\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(nextDeliveryDate);\n $('.deliveryDatePlace').text(nextDeliveryDate.replaceAll('-', '.') + '.');\n }\n\n // Szín jelmagyarázat megjelenítése csak szállítási korlátozás esetén\n if (hasDeliveryConstraint) {\n $('#deliveryDateLegend').show();\n }\n var datepickerOpts = {\n dateFormat: 'yy-mm-dd',\n minDate: hasDeliveryConstraint && nextDeliveryDate ? new Date(nextDeliveryDate) : new Date(),\n onSelect: function onSelect(dateText) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n }\n };\n\n // beforeShowDay: mindig aktív ha van munkanaptár adat vagy hasDeliveryConstraint\n datepickerOpts.beforeShowDay = function (date) {\n var dateStr = $.datepicker.formatDate('yy-mm-dd', date);\n var holidayEntry = holidays.find(function (h) {\n return h.date === dateStr;\n });\n var workingDayEntry = workingDays.find(function (w) {\n return w.date === dateStr;\n });\n var isDelivery = hasDeliveryConstraint && availableDates.includes(dateStr);\n var cssClasses = [];\n var tooltip = '';\n var selectable = true;\n if (holidayEntry) {\n cssClasses.push('work-calendar-holiday');\n tooltip = 'Ünnepnap' + (holidayEntry.description ? ': ' + holidayEntry.description : '');\n } else if (workingDayEntry) {\n cssClasses.push('work-calendar-working-day');\n tooltip = 'Áthelyezett munkanap' + (workingDayEntry.description ? ': ' + workingDayEntry.description : '');\n }\n if (hasDeliveryConstraint) {\n if (isDelivery) {\n cssClasses.push('delivery-day-available');\n if (!tooltip) tooltip = 'Szállítási nap';\n } else {\n cssClasses.push('delivery-day-unavailable');\n if (!tooltip) tooltip = 'Nem szállítási nap';\n selectable = false;\n }\n }\n // Ha ünnepnap és hasDeliveryConstraint nincs bekapcsolva, az ünnepnap is letiltandó\n if (holidayEntry && !hasDeliveryConstraint) {\n selectable = false;\n }\n return [selectable, cssClasses.join(' '), tooltip];\n };\n $(CSSSelectorForm + ' .datePicker').datepicker(datepickerOpts);\n }\n };\n this.callChangeOrderType = function () {\n console.log(this);\n console.log(this.value);\n root.initDatePicker(this.value);\n //enum('daily', 'weekly')\n /*let CSSSelectorForm='.orderParameterForm';\n let node=$(CSSSelectorForm+' input[name=contactName]');\n if(node.val().length<2){\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n }else{\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n */\n };\n this.initViewParameter = function () {\n debug('call initViewParameter');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n var CSSSelectorForm = '.orderParameterForm';\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' input[name=contactName]').off('blur');\n $(CSSSelectorForm + ' input[name=contactName]').off('keyup');\n $(CSSSelectorForm + ' input[name=contactName]').on('blur', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=contactName]').on('keyup', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=orderType]').off('change');\n $(CSSSelectorForm + ' input[name=orderType]').on('change', root.callChangeOrderType);\n $(CSSSelectorForm + ' .orderParameterNextButton').off('click');\n if (Order.getData()['id'] > 0) {\n if (Order.getData()['orderType'] == 'weekly') {\n root.initDatePicker(Order.getData()['orderType']);\n $(CSSSelectorForm + \" input[name=orderType][value=\" + Order.getData()['orderType'] + \"]\").prop('checked', true);\n var endDate = new Date(Order.getData()['deliveryDate']);\n endDate.setDate(endDate.getDate() + 6);\n root.setDeliveryDate(Order.getData()['deliveryDate'], $.datepicker.formatDate('yy-mm-dd', endDate));\n root.initDatePicker('weekly');\n } else {\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n }\n root.initDatePicker('daily');\n }\n if (Order.getData()['contactName']) {\n $(CSSSelectorForm + ' input[name=contactName]').val(Order.getData()['contactName']);\n }\n if (Order.getData()['note']) {\n $(CSSSelectorForm + ' textarea[name=note]').val(Order.getData()['note']);\n }\n if (Order.getData()['deliveryAddressId']) {\n console.log($(CSSSelectorForm + ' select[name=deliveryAddressId]'));\n $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(Order.getData()['deliveryAddressId']);\n }\n if (Order.getData()['customNotificationEmail']) {\n console.log($(CSSSelectorForm + ' select[name=customNotificationEmail]'));\n $(CSSSelectorForm + ' select[name=customNotificationEmail]').val(Order.getData()['customNotificationEmail']);\n }\n } else {\n root.initDatePicker('daily');\n }\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' .orderParameterCustomNotificationEmail').select2({}).show();\n $(CSSSelectorForm).submit(function (event) {\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n debug('validaton false');\n event.stopPropagation();\n return;\n } else {\n debug('validaton ok');\n //do your ajax submition here\n }\n $('.deliveryDatePlace').text($(CSSSelectorForm + ' input[name=deliveryDate]').val().replaceAll('-', '.') + '.');\n Order.setData({\n contactName: $(CSSSelectorForm + ' input[name=contactName]').val(),\n note: $(CSSSelectorForm + ' textarea[name=note]').val(),\n orderType: $(CSSSelectorForm + ' input:checked[name=orderType]').val(),\n deliveryDate: $(CSSSelectorForm + ' input[name=deliveryDate]').val(),\n deliveryAddressId: $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(),\n deliveryAddress: $(CSSSelectorForm + ' select[name=deliveryAddress]').val(),\n customNotificationEmail: $(CSSSelectorForm + ' select[name=customNotificationEmail]').val()\n });\n console.group('parameter form submit');\n console.error($(CSSSelectorForm + ' input:checked[name=orderType]').val());\n console.error($(CSSSelectorForm + ' input[name=deliveryDate]').val());\n debug(Order.getData());\n console.groupEnd();\n root.sendOrderDataToServer('parameter', root.afterOrderSetParameterOk);\n });\n };\n this.blank = function () {};\n this.setParameterCompleted = function () {\n console.log('setParameterCompleted called');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n //root.initViewProductSelect()\n };\n this.bindRowFavoritesAction = function () {\n $('.buttonItemFavorites').off('click');\n $('.buttonItemFavorites').on('click', function () {\n var productId = $(this).data('id');\n console.log(productId);\n var ajaxUrl = Opts.URL.toggleFavorites.replace('%id%', productId);\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var button = this;\n console.log(ajaxUrl);\n $.ajax({\n url: ajaxUrl,\n method: 'POST',\n data: ajaxData,\n success: function success(response) {\n if (response.success) {\n if (response.status) {\n console.log('true');\n $(button).addClass('btn-warning');\n $(button).removeClass('btn-light');\n } else {\n $(button).removeClass('btn-warning');\n $(button).addClass('btn-light');\n console.log('false');\n }\n }\n }\n });\n /*\n $(this).toggleClass('btn-warning');\n $(this).toggleClass('btn-light');\n */\n });\n };\n this.bindRowDescriptionAction = function () {\n $('textarea.orderItemComment').on('change', function () {\n var comment = $(this).val();\n var productId = $(this).data('id');\n var productComment = Order.getData('productComment');\n if (productComment !== null) {\n if (typeof productComment[productId] == 'undefined' && comment.length === 0) {\n return;\n }\n if (productComment[productId] === comment) {\n return;\n }\n }\n productComment[productId] = comment;\n if (comment.length === 0) {\n delete Order.productComment[productId];\n }\n Order.productComment = productComment;\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n });\n };\n this.productSelectDatatablesRowFormatter = function (d) {\n // `d` is the original data object for the row\n /**\n @todo: felszedni es updatelni az adott termek memojat az orderban\n */\n console.group('productSelectDatatablesRowFormatter');\n console.log(d);\n var templateData = d;\n templateData.comment = '';\n // debug(Order);\n if (Order.productComment && Order.productComment !== null) {\n debug(_typeof(Order.productComment[d.id]));\n if (typeof Order.productComment[d.id] != 'undefined' && Order.productComment[d.id].length > 0) {\n templateData.comment = Order.productComment[d.id];\n }\n }\n /** @typedef {boolean} d.favorites */\n if (d.favorites === true) {\n templateData.btnFavoritesClass = 'btn-warning';\n } else {\n templateData.btnFavoritesClass = 'btn-light';\n }\n var template = $('template[data-name=\"orderProductSelectDetails\"]').html();\n templateData.weekly = false;\n if (Order.getData().orderType === 'weekly') {\n templateData.weekly = true;\n /*\n \n templateData.weeklyDay=[\n {\"index\":1,\"name\":\"Hétfő\"},\n {\"index\":2,\"name\":\"Kedd\"},\n {\"index\":3,\"name\":\"Szerda\"},\n {\"index\":4,\"name\":\"Csütörtök\"},\n {\"index\":5,\"name\":\"Péntek\"},\n {\"index\":6,\"name\":\"Szombat\"},\n {\"index\":7,\"name\":\"Vasárnap\"},\n ];\n \n templateData.weeklyDay=[\n {\"index\":2,\"name\":\"Hétfő\" },\n {\"name\":\"Kedd\"},\n {\"name\":\"Szerda\"},\n {\"name\":\"Csütörtök\"},\n {\"name\":\"Péntek\"},\n {\"name\":\"Szombat\"},\n {\"name\":\"Vasárnap\"}\n ];\n */\n }\n var productSelected = Order.getData('productSelected');\n if (typeof productSelected[d.id] != 'undefined') {\n templateData.itemQuantity = productSelected[d.id];\n }\n console.log(['templateData', templateData]);\n var oldTags = Mustache.tags;\n Mustache.tags = [\"~!\", \"!~\"];\n if (templateData['specification'] == 'false' || templateData['specification'] == false) {\n templateData.specificationClass = 'd-none';\n }\n templateData.pictureImg = '';\n if (templateData['picture'] == 'false' || templateData['picture'] == false) {\n templateData.pictureClass = 'd-none';\n } else {\n templateData.pictureImg = '';\n }\n console.log('templateData', templateData);\n //templateData['aa_specification']=false;\n var render = Mustache.render(template, templateData);\n Mustache.tags = oldTags;\n console.groupEnd();\n return render;\n /*\n solution before template\n return ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n /!*\n ''+\n ''+\n ''+\n ''+\n *!/\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n ''+\n /!*\n *!/\n '
Info:'+d.note+'
hooreyca :'+d.hooreycaId+'' +\n \n '' +\n '
Extension number:'+d.extn+'
Info:'+d.note+'
Megjegyzés:
';\n */\n };\n this.setDatatableHeaderText = function (text) {\n $('.tableHeaderText').text(text);\n };\n this.getTreePathName = function (node) {\n var res = '';\n var items = $(node).parents('li').toArray();\n items.shift();\n items.reverse();\n for (var item in items) {\n console.log($(items[item]).children('a.categoryItem'));\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n console.log(res);\n return res;\n };\n var selectedProductGroup = null;\n var dataTableSearchStr = null;\n var dataTableSearchKrel = false;\n this.searchProductByString = function (filterStr) {\n root.setDatatableHeaderText('Termékek szűrve:' + filterStr);\n dataTableSearchStr = filterStr;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSearchProduct = function () {\n debug(this);\n var filterStr = $('.sidebar-search input[name=searchValue]').val();\n debug(filterStr);\n root.searchProductByString(filterStr);\n };\n this.clickFavoritesProduct = function () {\n debug('clickFavoritesProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: kedvencek');\n dataTableSearchStr = '**favorites**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickOftenProduct = function () {\n debug('clickOftenProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: gyakran vásárolt');\n dataTableSearchStr = '**often**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialOffer = function () {\n debug('clickSpecialOffer');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: Akciós termékek');\n dataTableSearchStr = '**specialOffer**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialCart = function () {\n debug('clickSpecialCart');\n $(this).parent().parent().find(\".menuItemActive\").removeClass(\"menuItemActive\");\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: Kosár termékek');\n dataTableSearchStr = '**cart**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickLastProduct = function () {\n debug('clickLastProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: utoljára vásárolt');\n dataTableSearchStr = '**last**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickWeeklyProduct = function () {\n debug('clickWeeklyProduct');\n $(this).parent().parent().find('.menuItemActive').removeClass('menuItemActive');\n $(this).parent().toggleClass('menuItemActive');\n root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n dataTableSearchStr = '**weekly**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickKrelProduct = function () {\n debug('clickKrelProduct');\n //root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n //dataTableSearchStr='**weekly**';\n //$('.dataTableOrderProductSelect').DataTable().ajax.reload();\n $(this).parent().toggleClass('krelActive');\n dataTableSearchKrel = !dataTableSearchKrel;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.productSelectDataTableColumnDefs = function () {\n return [{\n \"width\": \"10px\",\n \"targets\": 0\n }, {\n \"className\": \"dt-left\",\n \"targets\": 1\n },\n // { \"width\": \"120px\", \"targets\": 1 },\n {\n \"width\": \"28px\",\n \"targets\": 2\n }, {\n \"width\": \"41px\",\n \"targets\": 3\n }, {\n \"width\": \"76px\",\n \"targets\": 4\n }, {\n \"width\": \"55px\",\n \"targets\": 5\n }, {\n \"width\": \"70px\",\n \"targets\": 6\n }, {\n \"width\": \"54px\",\n \"targets\": 7\n }, {\n \"width\": \"57px\",\n \"targets\": 8\n }, {\n \"width\": \"42px\",\n \"targets\": 9\n }, {\n \"width\": \"100px\",\n \"targets\": 10\n }, {\n \"className\": \"dt-center\",\n \"targets\": \"_all\"\n }];\n };\n this.productSelectDataTableColumn = function () {\n var columnData = [{\n \"className\": 'details-control',\n \"orderable\": false,\n \"data\": null,\n \"defaultContent\": ''\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"krel\"\n }, {\n \"data\": \"packing\"\n }, {\n \"data\": \"unitValue\"\n }, {\n \"data\": \"productUnit\"\n }, {\n \"data\": \"sellerUnit\"\n }, {\n \"data\": \"unitMultiplier\"\n }, {\n \"data\": \"amountUnit\"\n }, {\n \"data\": \"price\"\n }];\n var actionColumn = {\n \"className\": 'details-control2',\n \"orderable\": false,\n \"data\": null,\n \"width\": \"100px\",\n \"defaultContent\": ''\n };\n if (Order.getData('orderType') == 'daily') {\n actionColumn.render = function (data, type, row) {\n if (row.stock_status === 'out_of_stock') {\n return '';\n }\n return '';\n };\n }\n columnData.push(actionColumn);\n return columnData;\n };\n this.getDatatables = function (orderType) {\n console.error(orderType);\n var table = $('.dataTableOrderProductSelect').DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContentProductList,\n data: function data(_data) {\n _data.searchStr = dataTableSearchStr;\n _data.krel = dataTableSearchKrel;\n _data.groupId = selectedProductGroup;\n _data.supplierId = Order.supplierId;\n _data.deliveryDate = Order.deliveryDate;\n _data.orderId = Order.id;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": root.productSelectDataTableColumnDefs(),\n \"columns\": root.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n //$('td:contains(\"*\")').html('');\n $(\"td\").filter(function () {\n return $(this).text() === '*';\n }).html('');\n if (Order.getData().orderType == 'daily') {\n $(\"input[type='number'].inputNumberSpinner\").inputSpinner({\n template: '
' + '' +\n //'' +\n '' + '' + '
',\n buttonsWidth: \"0.5rem\",\n groupClass: \"\",\n // css class of the resulting input-group\n buttonsClass: \"btn-outline-secondary\"\n });\n }\n root.bindWeakUserHelper();\n /*\n ----------------------------------------------------------\n change order quantity\n */\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").off('change');\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").on('change', function (e) {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n root.orderItemsChange(rowData, quantity);\n });\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").each(function () {\n //debug('ez a function2')\n var quantity = $(this).val();\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n if (Order.productSelected[rowData.id]) {\n debug(rowData);\n debug($($(this).closest('tr').find('input[type=number]')[0]));\n debug(Order.productSelected[rowData.id]);\n var quantityCurrent = Order.productSelected[rowData.id];\n if (typeof quantityCurrent != 'string') {\n quantityCurrent += '';\n }\n $($(this).closest('tr').find('input[type=number]')[0]).val(quantityCurrent.replace(',', '.'));\n }\n });\n $(\".dataTableOrderProductSelect .details-control2 button\").off('click');\n $(\".dataTableOrderProductSelect .details-control2 button\").on('click', function () {\n // debug('.details-control2 button click ')\n // debug(this);\n $(this).parent().find('input[type=text]').trigger('change');\n });\n };\n this.initViewProductSelect = function () {\n var functionName = 'initViewProductSelect';\n console.log(functionName + ' called');\n if (viewInicialized.includes(functionName)) {\n return;\n }\n //debug(Object.getOwnPropertyNames(root));\n root.setDatatableHeaderText('');\n root.Stepper.setOpts({\n onAfterActivate: function onAfterActivate() {}\n });\n //@note: be kell kapcsolni az elonezetet\n root.Stepper.addCompleted('invoice');\n root.Stepper.addEnabled('invoice');\n\n // Érvénytelen szállítási dátum esetén Toast figyelmeztetés megjelenítése.\n root.checkDeliveryDateToast();\n var CSSSelectorForm = '.orderParameterForm';\n //console.log(Opts.URL.getDataTableContentProductList);change\n debug(CSSSelectorForm + ' .fa-search');\n $('.sidebar-search .fa-search').off('click');\n $('.sidebar-search .fa-search').on('click', root.clickSearchProduct);\n $('a.sidebar.favorites').off('click');\n $('a.sidebar.favorites').on('click', root.clickFavoritesProduct);\n $('a.sidebar.often').off('click');\n $('a.sidebar.often').on('click', root.clickOftenProduct);\n $('a.sidebar.last').off('click');\n $('a.sidebar.last').on('click', root.clickLastProduct);\n $('a.sidebar.weekly').off('click');\n $('a.sidebar.weekly').on('click', root.clickWeeklyProduct);\n $('a.sidebar.krel').off('click');\n $('a.sidebar.krel').on('click', root.clickKrelProduct);\n $('a.sidebar.specialOffer').off('click');\n $('a.sidebar.specialOffer').on('click', root.clickSpecialOffer);\n $('a.sidebar.cart').off('click');\n $('a.sidebar.cart').on('click', root.clickSpecialCart);\n $('.sidebar-search input[name=searchValue]').off('keypress');\n $('.sidebar-search input[name=searchValue]').on('keypress', function (event) {\n if (event.which == 13) {\n event.preventDefault();\n }\n if ($(this).val().length >= 2) {\n root.searchProductByString($(this).val() + event.key);\n }\n });\n $('.sidebar-wrapper a.categoryItem.categoryParent').off('click');\n $('.sidebar-wrapper a.categoryItem.categoryParent').on('click', function (e) {\n e.preventDefault();\n $(this).next('ul.subgroup-list').slideToggle(200);\n $(this).toggleClass('open');\n });\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n dataTableSearchStr = null;\n console.log(groupId);\n console.log(root.getTreePathName(this));\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\n let ajaxData={\n 'groupId':groupId,\n 'supplier_id':Order.supplierId,\n };\n //$('.dataTableOrderProductSelect').DataTable().ajax.data(ajaxData).load();\n \n */\n /*\n let ajaxUrl=Opts.URL.getDataTableContentProductList+'?groupId='+groupId+'&supplier_id='+Order.supplierId;\n $('.dataTableOrderProductSelect').DataTable().ajax.url(ajaxUrl).load();\n */\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n });\n var table = root.getDatatables(Order.getData('orderType'));\n $('.dataTableOrderProductSelect').on('init.dt', function () {\n console.log('Table initialisation complete: ' + new Date().getTime());\n }).dataTable();\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n\n //$('.dataTableOrderProductSelect').on( 'draw.dt', ).dataTable();\n\n $('.dataTableOrderProductSelect').on('xhr.dt', function () {\n debug('Table xhr complete: ' + new Date().getTime());\n }).dataTable();\n\n //$(\"input[type='number'].inputNumberSpinner\").inputSpinner();\n\n /*\n ----------------------------------------------------------\n Add event listener for opening and closing details\n */\n\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n var tr = $(this).closest('tr');\n var row = table.row(tr);\n if (row.child.isShown()) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n } else {\n // Open this row\n row.child(root.productSelectDatatablesRowFormatter(row.data())).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n });\n viewInicialized.push(functionName);\n };\n this.bindProductDetailsAction = function () {\n root.bindRowDescriptionAction();\n root.bindRowFavoritesAction();\n if (Order.getData()['orderType'] == 'weekly') {\n root.bindOrderItemWeekQuantity();\n }\n };\n this.bindWeakUserHelper = function () {\n $(\"input.inputNumberSpinner\").off(\"focus\");\n $(\"input.inputNumberSpinner\").on(\"focus\", function () {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n if (quantity === 0) {\n $(this).val('');\n }\n });\n $(\"input[type=text].inputNumberSpinner\").off(\"keypress\");\n $(\"input[type=text].inputNumberSpinner\").on(\"keypress\", function (event) {\n if (event.which == 13) {\n // console.error('enter pressed');\n var actualItem = this;\n var items = $(\"input[type=text].inputNumberSpinner\");\n items.each(function (item) {\n // console.log(this);\n if (this == actualItem) {\n // console.error(item);\n if (item + 1 <= items.length) {\n // console.error(items[item+1]);\n $(items[item + 1]).focus();\n }\n return false;\n }\n });\n }\n });\n };\n this.bindOrderItemWeekQuantity = function () {\n $(\"input.productSelectDayQuantity\").off('change');\n $(\"input.productSelectDayQuantity\").on('change', function () {\n console.log(this.name);\n console.log(this.value);\n console.log($(this).data('dayindex'));\n var rowData = null;\n var rowNode = $($(this).closest('table.orderProductSelectRowDetailsTable').closest('tr')).prev();\n rowData = $('.dataTableOrderProductSelect').DataTable().row(rowNode).data();\n console.log(rowData);\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n console.log(rowData.id);\n root.orderItemsChange(rowData, quantity, $(this).data('dayindex'));\n // root.orderItemsChange\n //orderItemsChange\n //quantity[1683][1]\n });\n };\n this.afterSyncOrderDataToServer = function (data) {\n //root.toggleEnableSend();\n //console.log('most vegzett. ennyit kiszed'+batchNum);\n for (var i = 0; i < queueAjax.length; i++) {\n console.log('shiftel');\n queueAjax.shift();\n }\n //console.log('remaining left '+queueAjax.length);\n setTimeout(function () {\n syncDoing = false;\n root.syncOrderDataToServer();\n }, Opts.dataSyncPauseTime);\n };\n var queueAjax = [];\n var syncDoing = false;\n this.syncOrderDataToServer = function () {\n //debug(queueAjax);\n if (syncDoing) {\n //debug('sync in progress....');\n return false;\n }\n if (queueAjax.length < 1) {\n return;\n }\n syncDoing = true;\n root.sendOrderDataToServer('productSelect', root.afterSyncOrderDataToServer);\n return;\n };\n this.orderItemsChange = function (ItemData, quantity, dayIndex) {\n console.log('-----------------');\n console.log(ItemData);\n console.log(quantity);\n console.log(Order.getData('productSelected'));\n console.log('-----------------');\n /*\n */\n if (isNaN(quantity)) {\n quantity = 0;\n }\n var productSelected = Order.getData('productSelected');\n console.group('orderItemsChange');\n console.log(['productSelected', productSelected]);\n console.log(['ItemData', ItemData]);\n console.log(['ItemData.id', ItemData.id]);\n console.log(['quantity', quantity]);\n console.log(['dayIndex', dayIndex]);\n console.log(productSelected[ItemData.id]);\n var productSelectedItem = productSelected[ItemData.id];\n /*\n ha 0 ertek jon es nem is volt akkor hamar kiugratjuk\n */\n if (quantity == 0) {\n console.error('quantity==0');\n if (typeof productSelectedItem == 'undefined') {\n console.error('itt lep1');\n console.groupEnd();\n return;\n }\n if (dayIndex) {\n console.log('van dayIndex');\n if (typeof productSelected[ItemData.id][dayIndex] == 'undefined') {\n console.log(['productSelectedItem', productSelectedItem]);\n console.error('itt lep2');\n console.groupEnd();\n return;\n }\n }\n }\n /*\n ha azonos az ertek kiugrunk\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] != 'undefined' && typeof productSelected[ItemData.id][dayIndex] != 'undefined') {\n if (productSelected[ItemData.id][dayIndex] == quantity) {\n console.error('azonos napi');\n console.groupEnd();\n return;\n }\n }\n } else {\n if (productSelected[ItemData.id] == quantity) {\n console.error('azonos');\n console.groupEnd();\n return;\n }\n }\n if (quantity == 0) {\n if (dayIndex) {\n delete Order.productSelected[ItemData.id][dayIndex];\n delete productSelected[ItemData.id][dayIndex];\n } else {\n delete Order.productSelected[ItemData.id];\n delete productSelected[ItemData.id];\n }\n } else {\n /*\n ha van ertek erteket adunk!\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] == 'undefined') {\n productSelected[ItemData.id] = [];\n }\n console.log('set quantity productSelected[ItemData.id][dayIndex]', quantity);\n productSelected[ItemData.id][dayIndex] = quantity;\n } else {\n productSelected[ItemData.id] = quantity;\n console.log('set quantity productSelected[ItemData.id]', quantity);\n }\n }\n console.log(['productSelected', productSelected]);\n Order.productSelected = productSelected;\n console.groupEnd();\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n /*\n debug(Order.getData('productSelected'));\n debug('*******************');\n */\n };\n this.initViewInvoice = function () {\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n if (Object.keys(Order.productSelected).length > 0) {\n root.Stepper.addCompleted('send');\n root.Stepper.addEnabled('send');\n }\n var styleStr = '';\n $('table.invoice button.printButton').off('click');\n $('table.invoice button.printButton').on('click', function () {\n window.print();\n return;\n // removed by dead control flow\n var newWin; \n // removed by dead control flow\n\n // removed by dead control flow\n var print; \n // removed by dead control flow\n\n // newWin.document.write($('table.invoice').prop('outerHTML'));\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n\n // Érvénytelen szállítási dátum esetén Toast figyelmeztetés megjelenítése.\n root.checkDeliveryDateToast();\n };\n this.resetOrder = function () {\n root.init();\n root.setDeliveryDate('-');\n root.setSupplier('-');\n };\n this.afterOrderSendOk = function (data) {\n Toast.create({\n title: \"Sent!\",\n message: 'Order Sent',\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').prop('disabled', true);\n $('.statusNamePlace').removeClass('statusBlink');\n $('.statusNamePlace').text('elküldve');\n $('.buttonOrderSending').toggleClass('d-none');\n $('.buttonOrderSendOk').toggleClass('d-none');\n $('div.invoiceContainer').html(data.retHTML);\n //root.resetOrder();\n };\n this.afterOrderSendError = function (data) {\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n APP.OrderModule.Stepper.setEnabled(value);\n APP.OrderModule.Stepper.setCompleted(value);\n });\n\n // A szállítási dátum a küldés pillanatában már érvénytelen (pl. piszkozat időközbeni változás).\n if (data && data.errorCode === 'INVALID_DELIVERY_DATE') {\n root.showInvalidDeliveryDate(data.suggestedDeliveryDate || null);\n }\n };\n\n /**\n * Ellenőrzi a szállítási dátumot és ha érvénytelen, Toast üzenetet jelenít meg.\n * Csak a productSelect és invoice nézetekből hívható – a send nézetben a toggleEnableSend végzi ezt.\n */\n this.checkDeliveryDateToast = function () {\n if (!Order.id) {\n return;\n }\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n if (data && data.success && data.why && $.inArray('deliveryDate', data.why) !== -1) {\n var suggested = data.suggestedDeliveryDate || null;\n var suggestedHuman = suggested ? suggested.replaceAll('-', '.') + '.' : null;\n var message = 'A kiválasztott szállítási dátum már nem megfelelő.';\n if (suggestedHuman) {\n message += ' Javasolt új dátum: ' + suggestedHuman;\n }\n Toast.create({\n title: \"Érvénytelen szállítási dátum\",\n message: message,\n status: TOAST_STATUS.WARNING,\n timeout: 8000\n });\n }\n }\n });\n };\n\n /**\n * Megjeleníti a send nézeten az érvénytelen szállítási dátum figyelmeztetést a javasolt új dátummal,\n * és letiltja a \"MEGRENDELÉST ELKÜLDÖM\" gombot, amíg a felhasználó nem hagyja jóvá az új dátumot.\n */\n this.showInvalidDeliveryDate = function (suggested) {\n var suggestedHuman = suggested ? suggested.replaceAll('-', '.') + '.' : '-';\n $('.suggestedDeliveryDatePlace').text(suggestedHuman);\n $('.invalidDeliveryDateWarning').data('suggested-date', suggested || '');\n $('.invalidDeliveryDateWarning').removeClass('d-none').addClass('d-flex');\n\n // Amíg a felhasználó nem hagyja jóvá az új dátumot, az elküldés gomb se ne látsszon, se ne legyen aktív.\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n\n // A javaslat meglététől függően állítjuk be a jóváhagyó gombot.\n if (suggested) {\n $('.suggestedDeliveryDateBlock').removeClass('d-none');\n $('.buttonApproveSuggestedDate').text('Jóváhagyom és módosítom a dátumot');\n } else {\n $('.suggestedDeliveryDateBlock').addClass('d-none');\n $('.buttonApproveSuggestedDate').text('Új szállítási dátum választása');\n }\n var message = 'A kiválasztott szállítási dátum már nem megfelelő.';\n if (suggested) {\n message += ' Javasolt új dátum: ' + suggestedHuman;\n }\n Toast.create({\n title: \"Érvénytelen szállítási dátum\",\n message: message,\n status: TOAST_STATUS.WARNING,\n timeout: 8000\n });\n };\n\n /**\n * A felhasználó jóváhagyja a javasolt új szállítási dátumot: visszanavigálunk a paraméter\n * (naptár) lépéshez, ahol az új dátum lesz előválasztva, így onnan újra végigvihető a folyamat.\n */\n this.approveSuggestedDeliveryDate = function () {\n var suggested = $('.invalidDeliveryDateWarning').data('suggested-date');\n if (suggested) {\n Order.setData({\n deliveryDate: suggested\n });\n root.setDeliveryDate(suggested);\n }\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n // A küldés gombot csak akkor engedjük újra, ha a felhasználó a paraméter lépésben\n // érvényes dátumot választ – ezért itt visszanavigálunk a naptárhoz.\n $('.buttonOrderSend').removeClass('d-none').prop('disabled', false);\n root.Stepper.setActive('parameter');\n };\n this.initViewSend = function () {\n console.log('initViewSend called 2');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n\n // Figyelmeztető panel alaphelyzetbe állítása és a jóváhagyás gomb bekötése.\n // A küldés gombot szándékosan NEM tesszük láthatóvá itt – a toggleEnableSend()\n // aszinkron checkReadyToSend válasza fogja a végső állapotot beállítani.\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n $('.buttonApproveSuggestedDate').off('click');\n $('.buttonApproveSuggestedDate').on('click', root.approveSuggestedDeliveryDate);\n\n // Proaktív UX-ellenőrzés: a send nézet betöltésekor jelezzük, ha a szállítási dátum\n // időközben érvénytelenné vált, és felajánljuk a következő érvényes dátumot.\n root.toggleEnableSend();\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').on('click', function () {\n console.log('Send buton clicked');\n //@todo: datasynchere and callback\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n /**\n * PM158\n */\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n /**\n */\n root.sendOrderDataToServer('send', root.afterOrderSendOk, root.afterOrderSendError);\n\n /* let ajaxData={};\n ajaxData._token=Opts.token;\n ajaxData.send=true;\n $.extend(ajaxData,Order);\n $.ajax({\n url: Opts.URL.store,\n method:'POST',\n data:ajaxData,\n success:function (data) {\n if(data.success){\n root.afterOrderSendOk(data);\n }\n }\n });*/\n });\n };\n this.testModeSend = function () {};\n this.testMode = function () {\n console.log('testMode called ');\n Order.setData({\n id: 234,\n supplierId: 7,\n productSelected: {\n 116: 3,\n 293: 2\n },\n contactName: 'Contact Name',\n note: 'Note',\n type: 'daily',\n deliveryDate: Opts.defaultDeliveryDate,\n deliveryAddress: 12\n });\n console.log(Order.getData());\n console.log('*******************');\n //root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}});\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n this.Stepper.init({\n URL: {\n create: Opts.URL.create\n },\n /*\n csupasz az elejerol\n complete:['supplier'],\n enable: ['supplier'],\n active: 'supplier',\n onAfterActivate:this.initViewSupplier,\n \n product select\n complete:['supplier','parameter','productSelect'],\n enable: ['supplier','parameter','productSelect'],\n active: 'productSelect',\n onAfterActivate:this.initViewProductSelect,\n \n fullos\n complete:['supplier','parameter','productSelect','invoice'],\n enable: ['supplier','parameter','productSelect','invoice','send'],\n active: 'productSelect',\n onAfterActivate:this.initViewProductSelect,\n \n send\n complete:['supplier','parameter','productSelect','invoice','send'],\n enable: ['supplier','parameter','productSelect','invoice','send'],\n active: 'send',\n onAfterActivate:this.initViewProductSelect,\n \n */\n complete: ['supplier', 'parameter', 'productSelect'],\n enable: ['supplier', 'parameter', 'productSelect'],\n active: 'productSelect',\n onAfterActivate: this.initViewProductSelect,\n autoCallback: {\n invoice: {\n onAfterActivate: root.initViewInvoice\n },\n send: {\n onAfterActivate: root.initViewSend\n }\n }\n });\n console.log('*******************');\n };\n this.toggleEnableSend = function () {\n console.log('toggleEnableSend called');\n // Ha még nincs mentett rendelés ID (pl. új rendelés létrehozásakor a supplier lépésnél),\n // a checkReadyToSend hívás felesleges és hibát okozna (/order/undefined/checkReadyToSend).\n if (!Order.id) {\n return;\n }\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n console.log('toggleEnableSend response:', data);\n // Alapértelmezetten elrejtjük a figyelmeztetést – csak konkrét deliveryDate hiba esetén mutatjuk.\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n if (data && data.success) {\n // A szállítási dátum időközben érvénytelenné vált – figyelmeztetés a javasolt dátummal.\n if (data.why && $.inArray('deliveryDate', data.why) !== -1) {\n root.showInvalidDeliveryDate(data.suggestedDeliveryDate || null);\n } else if (data.readyToSend) {\n $('.buttonOrderSend').removeClass('d-none').prop('disabled', false);\n } else {\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n }\n }\n },\n error: function error(xhr) {\n // AJAX hiba esetén (pl. 419, 500) – a figyelmeztetés rejtve marad, gomb letiltva.\n console.log('toggleEnableSend AJAX error:', xhr.status, xhr.responseText);\n $('.invalidDeliveryDateWarning').removeClass('d-flex').addClass('d-none');\n $('.buttonOrderSend').addClass('d-none').prop('disabled', true);\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0FBTyxFQUFDO1VBQ3BCO1VBQ0EsSUFBR25FLElBQUksQ0FBQzhYLEdBQUcsSUFBSTlWLENBQUMsQ0FBQ3VDLE9BQU8sQ0FBQyxjQUFjLEVBQUV2RSxJQUFJLENBQUM4WCxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztZQUN0RGhXLElBQUksQ0FBQzhWLHVCQUF1QixDQUFDNVgsSUFBSSxDQUFDNlgscUJBQXFCLElBQUksSUFBSSxDQUFDO1VBQ3BFLENBQUMsTUFBSyxJQUFHN1gsSUFBSSxDQUFDdVksV0FBVyxFQUFDO1lBQ3RCdlcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUNvQixXQUFXLENBQUMsUUFBUSxDQUFDLENBQUNtTSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztVQUN2RSxDQUFDLE1BQUk7WUFDRHZOLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDa0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDcU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7VUFDbkU7UUFDSjtNQUNKLENBQUM7TUFDRG5FLEtBQUssRUFBQyxTQUFOQSxLQUFLQSxDQUFXQyxHQUFHLEVBQUU7UUFDakI7UUFDQTlLLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDhCQUE4QixFQUFFNkssR0FBRyxDQUFDdEUsTUFBTSxFQUFFc0UsR0FBRyxDQUFDbU4sWUFBWSxDQUFDO1FBQ3pFeFcsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUNvQixXQUFXLENBQUMsUUFBUSxDQUFDLENBQUNGLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDekVsQixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQ2tCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQ3FNLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO01BQ25FO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQztBQUVMLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvb3JkZXIuanM/NTYxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuT3JkZXJNb2R1bERlZmF1bHQ9e1xuICAgIGFjdGlvbkZ1bmN0aW9uOiBmdW5jdGlvbiAoKSB7fSxcbn1cbmNsYXNzIERhdGFNb2RlbE9yZGVyIGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxuICAgICAgICBpZih0eXBlb2YgdGhpcy5wcm9kdWN0U2VsZWN0ZWQgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZWxlY3RlZD17fTtcbiAgICAgICAgfVxuICAgICAgICBpZih0eXBlb2YgdGhpcy5wcm9kdWN0Q29tbWVudCA9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdENvbW1lbnQ9e307XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgfTtcbn07XG53aW5kb3cuRGF0YU1vZGVsT3JkZXI9RGF0YU1vZGVsT3JkZXI7XG5cbndpbmRvdy5TdGVwcGVyPWZ1bmN0aW9uICgpIHtcblxuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgY29tcGxldGU6IFsnc3VwcGxpZXInXSxcbiAgICAgICAgYXZhaWxhYmxlOiBbJ3N1cHBsaWVyJywgJ3BhcmFtZXRlcicsICdwcm9kdWN0U2VsZWN0JywgJ2ludm9pY2UnLCAnc2VuZCddLFxuICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCAnaW52b2ljZSddLFxuICAgICAgICBsb2FkOiBbXSxcbiAgICAgICAgZXhjbHVkZUxvYWRlZDpbJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgIGxvYWRlZDogW10sXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgY3JlYXRlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgVXJsRGF0YTpmYWxzZSxcbiAgICAgICAgb25BZnRlckxvYWQ6ZnVuY3Rpb24gKCkge30sXG4gICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgYXV0b0NhbGxiYWNrOntcbiAgICAgICAgICAgICdpbnZvaWNlJzp7XG4gICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpIHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzZW5kJzp7XG4gICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpIHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbm93TG9hZGVkOmZhbHNlLFxuXG4gICAgfTtcblxuICAgIGxldCByb290PXRoaXM7XG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5zZXRPcHRzPWZ1bmN0aW9uKG9wdGlvbnMpe1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICB9XG5cblxuXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zKXtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG5cbiAgICAgICAgZGVidWcoT3B0cyk7XG4gICAgICAgICQoJy5zdGVwJykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGV0IHN0ZXBOYW1lPSQodGhpcykuZGF0YSgnc3RlcG5hbWUnKTtcbiAgICAgICAgICAgIGlmKE9wdHMuY29tcGxldGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgICAgICByb290LnNldENvbXBsZXRlZChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcHRzLmVuYWJsZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgICAgIHJvb3Quc2V0RW5hYmxlZChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihPcHRzLmxvYWQuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgICAgICByb290LmxvYWRTdGVwQ29udGVudChzdGVwTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKE9wdHMuYWN0aXZlPT09c3RlcE5hbWUpe1xuICAgICAgICAgICAgICAgIHJvb3Quc2V0QWN0aXZlKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kQ2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBzdGVwQ2xpY2tCdXR0b25zPSQoJy5zdGVwQ2xpY2snKTtcbiAgICAgICAgc3RlcENsaWNrQnV0dG9ucy5vZmYoJ2NsaWNrJyk7XG4gICAgICAgIHN0ZXBDbGlja0J1dHRvbnMub24oJ2NsaWNrJyxyb290LnN0ZXBDbGljayk7XG5cbiAgICB9XG5cbiAgICB0aGlzLnNldENvbXBsZXRlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIGNvbXBsZXRlZCcpO1xuICAgICAgICAkKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJykuYWRkQ2xhc3MoJ2NvbXBsZXRlZCcpO1xuICAgIH1cblxuICAgIHRoaXMudW5zZXRDb21wbGV0ZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcbiAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUrJyBVbmNvbXBsZXRlZCcpO1xuICAgICAgICAkKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJykucmVtb3ZlQ2xhc3MoJ2NvbXBsZXRlZCcpO1xuICAgICAgICBPcHRzLmNvbXBsZXRlPWFycmF5UmVtb3ZlKE9wdHMuY29tcGxldGUsc3RlcE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMudW5zZXRFbmFibGVkPWZ1bmN0aW9uIChzdGVwTmFtZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKycgVW4gZW5hYmxlZCcpO1xuICAgICAgICAkKCcuY2xpY2snK3N0ZXBOYW1lKS5jb250ZW50cygpLnVud3JhcCgpO1xuICAgICAgICBPcHRzLmVuYWJsZT1hcnJheVJlbW92ZShPcHRzLmVuYWJsZSxzdGVwTmFtZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0RW5hYmxlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIGVuYWJsZWQnKTtcbiAgICAgICAgbGV0IHN0ZXBJdGVtPSQoJy5zdGVwW2RhdGEtc3RlcE5hbWU9XCInK3N0ZXBOYW1lKydcIl0nKTtcbiAgICAgICAgc3RlcEl0ZW0uaHRtbCgnPGEgY2xhc3M9XCJzdGVwQ2xpY2sgY2xpY2snK3N0ZXBOYW1lKydcIiBkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCIgaHJlZj1cIiNcIj4nK3N0ZXBJdGVtLmh0bWwoKSsnPC9hPicpO1xuICAgICAgICByb290LmJpbmRDbGlja0FjdGlvbigpO1xuICAgICAgICAvLyQoJy5zdGVwQ2xpY2snKS5jbGljayhyb290LnN0ZXBDbGljayk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmFkZEVuYWJsZWQ9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICBpZighT3B0cy5lbmFibGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcbiAgICAgICAgICAgIE9wdHMuZW5hYmxlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJvb3Quc2V0RW5hYmxlZChzdGVwTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRDb21wbGV0ZWQ9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICBpZighT3B0cy5jb21wbGV0ZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xuICAgICAgICAgICAgT3B0cy5jb21wbGV0ZS5wdXNoKHN0ZXBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByb290LnNldENvbXBsZXRlZChzdGVwTmFtZSk7XG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmxvYWRTdGVwQ29udGVudD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xuICAgICAgICBsZXQgZGF0YT17J3R5cGUnOnN0ZXBOYW1lfTtcbiAgICAgICAgJC5leHRlbmQoZGF0YSwgT3B0cy5VcmxEYXRhKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5jcmVhdGUsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXI9JCgnLlNDJytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xuICAgICAgICAgICAgICAgIGlmKCQuaW5BcnJheShzdGVwTmFtZSxPcHRzLmV4Y2x1ZGVMb2FkZWQpPT0tMSl7XG4gICAgICAgICAgICAgICAgICAgIE9wdHMubG9hZGVkLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXhjbHVkZWQgVmlldycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250YWluZXIuaHRtbChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIGlmKE9wdHMubm93TG9hZGVkKXtcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5ub3dMb2FkZWQoc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPcHRzLm9uQWZ0ZXJMb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJMb2FkZWQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBPcHRzLmxvYWRlZD1bJ3N1cHBsaWVyJ107XG4gICAgICAgICQoJy5zdGVwQ29udGFpbmVyJykuZWFjaChmdW5jdGlvbigpe1xuLypcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2xhc3NMaXN0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdTQ1N1cHBsaWVyJykpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5hdHRyKCdjbGFzcycpKTtcbiovXG4gICAgICAgICAgICBpZighdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ1NDU3VwcGxpZXInKSl7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5odG1sKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRBY3RpdmVGaW5pc2g9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICBsZXQgY29udGFpbmVyPSQoJy5TQycrc3RlcE5hbWUuY2FwaXRhbGl6ZSgpKTtcbiAgICAgICAgaWYoc3RlcE5hbWU9PT0ncHJvZHVjdFNlbGVjdCcpe1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclN0ZXBwZXInKS5hZGRDbGFzcygnYWN0aXZlU2lkZUJhcicpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJTdGVwcGVyJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZVNpZGVCYXInKTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1Zygnc2V0QWN0aXZlRmluaXNoIHNob3c6JytzdGVwTmFtZSk7XG4gICAgICAgIGNvbnRhaW5lci5zaG93KCk7XG4gICAgICAgIE9wdHMubm93TG9hZGVkPWZhbHNlO1xuICAgICAgICByb290LmFjdGl2ZT1zdGVwTmFtZTtcbiAgICAgICAgT3B0cy5vbkFmdGVyQWN0aXZhdGUoKTtcbiAgICAgICAgaWYodHlwZW9mIE9wdHMuYXV0b0NhbGxiYWNrW3N0ZXBOYW1lXSE9PSd1bmRlZmluZWQnICl7XG4gICAgICAgICAgICBPcHRzLmF1dG9DYWxsYmFja1tzdGVwTmFtZV0ub25BZnRlckFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRBY3RpdmU9ZnVuY3Rpb24oc3RlcE5hbWUpe1xuICAgICAgICAkKCcuc3RlcENvbnRhaW5lcicpLmhpZGUoKTtcbiAgICAgICAgaWYoIU9wdHMubG9hZGVkLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XG4gICAgICAgICAgICByb290LmxvYWRTdGVwQ29udGVudChzdGVwTmFtZSk7XG4gICAgICAgICAgICBPcHRzLm5vd0xvYWRlZD10aGlzLnNldEFjdGl2ZUZpbmlzaDtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUZpbmlzaChzdGVwTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBDbGljaz1mdW5jdGlvbihldmVudCl7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBzdGVwTmFtZT0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ3N0ZXBuYW1lJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZXRBY3RpdmU6JytzdGVwTmFtZSk7XG4gICAgICAgIHJvb3Quc2V0QWN0aXZlKHN0ZXBOYW1lKTtcbiAgICB9XG59XG5cbndpbmRvdy5PcmRlck1vZHVsZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgICAgICBuZWVkU3RlcHBlcjp0cnVlLFxuICAgICAgICBDU1NTZWxlY3RvckZvcm06Jy5vcmRlclBhcmFtZXRlckZvcm0nLFxuICAgICAgICBkZWZhdWx0RGVsaXZlcnlEYXRlOicnLFxuICAgICAgICBkYXRhU3luY1BhdXNlVGltZTo1MDAsXG4gICAgICAgIHRva2VuOm51bGwsXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgcm9vdDpudWxsLFxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0Om51bGwsXG4gICAgICAgICAgICBjaGVja1JlYWR5VG9TZW5kOm51bGwsXG4gICAgICAgICAgICBpbmRleDpudWxsLFxuICAgICAgICAgICAgc2hvdzpudWxsLFxuICAgICAgICAgICAgZWRpdDpudWxsLFxuICAgICAgICAgICAgY3JlYXRlOiBudWxsLFxuICAgICAgICAgICAgc3RvcmU6IG51bGwsXG4gICAgICAgICAgICB1cGRhdGU6bnVsbCxcbiAgICAgICAgICAgIGRlc3Ryb3k6bnVsbCxcbiAgICAgICAgICAgIHRvZ2dsZUZhdm9yaXRlczpudWxsLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBQdWJsaWNWYXIgPSB7fTtcbiAgICBsZXQgUHVibGljVmFyMiA9IHsnYXNkJzogJzIxJ307XG4gICAgbGV0IEFwaVRva2VuID0gbnVsbDtcbiAgICBsZXQgT3JkZXI9bnVsbDtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IHZpZXdJbmljaWFsaXplZD1bXTtcblxuICAgIHRoaXMuc2V0T3B0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0T3B0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9wdHM7XG4gICAgfVxuICAgIHRoaXMuY2xpY2tPcmRlckVkaXQ9ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICBkZWJ1ZygnY2xpY2tFZGl0Jyk7XG4gICAgICAgIGRlYnVnKGRhdGEpO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLGRhdGEuaWQpO1xuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KGFqYXhVcmwpO1xuLyogICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgICQuZXh0ZW5kKGFqYXhEYXRhLE9yZGVyKTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxkYXRhLmlkKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogYWpheFVybCxcbiAgICAgICAgICAgIG1ldGhvZDonR0VUJyxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JkZXJEYXRhPXJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyRGF0YS5zdXBwbGllcklkPW9yZGVyRGF0YS5zdXBwbGllcl9pZDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlKG9yZGVyRGF0YS5zdXBwbGllcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuaW5pdE9yZGVyKG9yZGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuaW5pdFN0ZXBwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTsqL1xuXG5cbiAgICB9XG4gICAgdGhpcy5hZnRlck9yZGVyRGVsZXRlZD1mdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICBkZWJ1ZygnT3JkZXIgZGVsZXRlIHN1Y2Nlc3MnKTtcbiAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkVycm9yIGRlbGV0ZWQgIVwiLCBtZXNzYWdlOiAnJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZD1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCcpO1xuICAgICAgICBkZWJ1ZyhldmVudCk7XG4gICAgICAgIGRlYnVnKGV2ZW50LmRhdGEpO1xuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xuICAgICAgICBsZXQgYWpheERhdGE9e307XG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLGV2ZW50LmRhdGEuaWQpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgbWV0aG9kOlwiREVMRVRFXCIsXG4gICAgICAgICAgICBzdWNjZXNzOnJvb3QuYWZ0ZXJPcmRlckRlbGV0ZWQsXG4gICAgICAgICAgICAvL2Vycm9yOmFqYXhFcnJvckhhbmRsZXJcbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5pbml0Vmlld09yZGVyU2VsZWN0PWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2FsbGVkIGluaXRWaWV3T3JkZXJTZWxlY3QgJyk7XG4gICAgICAgICQoJy5vcmRlcnNTZWxlY3RUYWJsZSBidXR0b24nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5vcmRlcnNTZWxlY3RUYWJsZSBidXR0b24nKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IGFjdGlvbj0kKHRoaXMpLmRhdGEoJ2FjdGlvbicpO1xuICAgICAgICAgICAgbGV0IG9yZGVySWQ9JCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJylbMF0pLmRhdGEoJ29yZGVyaWQnKTtcbiAgICAgICAgICAgIGRlYnVnKGFjdGlvbik7XG4gICAgICAgICAgICBkZWJ1ZyhvcmRlcklkKTtcblxuICAgICAgICAgICAgaWYoYWN0aW9uPT0nZGVsZXRlJyl7XG4gICAgICAgICAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgaW5pdGlhdGUgYW4gQUpBWCByZXF1ZXN0IGhlcmUgKGFuZCB0aGVuIGRvIHRoZSB1cGRhdGluZyBpbiBhIGNhbGxiYWNrKS5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RhbCdzIGNvbnRlbnQuIFdlJ2xsIHVzZSBqUXVlcnkgaGVyZSwgYnV0IHlvdSBjb3VsZCB1c2UgYSBkYXRhIGJpbmRpbmcgbGlicmFyeSBvciBvdGhlciBtZXRob2RzIGluc3RlYWQuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC10aXRsZScpLnRleHQoJ01lZ2VyxZFzw610w6lzICcpO1xuICAgICAgICAgICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtYm9keScpLnRleHQoJ0JpenRvc2FuIHTDtnJsaSBhIG1lZ3JlbmRlbMOpc3Q/Jyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vbignY2xpY2snLHtpZDpvcmRlcklkfSxyb290LmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICByb290LmNsaWNrT3JkZXJFZGl0KHtpZDpvcmRlcklkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkKCcuYnV0dG9uTmV3Jykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuYnV0dG9uTmV3Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgsJ2ZvcmNlPXRydWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5pbml0U3RlcHBlcj1mdW5jdGlvbiAoKXtcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpKTtcbiAgICAgICAgdmlld0luaWNpYWxpemVkPVtdO1xuICAgICAgICAkKCcuc3RhdHVzTmFtZVBsYWNlJykudGV4dCgnTmluY3MgZWxrw7xsZHZlJyk7XG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS5hZGRDbGFzcygnc3RhdHVzQmxpbmsnKTtcbiAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJy0nKTtcbiAgICAgICAgcm9vdC5zZXRTdXBwbGllcignLScpO1xuXG4gICAgICAgIGxldCB1bkVuYWJsZWQ9WydwYXJhbWV0ZXInLCAncHJvZHVjdFNlbGVjdCcsICdpbnZvaWNlJywgJ3NlbmQnXTtcbiAgICAgICAgJC5lYWNoKHVuRW5hYmxlZCxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldEVuYWJsZWQodmFsdWUpO1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0Q29tcGxldGVkKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVidWcocm9vdC5TdGVwcGVyLmdldE9wdHMoKVsnYXZhaWxhYmxlJ10pO1xuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ10pO1xuXG4gICAgICAgIGxldCBzdGVwQWN0aXZlPSdzdXBwbGllcic7XG4gICAgICAgIGxldCBzdGVwQ29tcGxldGU9WydzdXBwbGllciddO1xuICAgICAgICBsZXQgc3RlcEVuYWJsZT1bXTtcbiAgICAgICAgbGV0IHN0ZXBPbkFmdGVyQWN0aXZhdGU9ZnVuY3Rpb24gKCl7fTtcblxuICAgICAgICBsZXQgYXZhbGFpYmxlU3RlcHM9cm9vdC5TdGVwcGVyLmdldE9wdHMoKVsnYXZhaWxhYmxlJ107XG4gICAgICAgIGxldCBzdGVwVXJsRGF0YT1mYWxzZTtcbiAgICAgICAgbGV0IHN0ZXBBdXRvQ2FsbGJhY2s9W107XG4gICAgICAgIGZvciAobGV0IHN0ZXBOYW1lIG9mIGF2YWxhaWJsZVN0ZXBzKSB7XG4gICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPXRoaXNbJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCldO1xuICAgICAgICAgICAgbGV0IGl0ZW09e307XG4gICAgICAgICAgICBpdGVtWydvbkFmdGVyQWN0aXZhdGUnXT1zdGVwT25BZnRlckFjdGl2YXRlO1xuICAgICAgICAgICAgc3RlcEF1dG9DYWxsYmFja1tzdGVwTmFtZV09aXRlbTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1ZyhzdGVwQXV0b0NhbGxiYWNrKTtcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpWydpZCddKTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydpZCddPjApe1xuICAgICAgICAgICAgZGVidWcoJ2hhanJhJyk7XG4gICAgICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCkpO1xuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSl7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBAdG9kbzogd2Vla2x5LXQgYmVhbGxpdGFuaVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydzdXBwbGllck5hbWUnXSl7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXRTdXBwbGllcihPcmRlci5nZXREYXRhKClbJ3N1cHBsaWVyTmFtZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0ZXBVcmxEYXRhPXsnc3VwcGxpZXJJZCc6T3JkZXIuc3VwcGxpZXJJZCxpZDpPcmRlci5pZH07XG4gICAgICAgICAgICBmb3IgKGxldCBzdGVwTmFtZSBvZiBhdmFsYWlibGVTdGVwcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICBzdGVwQ29tcGxldGUucHVzaChzdGVwTmFtZSk7XG4gICAgICAgICAgICAgICAgc3RlcEVuYWJsZS5wdXNoKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ109PXN0ZXBOYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgc3RlcEFjdGl2ZT1zdGVwTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXogaW52b2ljZSDDqXMgc2VuZCBsw6lww6lzZWtuw6lsIGF6IGF1dG9DYWxsYmFjayBow612amEgbWVnIGF6IGluaXRWaWV3Ki1vdCxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXrDqXJ0IGEgZ2xvYsOhbGlzIG9uQWZ0ZXJBY3RpdmF0ZS1ldCDDvHJlc2VuIGhhZ3lqdWsg4oCTIGvDvGzDtm5iZW4ga8OpdHN6ZXIgaMOtdsOzZG5hLlxuICAgICAgICAgICAgICAgICAgICBpZihzdGVwTmFtZSE9PSdpbnZvaWNlJyAmJiBzdGVwTmFtZSE9PSdzZW5kJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPXRoaXNbJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCldO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBPbkFmdGVyQWN0aXZhdGU9ZnVuY3Rpb24gKCl7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbi8qXG4gICAgICAgICAgICAvL3JlZmFjdG9yZWQgZm9yIGxvb3BcbiAgICAgICAgICAgIHZhciBCcmVha0V4Y2VwdGlvbiA9IHt9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhdmFsYWlibGVTdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHN0ZXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgc3RlcENvbXBsZXRlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBzdGVwRW5hYmxlLnB1c2goc3RlcE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ109PXN0ZXBOYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBBY3RpdmU9c3RlcE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBCcmVha0V4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUgIT09IEJyZWFrRXhjZXB0aW9uKSB0aHJvdyBlO1xuICAgICAgICAgICAgfSovXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3QuU3RlcHBlci5pbml0KHtcbiAgICAgICAgICAgIGNvbXBsZXRlOnN0ZXBDb21wbGV0ZSxcbiAgICAgICAgICAgIGVuYWJsZTpzdGVwRW5hYmxlLFxuICAgICAgICAgICAgbG9hZGVkOltdLFxuICAgICAgICAgICAgYWN0aXZlOiBzdGVwQWN0aXZlLFxuICAgICAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICAgICAgY3JlYXRlOiBPcHRzLlVSTC5jcmVhdGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVXJsRGF0YTpzdGVwVXJsRGF0YSxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpzdGVwT25BZnRlckFjdGl2YXRlLFxuICAgICAgICAgICAgYXV0b0NhbGxiYWNrOiBzdGVwQXV0b0NhbGxiYWNrLFxuICAgICAgICAgICAgLyp7XG4gICAgICAgICAgICAgICAgaW52b2ljZToge1xuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld0ludm9pY2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnJvb3QuaW5pdFZpZXdTZW5kXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgfSovXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdE9yZGVyPWZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgT3JkZXI9bmV3IERhdGFNb2RlbE9yZGVyKGRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIGRlYnVnKCdPcmRlck1vZHVsIGluaXQgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIHdpbmRvdy5PcmRlck1vZHVsRGVmYXVsdCwgb3B0aW9ucyk7XG4gICAgICAgIE9yZGVyPW5ldyBEYXRhTW9kZWxPcmRlcigpO1xuICAgICAgICBpZihPcHRzLm5lZWRTdGVwcGVyKXtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5TdGVwcGVyID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5TdGVwcGVyPW5ldyBTdGVwcGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdXBwbGllcj1mdW5jdGlvbiAoc3VwcGxpZXJOYW1lLHN1cHBsaWVySWQpe1xuICAgICAgIGlmKHN1cHBsaWVyTmFtZSl7XG4gICAgICAgICAgICQoJy5zdXBwbGllck5hbWVQbGFjZScpLnRleHQoc3VwcGxpZXJOYW1lKTtcbiAgICAgICB9XG4gICAgICAgaWYoc3VwcGxpZXJJZCl7XG4gICAgICAgICAgIE9yZGVyLnNldERhdGEoe3N1cHBsaWVySWQ6c3VwcGxpZXJJZH0pO1xuICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7J1VybERhdGEnOnsnc3VwcGxpZXJJZCc6c3VwcGxpZXJJZH19KTtcbiAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0RGVsaXZlcnlEYXRlPWZ1bmN0aW9uIChkYXRlVGV4dCxkYXRlVGV4dFRvKXtcbiAgICAgICAgbGV0IGRhdGVUZXh0SHVtYW49ZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsJy4nKSsnLic7XG4gICAgICAgIGlmKGRhdGVUZXh0SHVtYW4ubGVuZ3RoPDUpe1xuICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYoZGF0ZVRleHRUbyl7XG4gICAgICAgICAgICBkYXRlVGV4dEh1bWFuKz0nIC0gJytkYXRlVGV4dFRvLnJlcGxhY2VBbGwoJy0nLCcuJykrJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgJChPcHRzLkNTU1NlbGVjdG9yRm9ybSsnIC5zZWxlY3RlZERhdGVUZXh0JykudGV4dChkYXRlVGV4dEh1bWFuKTtcbiAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dEh1bWFuKTtcbiAgICAgICAgJChPcHRzLkNTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xuICAgIH1cblxuXG5cbiAgICB0aGlzLmdldERhdGE9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiBPcmRlcjtcbiAgICB9XG5cblxuICAgIHRoaXMuc2V0U3VwcGxpZXJDb21wbGV0ZWQ9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnYmluZ28nKTtcbiAgICAgICAgcm9vdC5pbml0Vmlld1BhcmFtZXRlcigpXG4gICAgfVxuXG4gICAgdGhpcy5hZnRlck9yZGVyU2V0U3VwcGxpZXJPaz1mdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTdXBwbGllciBzZWxlY3RlZCAhXCIsIG1lc3NhZ2U6IGRhdGEuc3VwcGxpZXIubmFtZSAsIHN0YXR1czogVE9BU1RfU1RBVFVTLklORk8sIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoZGF0YS5zdXBwbGllci5uYW1lLGRhdGEuc3VwcGxpZXIuaWQpO1xuICAgICAgICBPcmRlci5zZXREYXRhKHtpZDpkYXRhLmlkfSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfX0pO1xuICAgICAgICAvL3Jvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpyb290LnNldFN1cHBsaWVyQ29tcGxldGVkfSlcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3BhcmFtZXRlcicpO1xuICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdwYXJhbWV0ZXInKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3BhcmFtZXRlcicpO1xuICAgIH1cblxuXG4gICAgdGhpcy5pbml0Vmlld1N1cHBsaWVyPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2FsbCBpbml0Vmlld1N1cHBsaWVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XG4gICAgICAgICQoJy5zdXBwbGllckl0ZW0nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5zdXBwbGllckl0ZW0nKS5vbignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKE9yZGVyLmdldERhdGEoKSk7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgc3VwcGxpZXJJZD0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2lkJyk7XG4gICAgICAgICAgICBsZXQgc3VwcGxpZXJOYW1lPSQoZXZlbnQuY3VycmVudFRhcmdldCkuZmluZCgnaDUuY2FyZC10aXRsZScpLnRleHQoKTtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBPcmRlci5zdXBwbGllcklkPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgLy9uZXcgb3JkZXJcblxuICAgICAgICAgICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5zdXBwbGllcklkPXN1cHBsaWVySWQ7XG4gICAgICAgICAgICAgICAgYWpheERhdGEuc3RvcmVUeXBlPSdzdXBwbGllclNlbGVjdCc7XG4gICAgICAgICAgICAgICAgJC5leHRlbmQoYWpheERhdGEsT3JkZXIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuc3RvcmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlck9yZGVyU2V0U3VwcGxpZXJPayhkYXRhLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy9PcmRlci5zZXREYXRhKHtzdXBwbGllcklkOnN1cHBsaWVySWR9KTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vaWRlIGtlbGxlbmUgZWd5IGpvIGtpcyBrZXJkZXNcbiAgICAgICAgICAgICAgICBpZihPcmRlci5zdXBwbGllcklkIT1zdXBwbGllcklkKXtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiU3VwcGxpZXIgY2hhbmdlIHRvIVwiLCBtZXNzYWdlOiBzdXBwbGllck5hbWUsIHN0YXR1czogVE9BU1RfU1RBVFVTLldBUk5JTkcsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci5jbGVhckxvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICBPcmRlcj1uZXcgRGF0YU1vZGVsT3JkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgLy9PcmRlci5zZXREYXRhKHtzdXBwbGllcklkOnN1cHBsaWVySWR9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5TdGVwcGVyLmdldE9wdHMoKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0nKTtcblxuICAgICAgICAgICAgLy8kKCcuc3VwcGxpZXJOYW1lUGxhY2UnKS50ZXh0KHN1cHBsaWVyTmFtZSk7XG4gICAgICAgICAgICByb290LnNldFN1cHBsaWVyKHN1cHBsaWVyTmFtZSxzdXBwbGllcklkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHN1cHBsaWVyTmFtZSlcbiAgICAgICAgICAgIC8vQHRvZG86aWRlIGtlbGwgZWd5IG1lbnRlcyFcbiAgICAgICAgICAgIC8vQHRvZG86bWVudGVzIGVyZWRlbWVueWVrZXBwZW4gbGVoZXQgdmFsdGFuaVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpyb290LnNldFN1cHBsaWVyQ29tcGxldGVkfSlcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRFbmFibGVkKCdwYXJhbWV0ZXInKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnNldENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0QWN0aXZlKCdwYXJhbWV0ZXInKTtcblxuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tDb250YWN0TmFtZUZpZWxkPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nLm9yZGVyUGFyYW1ldGVyRm9ybSc7XG4gICAgICAgIGxldCBub2RlPSQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKTtcbiAgICAgICAgaWYobm9kZS52YWwoKS5sZW5ndGg8Mil7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy12YWxpZCcpO1xuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICB0aGlzLnNlbmRPcmRlckRhdGFUb1NlcnZlcj1mdW5jdGlvbiAodXBkYXRlVHlwZSxjYWxsYmFjayxlcnJvckNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBhamF4RGF0YT0ge307XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcbiAgICAgICAgaWYoT3JkZXIuaWQpe1xuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScsT3JkZXIuaWQpO1xuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAgICAgYWpheERhdGEuX21ldGhvZD0nUFVUJztcbiAgICAgICAgfVxuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgYWpheERhdGEudXBkYXRlVHlwZT11cGRhdGVUeXBlO1xuICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XG4gICAgICAgIGRlYnVnKE9yZGVyKTtcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xuICAgICAgICBkZWJ1ZygnYWpheFVybDonK2FqYXhVcmwpO1xuICAgICAgICBhamF4RGF0YT1qc29uVG9Gb3JtRGF0YShhamF4RGF0YSk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZygnYWpheCByZXR1cm5lZCBkYXRhJyk7XG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7XG4gICAgICAgICAgICAgICAgYWpheEVycm9ySGFuZGxlcih4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcik7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGVycm9yQ2FsbGJhY2shPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayh4aHIucmVzcG9uc2VKU09OKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIHRoaXMuYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGRlYnVnKCdjYWxsZWQgYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLCdpZCc6T3JkZXIuaWR9fSk7XG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOnJvb3Quc2V0UGFyYW1ldGVyQ29tcGxldGVkfSlcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3Byb2R1Y3RTZWxlY3QnKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgncHJvZHVjdFNlbGVjdCcpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0Q29tcGxldGVkKCdwcm9kdWN0U2VsZWN0Jyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3Byb2R1Y3RTZWxlY3QnKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RDdXJyZW50V2VlayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdzZWxlY3RDdXJyZW50V2VlaycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCQoJy51aS1kYXRlcGlja2VyJykuZmluZCgnLnVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkgYScpKTtcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXInKS5maW5kKCcudWktZGF0ZXBpY2tlci1jdXJyZW50LXNlbGVjdGVkLXdlZWtkYXkgYScpLmFkZENsYXNzKCd1aS1zdGF0ZS1hY3RpdmUnKVxuICAgIH1cbiAgICB0aGlzLndlZWtIb3ZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdob3ZlciBBY3RpdmUnKTtcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vZmYoJ21vdXNlbW92ZScpO1xuICAgICAgICAkKCcudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0cicpLm9mZignbW91c2VsZWF2ZScpO1xuXG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmZpbmQoJ3RkIGEnKS5hZGRDbGFzcygndWktc3RhdGUtaG92ZXInKTsgfSk7XG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub24oJ21vdXNlbGVhdmUnLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5maW5kKCd0ZCBhJykucmVtb3ZlQ2xhc3MoJ3VpLXN0YXRlLWhvdmVyJyk7IH0pO1xuXG4gICAgfVxuICAgIHRoaXMud2Vla0hvdmVyU2xvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd3ZWVrSG92ZXJTbG93Jyk7XG4gICAgICAgIGlmKCQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykubGVuZ3RoPDEpe1xuICAgICAgICAgICAgc2V0VGltZW91dChyb290LndlZWtIb3ZlclNsb3csIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJvb3Qud2Vla0hvdmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdERhdGVQaWNrZXI9ZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignYXNkYXNkYWRhZCcpO1xuICAgICAgICBjb25zb2xlLmxvZygndGlwdXMnICsgdHlwZSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm0gPSAnLm9yZGVyUGFyYW1ldGVyRm9ybSc7XG4gICAgICAgIGxldCBzdGFydERhdGU9bmV3IERhdGUoJzE5MDAtMDEtMDEnKTtcbiAgICAgICAgbGV0IGVuZERhdGU9bmV3IERhdGUoJzE5MDAtMDEtMDInKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKFwiZGVzdHJveVwiKTtcblxuICAgICAgICBpZiAodHlwZSA9PSAnd2Vla2x5Jykge1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcih7XG4gICAgICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdE90aGVyTW9udGhzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dXZWVrOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXG4gICAgICAgICAgICAgICAgZmlyc3REYXk6IDEsXG4gICAgICAgICAgICAgICAgbWluRGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBhZnRlclNob3c6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkge1xuICAgICAgICAgICAgICAgICAgcm9vdC53ZWVrSG92ZXIoKTtcbiAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0Q3VycmVudFdlZWsoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSAkKHRoaXMpLmRhdGVwaWNrZXIoJ2dldERhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IGdldE1vbmRheShkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyA3KTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoICd5eS1tbS1kZCcsc3RhcnREYXRlKSwkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSggJ3l5LW1tLWRkJyxlbmREYXRlKSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJlZm9yZVNob3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cCgnYmVmb3JlU2hvdycpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0YXJ0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICAvL3Jvb3Qud2Vla0hvdmVyU2xvdygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ2JlZm9yZVNob3dEYXknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2h1LUh1JykpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3NzQ2xhc3MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0ZSA+PSBzdGFydERhdGUgJiYgZGF0ZSA8PSBlbmREYXRlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2h1LUh1JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3MgPSAndWktZGF0ZXBpY2tlci1jdXJyZW50LXNlbGVjdGVkLXdlZWtkYXknO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9jc3NDbGFzcyA9ICd1aS1zdGF0ZS1hY3RpdmUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNzc0NsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgY3NzQ2xhc3NdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBpbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vcm9vdC5zZWxlY3RDdXJyZW50V2VlaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTesOhbGzDrXTDoXNpIGtvcmzDoXRvesOhcyBhZGF0b2sgYmV0w7ZsdMOpc2UgKGNzYWsgaGEgaGFzRGVsaXZlcnlDb25zdHJhaW50ID0gdHJ1ZSlcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGVEYXRlcyA9IFtdO1xuICAgICAgICAgICAgbGV0IG5leHREZWxpdmVyeURhdGUgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGhhc0RlbGl2ZXJ5Q29uc3RyYWludCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGhvbGlkYXlzID0gW107XG4gICAgICAgICAgICBsZXQgd29ya2luZ0RheXMgPSBbXTtcbiAgICAgICAgICAgIGxldCBkYXRlcGlja2VySW5wdXQgPSAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKTtcbiAgICAgICAgICAgIGxldCBjYWxlbmRhclVybCA9IGRhdGVwaWNrZXJJbnB1dC5kYXRhKCdkZWxpdmVyeS1jYWxlbmRhci11cmwnKTtcbiAgICAgICAgICAgIGxldCBzdXBwbGllcklkID0gZGF0ZXBpY2tlcklucHV0LmRhdGEoJ3N1cHBsaWVyLWlkJyk7XG4gICAgICAgICAgICBsZXQgcHJvZml0Q2VudGVySWQgPSBkYXRlcGlja2VySW5wdXQuZGF0YSgncHJvZml0LWNlbnRlci1pZCcpO1xuXG4gICAgICAgICAgICBpZiAoY2FsZW5kYXJVcmwgJiYgc3VwcGxpZXJJZCAmJiBwcm9maXRDZW50ZXJJZCkge1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogY2FsZW5kYXJVcmwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVySWQ6IHN1cHBsaWVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9maXRDZW50ZXJJZDogcHJvZml0Q2VudGVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlckRhdGVUaW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RlbGl2ZXJ5Q29uc3RyYWludCA9IGRhdGEuaGFzRGVsaXZlcnlDb25zdHJhaW50IHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw5xubmVwbmFwb2sgw6lzIMOhdGhlbHllemV0dCBtdW5rYW5hcG9rIOKAkyBtaW5kaWcgYmV0w7ZsdGrDvGtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGlkYXlzID0gKGRhdGEuaG9saWRheXMgfHwgW10pLm1hcChmdW5jdGlvbihoKSB7IHJldHVybiB7IGRhdGU6IGguZGF0ZSwgZGVzY3JpcHRpb246IGguZGVzY3JpcHRpb24gfTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nRGF5cyA9IChkYXRhLndvcmtpbmdEYXlzIHx8IFtdKS5tYXAoZnVuY3Rpb24odykgeyByZXR1cm4geyBkYXRlOiB3LmRhdGUsIGRlc2NyaXB0aW9uOiB3LmRlc2NyaXB0aW9uIH07IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGVsaXZlcnlDb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlRGF0ZXMgPSBkYXRhLmF2YWlsYWJsZURhdGVzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHREZWxpdmVyeURhdGUgPSBkYXRhLm5leHREZWxpdmVyeURhdGUgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhIG5pbmNzIHN6w6FsbMOtdMOhc2kga29ybMOhdG96w6FzLCBheiBhdmFpbGFibGVEYXRlcyDDqXMgbmV4dERlbGl2ZXJ5RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw7xyZXMgbWFyYWQg4oCTIGEgZGF0ZXBpY2tlciBheiBlcmVkZXRpIG3Ds2RvbiB2aXNlbGtlZGlrXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNEZWxpdmVyeUNvbnN0cmFpbnQgJiYgbmV4dERlbGl2ZXJ5RGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEvDtnZldGtlesWRIHN6w6FsbMOtdMOhc2kgbmFwIGJlw6FsbMOtdMOhc2EgYWxhcMOpcnRlbG1lemV0dGvDqW50XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUobmV4dERlbGl2ZXJ5RGF0ZSk7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5zZWxlY3RlZERhdGVUZXh0JykudGV4dChuZXh0RGVsaXZlcnlEYXRlKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChuZXh0RGVsaXZlcnlEYXRlKTtcbiAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KG5leHREZWxpdmVyeURhdGUucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTesOtbiBqZWxtYWd5YXLDoXphdCBtZWdqZWxlbsOtdMOpc2UgY3NhayBzesOhbGzDrXTDoXNpIGtvcmzDoXRvesOhcyBlc2V0w6luXG4gICAgICAgICAgICBpZiAoaGFzRGVsaXZlcnlDb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgJCgnI2RlbGl2ZXJ5RGF0ZUxlZ2VuZCcpLnNob3coKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGVwaWNrZXJPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXG4gICAgICAgICAgICAgICAgbWluRGF0ZTogKGhhc0RlbGl2ZXJ5Q29uc3RyYWludCAmJiBuZXh0RGVsaXZlcnlEYXRlKSA/IG5ldyBEYXRlKG5leHREZWxpdmVyeURhdGUpIDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBiZWZvcmVTaG93RGF5OiBtaW5kaWcgYWt0w612IGhhIHZhbiBtdW5rYW5hcHTDoXIgYWRhdCB2YWd5IGhhc0RlbGl2ZXJ5Q29uc3RyYWludFxuICAgICAgICAgICAgZGF0ZXBpY2tlck9wdHMuYmVmb3JlU2hvd0RheSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVTdHIgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgneXktbW0tZGQnLCBkYXRlKTtcblxuICAgICAgICAgICAgICAgIGxldCBob2xpZGF5RW50cnkgPSBob2xpZGF5cy5maW5kKGZ1bmN0aW9uKGgpIHsgcmV0dXJuIGguZGF0ZSA9PT0gZGF0ZVN0cjsgfSk7XG4gICAgICAgICAgICAgICAgbGV0IHdvcmtpbmdEYXlFbnRyeSA9IHdvcmtpbmdEYXlzLmZpbmQoZnVuY3Rpb24odykgeyByZXR1cm4gdy5kYXRlID09PSBkYXRlU3RyOyB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBpc0RlbGl2ZXJ5ID0gaGFzRGVsaXZlcnlDb25zdHJhaW50ICYmIGF2YWlsYWJsZURhdGVzLmluY2x1ZGVzKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNzc0NsYXNzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgdG9vbHRpcCA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RhYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChob2xpZGF5RW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKCd3b3JrLWNhbGVuZGFyLWhvbGlkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9ICfDnG5uZXBuYXAnICsgKGhvbGlkYXlFbnRyeS5kZXNjcmlwdGlvbiA/ICc6ICcgKyBob2xpZGF5RW50cnkuZGVzY3JpcHRpb24gOiAnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3b3JraW5nRGF5RW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKCd3b3JrLWNhbGVuZGFyLXdvcmtpbmctZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSAnw4F0aGVseWV6ZXR0IG11bmthbmFwJyArICh3b3JraW5nRGF5RW50cnkuZGVzY3JpcHRpb24gPyAnOiAnICsgd29ya2luZ0RheUVudHJ5LmRlc2NyaXB0aW9uIDogJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWxpdmVyeUNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsaXZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXMucHVzaCgnZGVsaXZlcnktZGF5LWF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b29sdGlwKSB0b29sdGlwID0gJ1N6w6FsbMOtdMOhc2kgbmFwJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXMucHVzaCgnZGVsaXZlcnktZGF5LXVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvb2x0aXApIHRvb2x0aXAgPSAnTmVtIHN6w6FsbMOtdMOhc2kgbmFwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIYSDDvG5uZXBuYXAgw6lzIGhhc0RlbGl2ZXJ5Q29uc3RyYWludCBuaW5jcyBiZWthcGNzb2x2YSwgYXogw7xubmVwbmFwIGlzIGxldGlsdGFuZMOzXG4gICAgICAgICAgICAgICAgaWYgKGhvbGlkYXlFbnRyeSAmJiAhaGFzRGVsaXZlcnlDb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW3NlbGVjdGFibGUsIGNzc0NsYXNzZXMuam9pbignICcpLCB0b29sdGlwXTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoZGF0ZXBpY2tlck9wdHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FsbENoYW5nZU9yZGVyVHlwZT1mdW5jdGlvbigpe1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy52YWx1ZSk7XG4gICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIC8vZW51bSgnZGFpbHknLCAnd2Vla2x5JylcbiAgICAgICAgLypsZXQgQ1NTU2VsZWN0b3JGb3JtPScub3JkZXJQYXJhbWV0ZXJGb3JtJztcbiAgICAgICAgbGV0IG5vZGU9JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpO1xuICAgICAgICBpZihub2RlLnZhbCgpLmxlbmd0aDwyKXtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLXZhbGlkJyk7XG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgICovXG4gICAgfVxuXG4gICAgdGhpcy5pbml0Vmlld1BhcmFtZXRlcj1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjYWxsIGluaXRWaWV3UGFyYW1ldGVyJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5kYXRlUGlja2VyQ2xpY2snKS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAub3JkZXJQYXJhbWV0ZXJEZWxpdmVyeUFkZHJlc3MnKS5zZWxlY3QyKHt9KS5zaG93KCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vZmYoJ2JsdXInKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9mZigna2V5dXAnKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9uKCdibHVyJyxyb290LmNoZWNrQ29udGFjdE5hbWVGaWVsZCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vbigna2V5dXAnLHJvb3QuY2hlY2tDb250YWN0TmFtZUZpZWxkKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9b3JkZXJUeXBlXScpLm9mZignY2hhbmdlJyk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1vcmRlclR5cGVdJykub24oJ2NoYW5nZScscm9vdC5jYWxsQ2hhbmdlT3JkZXJUeXBlKTtcblxuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyTmV4dEJ1dHRvbicpLm9mZignY2xpY2snKTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydpZCddPjApe1xuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXT09J3dlZWtseScpe1xuICAgICAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXSk7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rXCIgaW5wdXRbbmFtZT1vcmRlclR5cGVdW3ZhbHVlPVwiICsgT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXSArIFwiXVwiKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XG4gICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXREYXRlKGVuZERhdGUuZ2V0RGF0ZSgpICsgNik7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSwkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSggJ3l5LW1tLWRkJyxlbmREYXRlKSk7XG4gICAgICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignd2Vla2x5Jyk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKXtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoJ2RhaWx5Jyk7XG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2NvbnRhY3ROYW1lJ10pe1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS52YWwoT3JkZXIuZ2V0RGF0YSgpWydjb250YWN0TmFtZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnbm90ZSddKXtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoT3JkZXIuZ2V0RGF0YSgpWydub3RlJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeUFkZHJlc3NJZCddKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWRlbGl2ZXJ5QWRkcmVzc0lkXScpKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWRlbGl2ZXJ5QWRkcmVzc0lkXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5QWRkcmVzc0lkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydjdXN0b21Ob3RpZmljYXRpb25FbWFpbCddKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpKTtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2N1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoJ2RhaWx5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckRlbGl2ZXJ5QWRkcmVzcycpLnNlbGVjdDIoe30pLnNob3coKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAub3JkZXJQYXJhbWV0ZXJDdXN0b21Ob3RpZmljYXRpb25FbWFpbCcpLnNlbGVjdDIoe30pLnNob3coKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkuc3VibWl0KGZ1bmN0aW9uKGV2ZW50KXtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKCd2YWxpZGF0b24gZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgZGVidWcoJ3ZhbGlkYXRvbiBvaycpO1xuICAgICAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCkucmVwbGFjZUFsbCgnLScsJy4nKSsnLicpO1xuXG4gICAgICAgICAgICBPcmRlci5zZXREYXRhKHtcbiAgICAgICAgICAgICAgICBjb250YWN0TmFtZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykudmFsKCksXG4gICAgICAgICAgICAgICAgbm90ZTokKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoKSxcbiAgICAgICAgICAgICAgICBvcmRlclR5cGU6JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dDpjaGVja2VkW25hbWU9b3JkZXJUeXBlXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZGVsaXZlcnlEYXRlXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5QWRkcmVzc0lkOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzSWRdJykudmFsKCksXG4gICAgICAgICAgICAgICAgZGVsaXZlcnlBZGRyZXNzOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzXScpLnZhbCgpLFxuICAgICAgICAgICAgICAgIGN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9Y3VzdG9tTm90aWZpY2F0aW9uRW1haWxdJykudmFsKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3BhcmFtZXRlciBmb3JtIHN1Ym1pdCcpXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXQ6Y2hlY2tlZFtuYW1lPW9yZGVyVHlwZV0nKS52YWwoKSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCkpO1xuICAgICAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdwYXJhbWV0ZXInLHJvb3QuYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgdGhpcy5ibGFuaz1mdW5jdGlvbiAoKXt9O1xuICAgIHRoaXMuc2V0UGFyYW1ldGVyQ29tcGxldGVkPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFBhcmFtZXRlckNvbXBsZXRlZCBjYWxsZWQnKTtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcbiAgICAgICAgLy9yb290LmluaXRWaWV3UHJvZHVjdFNlbGVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUm93RmF2b3JpdGVzQWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkKCcuYnV0dG9uSXRlbUZhdm9yaXRlcycpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLmJ1dHRvbkl0ZW1GYXZvcml0ZXMnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgcHJvZHVjdElkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocHJvZHVjdElkKTtcblxuICAgICAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwudG9nZ2xlRmF2b3JpdGVzLnJlcGxhY2UoJyVpZCUnLHByb2R1Y3RJZCk7XG4gICAgICAgICAgICBsZXQgYWpheERhdGE9e307XG4gICAgICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcbiAgICAgICAgICAgIGxldCBidXR0b249dGhpcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IGFqYXhVcmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcbiAgICAgICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5hZGRDbGFzcygnYnRuLXdhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGJ1dHRvbikucmVtb3ZlQ2xhc3MoJ2J0bi1saWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLnJlbW92ZUNsYXNzKCdidG4td2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5hZGRDbGFzcygnYnRuLWxpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2J0bi13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2J0bi1saWdodCcpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUm93RGVzY3JpcHRpb25BY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoJ3RleHRhcmVhLm9yZGVySXRlbUNvbW1lbnQnKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBjb21tZW50PSQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBsZXQgcHJvZHVjdElkPSQodGhpcykuZGF0YSgnaWQnKTtcbiAgICAgICAgICAgIGxldCBwcm9kdWN0Q29tbWVudD1PcmRlci5nZXREYXRhKCdwcm9kdWN0Q29tbWVudCcpO1xuICAgICAgICAgICAgaWYocHJvZHVjdENvbW1lbnQhPT1udWxsKXtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdENvbW1lbnRbcHJvZHVjdElkXT09J3VuZGVmaW5lZCcgJiYgY29tbWVudC5sZW5ndGg9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPT09Y29tbWVudCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPWNvbW1lbnQ7XG4gICAgICAgICAgICBpZihjb21tZW50Lmxlbmd0aD09PTApe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT3JkZXIucHJvZHVjdENvbW1lbnQ9cHJvZHVjdENvbW1lbnQ7XG4gICAgICAgICAgICBxdWV1ZUFqYXgucHVzaChEYXRlLm5vdygpKTtcbiAgICAgICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGF0YWJsZXNSb3dGb3JtYXR0ZXI9ZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgLy8gYGRgIGlzIHRoZSBvcmlnaW5hbCBkYXRhIG9iamVjdCBmb3IgdGhlIHJvd1xuICAgICAgICAvKipcbiAgICAgICAgQHRvZG86IGZlbHN6ZWRuaSBlcyB1cGRhdGVsbmkgYXogYWRvdHQgdGVybWVrIG1lbW9qYXQgYXogb3JkZXJiYW5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3Byb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGQpO1xuICAgICAgICBsZXQgdGVtcGxhdGVEYXRhPWQ7XG4gICAgICAgIHRlbXBsYXRlRGF0YS5jb21tZW50PScnO1xuLy8gICAgICAgIGRlYnVnKE9yZGVyKTtcbiAgICAgICAgaWYoT3JkZXIucHJvZHVjdENvbW1lbnQgJiYgT3JkZXIucHJvZHVjdENvbW1lbnQhPT1udWxsKXtcbiAgICAgICAgICAgIGRlYnVnKHR5cGVvZiBPcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXSk7XG4gICAgICAgICAgICBpZih0eXBlb2YgT3JkZXIucHJvZHVjdENvbW1lbnRbZC5pZF0hPSd1bmRlZmluZWQnICYmIE9yZGVyLnByb2R1Y3RDb21tZW50W2QuaWRdLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZURhdGEuY29tbWVudD1PcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiogQHR5cGVkZWYge2Jvb2xlYW59IGQuZmF2b3JpdGVzICovXG4gICAgICAgIGlmKGQuZmF2b3JpdGVzPT09dHJ1ZSl7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuYnRuRmF2b3JpdGVzQ2xhc3M9J2J0bi13YXJuaW5nJztcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuYnRuRmF2b3JpdGVzQ2xhc3M9J2J0bi1saWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cIm9yZGVyUHJvZHVjdFNlbGVjdERldGFpbHNcIl0nKS5odG1sKClcbiAgICAgICAgdGVtcGxhdGVEYXRhLndlZWtseT1mYWxzZTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpLm9yZGVyVHlwZT09PSd3ZWVrbHknKXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHk9dHJ1ZTtcbi8qXG5cbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHlEYXk9W1xuICAgICAgICAgICAgICAgIHtcImluZGV4XCI6MSxcIm5hbWVcIjpcIkjDqXRmxZFcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjIsXCJuYW1lXCI6XCJLZWRkXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjozLFwibmFtZVwiOlwiU3plcmRhXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjo0LFwibmFtZVwiOlwiQ3PDvHTDtnJ0w7ZrXCJ9LFxuICAgICAgICAgICAge1wiaW5kZXhcIjo1LFwibmFtZVwiOlwiUMOpbnRla1wifSxcbiAgICAgICAgICAgIHtcImluZGV4XCI6NixcIm5hbWVcIjpcIlN6b21iYXRcIn0sXG4gICAgICAgICAgICB7XCJpbmRleFwiOjcsXCJuYW1lXCI6XCJWYXPDoXJuYXBcIn0sXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5RGF5PVtcbiAgICAgICAgICAgICAgICB7XCJpbmRleFwiOjIsXCJuYW1lXCI6XCJIw6l0ZsWRXCIgfSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJLZWRkXCJ9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlN6ZXJkYVwifSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJDc8O8dMO2cnTDtmtcIn0sXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiUMOpbnRla1wifSxcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJTem9tYmF0XCJ9LFxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlZhc8Ohcm5hcFwifVxuICAgICAgICAgICAgXTtcbiovXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZD1PcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKTtcbiAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtkLmlkXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLml0ZW1RdWFudGl0eT1wcm9kdWN0U2VsZWN0ZWRbZC5pZF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coWyd0ZW1wbGF0ZURhdGEnLHRlbXBsYXRlRGF0YV0pO1xuICAgICAgICBsZXQgb2xkVGFncz1NdXN0YWNoZS50YWdzO1xuICAgICAgICBNdXN0YWNoZS50YWdzID0gW1wifiFcIiwgXCIhflwiXTtcbiAgICAgICAgaWYodGVtcGxhdGVEYXRhWydzcGVjaWZpY2F0aW9uJ109PSdmYWxzZScgfHwgdGVtcGxhdGVEYXRhWydzcGVjaWZpY2F0aW9uJ109PWZhbHNlKXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5zcGVjaWZpY2F0aW9uQ2xhc3M9J2Qtbm9uZSc7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGVEYXRhLnBpY3R1cmVJbWc9Jyc7XG4gICAgICAgIGlmKHRlbXBsYXRlRGF0YVsncGljdHVyZSddPT0nZmFsc2UnIHx8IHRlbXBsYXRlRGF0YVsncGljdHVyZSddPT1mYWxzZSl7XG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEucGljdHVyZUNsYXNzPSdkLW5vbmUnO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5waWN0dXJlSW1nPSc8aW1nIHNyYz0gXCInK3RlbXBsYXRlRGF0YVsncGljdHVyZSddKydcIiBjbGFzcz1cInByb2R1Y3RQaWN0dXJlXCIgPjwvaW1nPic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3RlbXBsYXRlRGF0YScsdGVtcGxhdGVEYXRhKTtcbiAgICAgICAgLy90ZW1wbGF0ZURhdGFbJ2FhX3NwZWNpZmljYXRpb24nXT1mYWxzZTtcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsdGVtcGxhdGVEYXRhKTtcbiAgICAgICAgTXVzdGFjaGUudGFncyA9b2xkVGFncztcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuLypcbnNvbHV0aW9uIGJlZm9yZSB0ZW1wbGF0ZVxuICAgICAgICByZXR1cm4gJzx0YWJsZSBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6NTBweDtcIj4nK1xuICAgICAgICAgICAgJzx0cj4nK1xuICAgICAgICAgICAgJzx0ZD5JbmZvOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+JytkLm5vdGUrJzwvdGQ+JytcbiAgICAgICAgICAgICc8L3RyPicrXG4gICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAnPHRkPmhvb3JleWNhIDo8L3RkPicrXG4gICAgICAgICAgICAnPHRkPjxzcGFuIHN0eWxlPVwicGFkZGluZy1yaWdodDogMmVtO1wiPicrZC5ob29yZXljYUlkKyc8L3NwYW4+JyArXG5cbiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxcbicgK1xuICAgICAgICAgICAgJyAgICAgICAgZGF0YS1pZD1cIicrZC5pZCsnXCJcXG4nICtcbiAgICAgICAgICAgICcgICAgICAgIGNsYXNzPVwiYnV0dG9uSXRlbUZhdm9yaXRlcyBidG4gJytidG5GYXZvcml0ZXNDbGFzcysnXCI+XFxuJyArXG4gICAgICAgICAgICAnICAgIDxpIGNsYXNzPVwiYmkgYmktc3Rhci1maWxsIHByLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxuJyArXG4gICAgICAgICAgICAnICAgIEtlZHZlbmNcXG4nICtcbiAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICc8L3RkPicrXG4gICAgICAgICAgICAnPC90cj4nK1xuICAgICAgICAgICAgLyEqXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRkPkV4dGVuc2lvbiBudW1iZXI6PC90ZD4nK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZD4nK2QuZXh0bisnPC90ZD4nK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JytcbiAgICAgICAgICAgICohL1xuICAgICAgICAgICAgJzx0cj4nK1xuICAgICAgICAgICAgJzx0ZD5JbmZvOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+JytkLm5vdGUrJzwvdGQ+JytcbiAgICAgICAgICAgICc8L3RyPicrXG4gICAgICAgICAgICAnPHRyPicrXG4gICAgICAgICAgICAnPHRkPk1lZ2plZ3l6w6lzOjwvdGQ+JytcbiAgICAgICAgICAgICc8dGQ+PHRleHRhcmVhIGNsYXNzPVwib3JkZXJJdGVtQ29tbWVudFwiIGRhdGEtaWQ9XCInK2QuaWQrJ1wiPicrY29tbWVudCsnPC90ZXh0YXJlYT48L3RkPicrXG4gICAgICAgICAgICAnPC90cj4nK1xuICAgICAgICAgICAgLyEqXG4gICAgICAgICAgICAqIS9cbiAgICAgICAgICAgICc8L3RhYmxlPic7XG4qL1xuICAgIH1cblxuICAgIHRoaXMuc2V0RGF0YXRhYmxlSGVhZGVyVGV4dD1mdW5jdGlvbih0ZXh0KXtcbiAgICAgICAgJCgnLnRhYmxlSGVhZGVyVGV4dCcpLnRleHQodGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5nZXRUcmVlUGF0aE5hbWU9ZnVuY3Rpb24gKG5vZGUpe1xuICAgICAgICBsZXQgcmVzPScnO1xuICAgICAgICBsZXQgaXRlbXM9JChub2RlKS5wYXJlbnRzKCdsaScpLnRvQXJyYXkoKTtcbiAgICAgICAgaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gaW4gaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpKTtcbiAgICAgICAgICAgIGlmKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICByZXMrPSQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLnRleHQoKSsnLydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXMrPSQobm9kZSkudGV4dCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGxldCBzZWxlY3RlZFByb2R1Y3RHcm91cD1udWxsO1xuICAgIGxldCBkYXRhVGFibGVTZWFyY2hTdHI9bnVsbDtcbiAgICBsZXQgZGF0YVRhYmxlU2VhcmNoS3JlbD1mYWxzZTtcblxuICAgIHRoaXMuc2VhcmNoUHJvZHVjdEJ5U3RyaW5nPWZ1bmN0aW9uIChmaWx0ZXJTdHIpe1xuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOicrZmlsdGVyU3RyKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPWZpbHRlclN0cjtcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NlYXJjaFByb2R1Y3Q9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKHRoaXMpO1xuICAgICAgICBsZXQgZmlsdGVyU3RyPSQoJy5zaWRlYmFyLXNlYXJjaCBpbnB1dFtuYW1lPXNlYXJjaFZhbHVlXScpLnZhbCgpXG4gICAgICAgIGRlYnVnKGZpbHRlclN0cik7XG4gICAgICAgIHJvb3Quc2VhcmNoUHJvZHVjdEJ5U3RyaW5nKGZpbHRlclN0cik7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja0Zhdm9yaXRlc1Byb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja0Zhdm9yaXRlc1Byb2R1Y3QnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcubWVudUl0ZW1BY3RpdmUnKS5yZW1vdmVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZToga2VkdmVuY2VrJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipmYXZvcml0ZXMqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsaWNrT2Z0ZW5Qcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tPZnRlblByb2R1Y3QnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcubWVudUl0ZW1BY3RpdmUnKS5yZW1vdmVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygnbWVudUl0ZW1BY3RpdmUnKTtcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogZ3lha3JhbiB2w6Fzw6Fyb2x0Jyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipvZnRlbioqJztcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja1NwZWNpYWxPZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrU3BlY2lhbE9mZmVyJyk7XG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmluZCgnLm1lbnVJdGVtQWN0aXZlJykucmVtb3ZlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgICQodGhpcykucGFyZW50KCkudG9nZ2xlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IEFrY2nDs3MgdGVybcOpa2VrJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipzcGVjaWFsT2ZmZXIqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpY2tTcGVjaWFsQ2FydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrU3BlY2lhbENhcnQnKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKFwiLm1lbnVJdGVtQWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwibWVudUl0ZW1BY3RpdmVcIik7XG4gICAgICAgICQodGhpcykucGFyZW50KCkudG9nZ2xlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IEtvc8OhciB0ZXJtw6lrZWsnKTtcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKmNhcnQqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgIH1cblxuXG5cbiAgICB0aGlzLmNsaWNrTGFzdFByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlYnVnKCdjbGlja0xhc3RQcm9kdWN0Jyk7XG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmluZCgnLm1lbnVJdGVtQWN0aXZlJykucmVtb3ZlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgICQodGhpcykucGFyZW50KCkudG9nZ2xlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IHV0b2xqw6FyYSB2w6Fzw6Fyb2x0Jyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipsYXN0KionO1xuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcblxuICAgIH1cblxuICAgIHRoaXMuY2xpY2tXZWVrbHlQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tXZWVrbHlQcm9kdWN0Jyk7XG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmluZCgnLm1lbnVJdGVtQWN0aXZlJykucmVtb3ZlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgICQodGhpcykucGFyZW50KCkudG9nZ2xlQ2xhc3MoJ21lbnVJdGVtQWN0aXZlJyk7XG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IEhldGkgdGVybcOpa2VrJyk7XG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKip3ZWVrbHkqKic7XG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5jbGlja0tyZWxQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tLcmVsUHJvZHVjdCcpO1xuICAgICAgICAvL3Jvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IEhldGkgdGVybcOpa2VrJyk7XG4gICAgICAgIC8vZGF0YVRhYmxlU2VhcmNoU3RyPScqKndlZWtseSoqJztcbiAgICAgICAgLy8kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygna3JlbEFjdGl2ZScpO1xuICAgICAgICBkYXRhVGFibGVTZWFyY2hLcmVsPSFkYXRhVGFibGVTZWFyY2hLcmVsO1xuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW5EZWZzPWZ1bmN0aW9uICgpe1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1wid2lkdGhcIjogXCIxMHB4XCIsIFwidGFyZ2V0c1wiOiAwIH0sXG4gICAgICAgICAgICB7IFwiY2xhc3NOYW1lXCI6IFwiZHQtbGVmdFwiLCBcInRhcmdldHNcIjogMSB9LFxuLy8gICAgICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiMTIwcHhcIiwgXCJ0YXJnZXRzXCI6IDEgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjI4cHhcIiwgXCJ0YXJnZXRzXCI6IDIgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjQxcHhcIiwgXCJ0YXJnZXRzXCI6IDMgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjc2cHhcIiwgXCJ0YXJnZXRzXCI6IDQgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjU1cHhcIiwgXCJ0YXJnZXRzXCI6IDUgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjcwcHhcIiwgXCJ0YXJnZXRzXCI6IDYgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjU0cHhcIiwgXCJ0YXJnZXRzXCI6IDcgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjU3cHhcIiwgXCJ0YXJnZXRzXCI6IDggfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjQycHhcIiwgXCJ0YXJnZXRzXCI6IDkgfSxcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjEwMHB4XCIsIFwidGFyZ2V0c1wiOiAxMH0sXG4gICAgICAgICAgICB7XCJjbGFzc05hbWVcIjogXCJkdC1jZW50ZXJcIiwgXCJ0YXJnZXRzXCI6IFwiX2FsbFwifSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uPWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgY29sdW1uRGF0YT1bXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjbGFzc05hbWVcIjogICAgICAnZGV0YWlscy1jb250cm9sJyxcbiAgICAgICAgICAgICAgICBcIm9yZGVyYWJsZVwiOiAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBcImRlZmF1bHRDb250ZW50XCI6ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwia3JlbFwiIH0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInBhY2tpbmdcIn0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInVuaXRWYWx1ZVwiIH0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByb2R1Y3RVbml0XCJ9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJzZWxsZXJVbml0XCIgfSxcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwidW5pdE11bHRpcGxpZXJcIn0sXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcImFtb3VudFVuaXRcIiB9LFxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXG5cbiAgICAgICAgXTtcblxuICAgICAgICBsZXQgYWN0aW9uQ29sdW1uPXsgICAgICAgICAgICAgICAgXCJjbGFzc05hbWVcIjogICAgICAnZGV0YWlscy1jb250cm9sMicsXG4gICAgICAgICAgICBcIm9yZGVyYWJsZVwiOiAgICAgIGZhbHNlLFxuICAgICAgICAgICAgXCJkYXRhXCI6ICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXCJ3aWR0aFwiOiBcIjEwMHB4XCIsXG4gICAgICAgICAgICBcImRlZmF1bHRDb250ZW50XCI6JydcbiAgICAgICAgfTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgnb3JkZXJUeXBlJyk9PSdkYWlseScpe1xuICAgICAgICAgICAgYWN0aW9uQ29sdW1uLnJlbmRlciA9IGZ1bmN0aW9uIChkYXRhLCB0eXBlLCByb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAocm93LnN0b2NrX3N0YXR1cyA9PT0gJ291dF9vZl9zdG9jaycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8aW1nIHNyYz1cIi9pbWFnZXMvaWNvbnMvZGV0YWlsc19jbG9zZS5wbmdcIiB0aXRsZT1cIk5pbmNzIHJha3TDoXJvblwiIHN0eWxlPVwid2lkdGg6IDI0cHg7XCI+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIHZhbHVlPVwiMFwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5XCIgc3RlcD1cIjFcIiBkYXRhLWRlY2ltYWxzPVwiMVwiICBjbGFzcz1cImZvcm0tY29udHJvbC1zbSBpbnB1dE51bWJlclNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOiAxZW07XCIvPic7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbHVtbkRhdGEucHVzaChhY3Rpb25Db2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uRGF0YTtcbiAgICB9XG4gICAgdGhpcy5nZXREYXRhdGFibGVzPWZ1bmN0aW9uIChvcmRlclR5cGUpe1xuICAgICAgICBjb25zb2xlLmVycm9yKG9yZGVyVHlwZSk7XG4gICAgICAgIHZhciB0YWJsZSA9ICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IHtcbiAgICAgICAgICAgICAgICB1cmw6T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0LFxuICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZWFyY2hTdHI9ZGF0YVRhYmxlU2VhcmNoU3RyO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmtyZWw9ZGF0YVRhYmxlU2VhcmNoS3JlbDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5ncm91cElkPXNlbGVjdGVkUHJvZHVjdEdyb3VwO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnN1cHBsaWVySWQ9T3JkZXIuc3VwcGxpZXJJZDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5kZWxpdmVyeURhdGU9T3JkZXIuZGVsaXZlcnlEYXRlO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm9yZGVySWQ9T3JkZXIuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiByb290LnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW5EZWZzKCksXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogcm9vdC5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uKCksXG4gICAgICAgICAgICBcIm9yZGVyXCI6IFtbMSwgJ2FzYyddXSxcbiAgICAgICAgfSApO1xuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUPWZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vZGVidWcoICdUYWJsZSBkcmF3IGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XG5cbiAgICAgICAgLy8kKCd0ZDpjb250YWlucyhcIipcIiknKS5odG1sKCc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCI+PC9pPicpO1xuICAgICAgICAkKFwidGRcIikuZmlsdGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS50ZXh0KCkgPT09ICcqJztcbiAgICAgICAgfSkuaHRtbCgnPGkgY2xhc3M9XCJiaSBiaS1jaGVjay1jaXJjbGUtZmlsbFwiPjwvaT4nKTtcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpLm9yZGVyVHlwZT09J2RhaWx5Jyl7XG4gICAgICAgICAgICAkKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ10uaW5wdXROdW1iZXJTcGlubmVyXCIpLmlucHV0U3Bpbm5lcih7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6XG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgJHtncm91cENsYXNzfVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogJHtidXR0b25zV2lkdGh9XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWNyZW1lbnQgJHtidXR0b25zQ2xhc3N9XCIgdHlwZT1cImJ1dHRvblwiPiR7ZGVjcmVtZW50QnV0dG9ufTwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAvLyc8aW5wdXQgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJkZWNpbWFsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiAke3RleHRBbGlnbn1cIiBjbGFzcz1cInByb2R1Y3RRdWFudGl0eSBmb3JtLWNvbnRyb2xcIi8+JyArXG4gICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBzdGVwPVwiMC4xXCIgZGF0YS1kZWNpbWFscz1cIjJcIiBzdHlsZT1cInRleHQtYWxpZ246ICR7dGV4dEFsaWdufVwiIGNsYXNzPVwicHJvZHVjdFF1YW50aXR5IGZvcm0tY29udHJvbFwiLz4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gc3R5bGU9XCJtaW4td2lkdGg6ICR7YnV0dG9uc1dpZHRofVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taW5jcmVtZW50ICR7YnV0dG9uc0NsYXNzfVwiIHR5cGU9XCJidXR0b25cIj4ke2luY3JlbWVudEJ1dHRvbn08L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicsXG4gICAgICAgICAgICAgICAgYnV0dG9uc1dpZHRoOiBcIjAuNXJlbVwiLFxuICAgICAgICAgICAgICAgIGdyb3VwQ2xhc3M6IFwiXCIsIC8vIGNzcyBjbGFzcyBvZiB0aGUgcmVzdWx0aW5nIGlucHV0LWdyb3VwXG4gICAgICAgICAgICAgICAgYnV0dG9uc0NsYXNzOiBcImJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5iaW5kV2Vha1VzZXJIZWxwZXIoKTtcbiAgICAgICAgLypcbiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICBjaGFuZ2Ugb3JkZXIgcXVhbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGlucHV0W3R5cGU9dGV4dF1cIikub2ZmKCdjaGFuZ2UnKTtcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoZSl7XG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXF1YW50aXR5LnJlcGxhY2UoJywnLCcuJyk7XG4gICAgICAgICAgICBxdWFudGl0eT1wYXJzZUZsb2F0KHF1YW50aXR5KTtcbiAgICAgICAgICAgIGxldCByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3coJCh0aGlzKS5jbG9zZXN0KCd0cicpKS5kYXRhKCk7XG4gICAgICAgICAgICByb290Lm9yZGVySXRlbXNDaGFuZ2Uocm93RGF0YSxxdWFudGl0eSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5lYWNoKGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgLy9kZWJ1ZygnZXogYSBmdW5jdGlvbjInKVxuICAgICAgICAgICAgbGV0IHF1YW50aXR5PSQodGhpcykudmFsKCk7XG4gICAgICAgICAgICBsZXQgcm93RGF0YT0kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkucm93KCQodGhpcykuY2xvc2VzdCgndHInKSkuZGF0YSgpO1xuXG4gICAgICAgICAgICBpZihPcmRlci5wcm9kdWN0U2VsZWN0ZWRbcm93RGF0YS5pZF0pe1xuICAgICAgICAgICAgICAgIGRlYnVnKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIGRlYnVnKCQoJCh0aGlzKS5jbG9zZXN0KCd0cicpLmZpbmQoJ2lucHV0W3R5cGU9bnVtYmVyXScpWzBdKSk7XG4gICAgICAgICAgICAgICAgZGVidWcoT3JkZXIucHJvZHVjdFNlbGVjdGVkW3Jvd0RhdGEuaWRdKTtcbiAgICAgICAgICAgICAgICBsZXQgcXVhbnRpdHlDdXJyZW50PU9yZGVyLnByb2R1Y3RTZWxlY3RlZFtyb3dEYXRhLmlkXTtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcXVhbnRpdHlDdXJyZW50IT0nc3RyaW5nJyl7XG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5Q3VycmVudCs9Jyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoJCh0aGlzKS5jbG9zZXN0KCd0cicpLmZpbmQoJ2lucHV0W3R5cGU9bnVtYmVyXScpWzBdKS52YWwocXVhbnRpdHlDdXJyZW50LnJlcGxhY2UoJywnLCcuJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGJ1dHRvblwiKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGJ1dHRvblwiKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGRlYnVnKCcuZGV0YWlscy1jb250cm9sMiBidXR0b24gY2xpY2sgJylcbiAgICAgICAgICAgIC8vIGRlYnVnKHRoaXMpO1xuICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCdpbnB1dFt0eXBlPXRleHRdJykudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgdGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3Q9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZnVuY3Rpb25OYW1lPSdpbml0Vmlld1Byb2R1Y3RTZWxlY3QnO1xuICAgICAgICBjb25zb2xlLmxvZyhmdW5jdGlvbk5hbWUrJyBjYWxsZWQnKTtcbiAgICAgICAgaWYodmlld0luaWNpYWxpemVkLmluY2x1ZGVzKGZ1bmN0aW9uTmFtZSkpe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVidWcoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocm9vdCkpO1xuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJycpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpe319KTtcbiAgICAgICAgLy9Abm90ZTogYmUga2VsbCBrYXBjc29sbmkgYXogZWxvbmV6ZXRldFxuICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdpbnZvaWNlJyk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdpbnZvaWNlJyk7XG5cbiAgICAgICAgLy8gw4lydsOpbnl0ZWxlbiBzesOhbGzDrXTDoXNpIGTDoXR1bSBlc2V0w6luIFRvYXN0IGZpZ3llbG1lenRldMOpcyBtZWdqZWxlbsOtdMOpc2UuXG4gICAgICAgIHJvb3QuY2hlY2tEZWxpdmVyeURhdGVUb2FzdCgpO1xuXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xuICAgICAgICAvL2NvbnNvbGUubG9nKE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCk7Y2hhbmdlXG4gICAgICAgIGRlYnVnKChDU1NTZWxlY3RvckZvcm0rJyAuZmEtc2VhcmNoJykpO1xuXG4gICAgICAgICQoJy5zaWRlYmFyLXNlYXJjaCAuZmEtc2VhcmNoJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggLmZhLXNlYXJjaCcpLm9uKCdjbGljaycscm9vdC5jbGlja1NlYXJjaFByb2R1Y3QpO1xuXG4gICAgICAgICQoJ2Euc2lkZWJhci5mYXZvcml0ZXMnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5mYXZvcml0ZXMnKS5vbignY2xpY2snLHJvb3QuY2xpY2tGYXZvcml0ZXNQcm9kdWN0KTtcblxuICAgICAgICAkKCdhLnNpZGViYXIub2Z0ZW4nKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5vZnRlbicpLm9uKCdjbGljaycscm9vdC5jbGlja09mdGVuUHJvZHVjdCk7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLmxhc3QnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5sYXN0Jykub24oJ2NsaWNrJyxyb290LmNsaWNrTGFzdFByb2R1Y3QpO1xuXG4gICAgICAgICQoJ2Euc2lkZWJhci53ZWVrbHknKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci53ZWVrbHknKS5vbignY2xpY2snLHJvb3QuY2xpY2tXZWVrbHlQcm9kdWN0KTtcblxuICAgICAgICAkKCdhLnNpZGViYXIua3JlbCcpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLmtyZWwnKS5vbignY2xpY2snLHJvb3QuY2xpY2tLcmVsUHJvZHVjdCk7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLnNwZWNpYWxPZmZlcicpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnYS5zaWRlYmFyLnNwZWNpYWxPZmZlcicpLm9uKCdjbGljaycscm9vdC5jbGlja1NwZWNpYWxPZmZlcik7XG5cbiAgICAgICAgJCgnYS5zaWRlYmFyLmNhcnQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJ2Euc2lkZWJhci5jYXJ0Jykub24oJ2NsaWNrJyxyb290LmNsaWNrU3BlY2lhbENhcnQpO1xuXG5cblxuXG4gICAgICAgICQoJy5zaWRlYmFyLXNlYXJjaCBpbnB1dFtuYW1lPXNlYXJjaFZhbHVlXScpLm9mZigna2V5cHJlc3MnKTtcbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIGlucHV0W25hbWU9c2VhcmNoVmFsdWVdJykub24oJ2tleXByZXNzJyxmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gMTMgKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCQodGhpcykudmFsKCkubGVuZ3RoPj0yKXtcbiAgICAgICAgICAgICAgICByb290LnNlYXJjaFByb2R1Y3RCeVN0cmluZygkKHRoaXMpLnZhbCgpK2V2ZW50LmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cblxuICAgICAgICAkKCcuc2lkZWJhci13cmFwcGVyIGEuY2F0ZWdvcnlJdGVtLmNhdGVnb3J5UGFyZW50Jykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuc2lkZWJhci13cmFwcGVyIGEuY2F0ZWdvcnlJdGVtLmNhdGVnb3J5UGFyZW50Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICQodGhpcykubmV4dCgndWwuc3ViZ3JvdXAtbGlzdCcpLnNsaWRlVG9nZ2xlKDIwMCk7XG4gICAgICAgICAgICAkKHRoaXMpLnRvZ2dsZUNsYXNzKCdvcGVuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJy5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnLnNpZGViYXItd3JhcHBlciAuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub24oJ2NsaWNrJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBJZD0kKHRoaXMpLmRhdGEoJ2lkJyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9Z3JvdXBJZDtcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9bnVsbDtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhncm91cElkKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XG4gICAgICAgICAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcbi8qXG4gICAgICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgJ2dyb3VwSWQnOmdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgICdzdXBwbGllcl9pZCc6T3JkZXIuc3VwcGxpZXJJZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXguZGF0YShhamF4RGF0YSkubG9hZCgpO1xuXG4qL1xuLypcbiAgICAgICAgICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QrJz9ncm91cElkPScrZ3JvdXBJZCsnJnN1cHBsaWVyX2lkPScrT3JkZXIuc3VwcGxpZXJJZDtcbiAgICAgICAgICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC51cmwoYWpheFVybCkubG9hZCgpO1xuKi9cbiAgICAgICAgICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgbGV0IHRhYmxlID0gcm9vdC5nZXREYXRhdGFibGVzKE9yZGVyLmdldERhdGEoJ29yZGVyVHlwZScpKTtcblxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdpbml0LmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coICdUYWJsZSBpbml0aWFsaXNhdGlvbiBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xuICAgICAgICB9ICkuZGF0YVRhYmxlKCk7XG5cblxuXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2RyYXcuZHQnLHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCkuZGF0YVRhYmxlKCk7XG5cbiAgICAgICAgLy8kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdkcmF3LmR0JywgICkuZGF0YVRhYmxlKCk7XG5cbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLm9uKCAneGhyLmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVidWcoICdUYWJsZSB4aHIgY29tcGxldGU6ICcrbmV3IERhdGUoKS5nZXRUaW1lKCkgKTtcbiAgICAgICAgfSApLmRhdGFUYWJsZSgpO1xuXG4gICAgICAgIC8vJChcImlucHV0W3R5cGU9J251bWJlciddLmlucHV0TnVtYmVyU3Bpbm5lclwiKS5pbnB1dFNwaW5uZXIoKTtcblxuLypcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV0YWlsc1xuICovXG5cbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdHIgPSAkKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgICAgICBsZXQgcm93ID0gdGFibGUucm93KCB0ciApO1xuXG4gICAgICAgICAgICBpZiAoIHJvdy5jaGlsZC5pc1Nob3duKCkgKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyByb3cgaXMgYWxyZWFkeSBvcGVuIC0gY2xvc2UgaXRcbiAgICAgICAgICAgICAgICByb3cuY2hpbGQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHRyLnJlbW92ZUNsYXNzKCdzaG93bicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3BlbiB0aGlzIHJvd1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZCggcm9vdC5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcihyb3cuZGF0YSgpKSApLnNob3coKTtcbiAgICAgICAgICAgICAgICB0ci5hZGRDbGFzcygnc2hvd24nKTtcbiAgICAgICAgICAgICAgICByb290LmJpbmRQcm9kdWN0RGV0YWlsc0FjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICAgIHZpZXdJbmljaWFsaXplZC5wdXNoKGZ1bmN0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUHJvZHVjdERldGFpbHNBY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJvb3QuYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uKCk7XG4gICAgICAgIHJvb3QuYmluZFJvd0Zhdm9yaXRlc0FjdGlvbigpO1xuICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddPT0nd2Vla2x5Jyl7XG4gICAgICAgICAgICByb290LmJpbmRPcmRlckl0ZW1XZWVrUXVhbnRpdHkoKTtcbiAgICAgICAgfVxuICAgfVxuXG4gICAgdGhpcy5iaW5kV2Vha1VzZXJIZWxwZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoIFwiaW5wdXQuaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vZmYoIFwiZm9jdXNcIik7XG4gICAgICAgICQoIFwiaW5wdXQuaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vbiggXCJmb2N1c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgcXVhbnRpdHk9cXVhbnRpdHkucmVwbGFjZSgnLCcsJy4nKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXBhcnNlRmxvYXQocXVhbnRpdHkpO1xuICAgICAgICAgICAgaWYocXVhbnRpdHk9PT0wKXtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgnJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQoIFwiaW5wdXRbdHlwZT10ZXh0XS5pbnB1dE51bWJlclNwaW5uZXJcIiApLm9mZiggXCJrZXlwcmVzc1wiKTtcbiAgICAgICAgJCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICkub24oIFwia2V5cHJlc3NcIiwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gMTMgKSB7XG4vLyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlbnRlciBwcmVzc2VkJyk7XG4gICAgICAgICAgICAgICAgbGV0IGFjdHVhbEl0ZW09dGhpcztcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXM9JCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICk7XG4gICAgICAgICAgICAgICAgaXRlbXMuZWFjaChmdW5jdGlvbiAoaXRlbSl7XG4vLyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXM9PWFjdHVhbEl0ZW0pe1xuLy8gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbSsxPD1pdGVtcy5sZW5ndGgpe1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihpdGVtc1tpdGVtKzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGl0ZW1zW2l0ZW0rMV0pLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kT3JkZXJJdGVtV2Vla1F1YW50aXR5PWZ1bmN0aW9uICgpe1xuICAgICAgICAkKFwiaW5wdXQucHJvZHVjdFNlbGVjdERheVF1YW50aXR5XCIpLm9mZignY2hhbmdlJyk7XG4gICAgICAgICQoXCJpbnB1dC5wcm9kdWN0U2VsZWN0RGF5UXVhbnRpdHlcIikub24oJ2NoYW5nZScsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5uYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdkYXlpbmRleCcpKTtcblxuICAgICAgICAgICAgbGV0IHJvd0RhdGE9bnVsbDtcbiAgICAgICAgICAgIGxldCByb3dOb2RlPSQoJCh0aGlzKS5jbG9zZXN0KCd0YWJsZS5vcmRlclByb2R1Y3RTZWxlY3RSb3dEZXRhaWxzVGFibGUnKS5jbG9zZXN0KCd0cicpKS5wcmV2KCk7XG4gICAgICAgICAgICByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3cocm93Tm9kZSkuZGF0YSgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm93RGF0YSk7XG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIHF1YW50aXR5PXF1YW50aXR5LnJlcGxhY2UoJywnLCcuJyk7XG4gICAgICAgICAgICBxdWFudGl0eT1wYXJzZUZsb2F0KHF1YW50aXR5KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgcm9vdC5vcmRlckl0ZW1zQ2hhbmdlKHJvd0RhdGEscXVhbnRpdHksJCh0aGlzKS5kYXRhKCdkYXlpbmRleCcpKTtcbi8vICAgICAgICAgICAgcm9vdC5vcmRlckl0ZW1zQ2hhbmdlXG4gICAgICAgICAgICAvL29yZGVySXRlbXNDaGFuZ2VcbiAgICAgICAgICAgIC8vcXVhbnRpdHlbMTY4M11bMV1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vcm9vdC50b2dnbGVFbmFibGVTZW5kKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ21vc3QgdmVnemV0dC4gZW5ueWl0IGtpc3plZCcrYmF0Y2hOdW0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8cXVldWVBamF4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc2hpZnRlbCcpXG4gICAgICAgICAgICBxdWV1ZUFqYXguc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdyZW1haW5pbmcgbGVmdCAnK3F1ZXVlQWpheC5sZW5ndGgpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBzeW5jRG9pbmc9ZmFsc2U7XG4gICAgICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xuICAgICAgICB9LCBPcHRzLmRhdGFTeW5jUGF1c2VUaW1lKTtcbiAgICB9XG4gICAgbGV0IHF1ZXVlQWpheD1bXTtcbiAgICBsZXQgc3luY0RvaW5nPWZhbHNlO1xuXG4gICAgdGhpcy5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXI9ZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2RlYnVnKHF1ZXVlQWpheCk7XG4gICAgICAgIGlmKHN5bmNEb2luZyl7XG4gICAgICAgICAgICAvL2RlYnVnKCdzeW5jIGluIHByb2dyZXNzLi4uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHF1ZXVlQWpheC5sZW5ndGg8MSl7XG4gICAgICAgICAgICByZXR1cm4gO1xuICAgICAgICB9XG4gICAgICAgIHN5bmNEb2luZz10cnVlO1xuXG4gICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdwcm9kdWN0U2VsZWN0Jyxyb290LmFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyKTtcbiAgICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLm9yZGVySXRlbXNDaGFuZ2U9ZnVuY3Rpb24oSXRlbURhdGEscXVhbnRpdHksZGF5SW5kZXgpe1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgICAgICAgY29uc29sZS5sb2coSXRlbURhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZyhxdWFudGl0eSk7XG4gICAgICAgIGNvbnNvbGUubG9nKE9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpKTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tJyk7XG4vKlxuKi9cbiAgICAgICAgaWYoaXNOYU4ocXVhbnRpdHkpKXtcbiAgICAgICAgICAgIHF1YW50aXR5PTA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZD1PcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKTtcbiAgICAgICAgY29uc29sZS5ncm91cCgnb3JkZXJJdGVtc0NoYW5nZScpO1xuICAgICAgICBjb25zb2xlLmxvZyhbJ3Byb2R1Y3RTZWxlY3RlZCcscHJvZHVjdFNlbGVjdGVkXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEnLEl0ZW1EYXRhXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEuaWQnLEl0ZW1EYXRhLmlkXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsncXVhbnRpdHknLHF1YW50aXR5XSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnZGF5SW5kZXgnLGRheUluZGV4XSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF0pO1xuXG4gICAgICAgIGxldCBwcm9kdWN0U2VsZWN0ZWRJdGVtPXByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF07XG4gICAgICAgIC8qXG4gICAgICAgIGhhIDAgZXJ0ZWsgam9uIGVzIG5lbSBpcyB2b2x0IGFra29yIGhhbWFyIGtpdWdyYXRqdWtcbiAgICAgICAgICovXG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3F1YW50aXR5PT0wJyk7XG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkSXRlbT09J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaXR0IGxlcDEnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbiBkYXlJbmRleCcpXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFsncHJvZHVjdFNlbGVjdGVkSXRlbScscHJvZHVjdFNlbGVjdGVkSXRlbV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpdHQgbGVwMicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgaGEgYXpvbm9zIGF6IGVydGVrIGtpdWdydW5rXG4gICAgICAgICAqL1xuICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXSE9J3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICBpZihwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhem9ub3MgbmFwaScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2F6b25vcycpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWFudGl0eT09MCl7XG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBoYSB2YW4gZXJ0ZWsgZXJ0ZWtldCBhZHVuayFcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYoZGF5SW5kZXgpe1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09W107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXQgcXVhbnRpdHkgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0nLHF1YW50aXR5KTtcbiAgICAgICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT1xdWFudGl0eTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NldCBxdWFudGl0eSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdJyxxdWFudGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coWydwcm9kdWN0U2VsZWN0ZWQnLHByb2R1Y3RTZWxlY3RlZF0pO1xuICAgICAgICBPcmRlci5wcm9kdWN0U2VsZWN0ZWQ9cHJvZHVjdFNlbGVjdGVkO1xuXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgcXVldWVBamF4LnB1c2goRGF0ZS5ub3coKSk7XG4gICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuXG5cbiAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xuICAgICAgICAgICAgZGVidWcoJ2l0dCBsZXAxMicpO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcbiAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xuICAgICAgICB9XG4gICAgICAgIE9yZGVyLnByb2R1Y3RTZWxlY3RlZD1wcm9kdWN0U2VsZWN0ZWQ7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHF1ZXVlQWpheC5wdXNoKERhdGUubm93KCkpO1xuICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpKTtcbiAgICAgICAgZGVidWcoJyoqKioqKioqKioqKioqKioqKionKTtcbiovXG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdJbnZvaWNlPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcblxuICAgICAgICBpZihPYmplY3Qua2V5cyhPcmRlci5wcm9kdWN0U2VsZWN0ZWQpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3NlbmQnKTtcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdzZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0eWxlU3RyPSc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIicrT3B0cy5VUkwucm9vdCsnL2Nzcy9pbnZvaWNlLmNzc1wiPic7XG4gICAgICAgICQoJ3RhYmxlLmludm9pY2UgYnV0dG9uLnByaW50QnV0dG9uJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCd0YWJsZS5pbnZvaWNlIGJ1dHRvbi5wcmludEJ1dHRvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LnByaW50KCk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBuZXdXaW49IHdpbmRvdy5vcGVuKFwiXCIpO1xuICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHN0eWxlU3RyKTtcbiAgICAgICAgICAgIGxldCBwcmludD0kKCd0YWJsZS5pbnZvaWNlJykuY2xvbmUoKTtcbiAgICAgICAgICAgIHByaW50LmZpbmQoJ2J1dHRvbi5wcmludEJ1dHRvbicpLnJlbW92ZSgpO1xuLy8gICAgICAgICAgICBuZXdXaW4uZG9jdW1lbnQud3JpdGUoJCgndGFibGUuaW52b2ljZScpLnByb3AoJ291dGVySFRNTCcpKTtcbiAgICAgICAgICAgIG5ld1dpbi5kb2N1bWVudC53cml0ZShwcmludC5wcm9wKCdvdXRlckhUTUwnKSk7XG4gICAgICAgICAgICBuZXdXaW4ucHJpbnQoKTtcbiAgICAgICAgICAgbmV3V2luLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIMOJcnbDqW55dGVsZW4gc3rDoWxsw610w6FzaSBkw6F0dW0gZXNldMOpbiBUb2FzdCBmaWd5ZWxtZXp0ZXTDqXMgbWVnamVsZW7DrXTDqXNlLlxuICAgICAgICByb290LmNoZWNrRGVsaXZlcnlEYXRlVG9hc3QoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0T3JkZXI9ZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmluaXQoKTtcbiAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJy0nKTtcbiAgICAgICAgcm9vdC5zZXRTdXBwbGllcignLScpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5hZnRlck9yZGVyU2VuZE9rPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNlbnQhXCIsIG1lc3NhZ2U6ICdPcmRlciBTZW50JyAsIHN0YXR1czogVE9BU1RfU1RBVFVTLklORk8sIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5wcm9wKCdkaXNhYmxlZCcsdHJ1ZSk7XG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS5yZW1vdmVDbGFzcygnc3RhdHVzQmxpbmsnKTtcbiAgICAgICAgJCgnLnN0YXR1c05hbWVQbGFjZScpLnRleHQoJ2Vsa8O8bGR2ZScpO1xuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kT2snKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICQoJ2Rpdi5pbnZvaWNlQ29udGFpbmVyJykuaHRtbChkYXRhLnJldEhUTUwpO1xuICAgICAgICAvL3Jvb3QucmVzZXRPcmRlcigpO1xuICAgIH1cbiAgICB0aGlzLmFmdGVyT3JkZXJTZW5kRXJyb3I9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZGluZycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJC5lYWNoKEFQUC5PcmRlck1vZHVsZS5TdGVwcGVyLmdldE9wdHMoKS5hdmFpbGFibGUsZnVuY3Rpb24gKGluZGV4LHZhbHVlKSB7XG4gICAgICAgICAgICBBUFAuT3JkZXJNb2R1bGUuU3RlcHBlci5zZXRFbmFibGVkKHZhbHVlKTtcbiAgICAgICAgICAgIEFQUC5PcmRlck1vZHVsZS5TdGVwcGVyLnNldENvbXBsZXRlZCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEEgc3rDoWxsw610w6FzaSBkw6F0dW0gYSBrw7xsZMOpcyBwaWxsYW5hdMOhYmFuIG3DoXIgw6lydsOpbnl0ZWxlbiAocGwuIHBpc3prb3phdCBpZMWRa8O2emJlbmkgdsOhbHRvesOhcykuXG4gICAgICAgIGlmKGRhdGEgJiYgZGF0YS5lcnJvckNvZGUgPT09ICdJTlZBTElEX0RFTElWRVJZX0RBVEUnKXtcbiAgICAgICAgICAgIHJvb3Quc2hvd0ludmFsaWREZWxpdmVyeURhdGUoZGF0YS5zdWdnZXN0ZWREZWxpdmVyeURhdGUgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbGxlbsWRcnppIGEgc3rDoWxsw610w6FzaSBkw6F0dW1vdCDDqXMgaGEgw6lydsOpbnl0ZWxlbiwgVG9hc3Qgw7x6ZW5ldGV0IGplbGVuw610IG1lZy5cbiAgICAgKiBDc2FrIGEgcHJvZHVjdFNlbGVjdCDDqXMgaW52b2ljZSBuw6l6ZXRla2LFkWwgaMOtdmhhdMOzIOKAkyBhIHNlbmQgbsOpemV0YmVuIGEgdG9nZ2xlRW5hYmxlU2VuZCB2w6lnemkgZXp0LlxuICAgICAqL1xuICAgIHRoaXMuY2hlY2tEZWxpdmVyeURhdGVUb2FzdD1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghT3JkZXIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5jaGVja1JlYWR5VG9TZW5kLnJlcGxhY2UoJyVpZCUnLE9yZGVyLmlkKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmKGRhdGEgJiYgZGF0YS5zdWNjZXNzICYmIGRhdGEud2h5ICYmICQuaW5BcnJheSgnZGVsaXZlcnlEYXRlJywgZGF0YS53aHkpICE9PSAtMSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWdnZXN0ZWQgPSBkYXRhLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3VnZ2VzdGVkSHVtYW4gPSBzdWdnZXN0ZWQgPyBzdWdnZXN0ZWQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICdBIGtpdsOhbGFzenRvdHQgc3rDoWxsw610w6FzaSBkw6F0dW0gbcOhciBuZW0gbWVnZmVsZWzFkS4nO1xuICAgICAgICAgICAgICAgICAgICBpZihzdWdnZXN0ZWRIdW1hbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICcgSmF2YXNvbHQgw7pqIGTDoXR1bTogJyArIHN1Z2dlc3RlZEh1bWFuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIsOJcnbDqW55dGVsZW4gc3rDoWxsw610w6FzaSBkw6F0dW1cIiwgbWVzc2FnZTogbWVzc2FnZSwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuV0FSTklORywgdGltZW91dDogODAwMCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lZ2plbGVuw610aSBhIHNlbmQgbsOpemV0ZW4gYXogw6lydsOpbnl0ZWxlbiBzesOhbGzDrXTDoXNpIGTDoXR1bSBmaWd5ZWxtZXp0ZXTDqXN0IGEgamF2YXNvbHQgw7pqIGTDoXR1bW1hbCxcbiAgICAgKiDDqXMgbGV0aWx0amEgYSBcIk1FR1JFTkRFTMOJU1QgRUxLw5xMRMOWTVwiIGdvbWJvdCwgYW3DrWcgYSBmZWxoYXN6bsOhbMOzIG5lbSBoYWd5amEgasOzdsOhIGF6IMO6aiBkw6F0dW1vdC5cbiAgICAgKi9cbiAgICB0aGlzLnNob3dJbnZhbGlkRGVsaXZlcnlEYXRlPWZ1bmN0aW9uIChzdWdnZXN0ZWQpIHtcbiAgICAgICAgbGV0IHN1Z2dlc3RlZEh1bWFuID0gc3VnZ2VzdGVkID8gc3VnZ2VzdGVkLnJlcGxhY2VBbGwoJy0nLCAnLicpICsgJy4nIDogJy0nO1xuICAgICAgICAkKCcuc3VnZ2VzdGVkRGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KHN1Z2dlc3RlZEh1bWFuKTtcbiAgICAgICAgJCgnLmludmFsaWREZWxpdmVyeURhdGVXYXJuaW5nJykuZGF0YSgnc3VnZ2VzdGVkLWRhdGUnLCBzdWdnZXN0ZWQgfHwgJycpO1xuICAgICAgICAkKCcuaW52YWxpZERlbGl2ZXJ5RGF0ZVdhcm5pbmcnKS5yZW1vdmVDbGFzcygnZC1ub25lJykuYWRkQ2xhc3MoJ2QtZmxleCcpO1xuXG4gICAgICAgIC8vIEFtw61nIGEgZmVsaGFzem7DoWzDsyBuZW0gaGFneWphIGrDs3bDoSBheiDDumogZMOhdHVtb3QsIGF6IGVsa8O8bGTDqXMgZ29tYiBzZSBuZSBsw6F0c3N6b24sIHNlIG5lIGxlZ3llbiBha3TDrXYuXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5hZGRDbGFzcygnZC1ub25lJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblxuICAgICAgICAvLyBBIGphdmFzbGF0IG1lZ2zDqXTDqXTFkWwgZsO8Z2fFkWVuIMOhbGzDrXRqdWsgYmUgYSBqw7N2w6FoYWd5w7MgZ29tYm90LlxuICAgICAgICBpZihzdWdnZXN0ZWQpe1xuICAgICAgICAgICAgJCgnLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZUJsb2NrJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmJ1dHRvbkFwcHJvdmVTdWdnZXN0ZWREYXRlJykudGV4dCgnSsOzdsOhaGFneW9tIMOpcyBtw7Nkb3PDrXRvbSBhIGTDoXR1bW90Jyk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgJCgnLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZUJsb2NrJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmJ1dHRvbkFwcHJvdmVTdWdnZXN0ZWREYXRlJykudGV4dCgnw5pqIHN6w6FsbMOtdMOhc2kgZMOhdHVtIHbDoWxhc3p0w6FzYScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnQSBraXbDoWxhc3p0b3R0IHN6w6FsbMOtdMOhc2kgZMOhdHVtIG3DoXIgbmVtIG1lZ2ZlbGVsxZEuJztcbiAgICAgICAgaWYoc3VnZ2VzdGVkKXtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gJyBKYXZhc29sdCDDumogZMOhdHVtOiAnICsgc3VnZ2VzdGVkSHVtYW47XG4gICAgICAgIH1cbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiw4lydsOpbnl0ZWxlbiBzesOhbGzDrXTDoXNpIGTDoXR1bVwiLCBtZXNzYWdlOiBtZXNzYWdlLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5XQVJOSU5HLCB0aW1lb3V0OiA4MDAwIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZmVsaGFzem7DoWzDsyBqw7N2w6FoYWd5amEgYSBqYXZhc29sdCDDumogc3rDoWxsw610w6FzaSBkw6F0dW1vdDogdmlzc3phbmF2aWfDoWx1bmsgYSBwYXJhbcOpdGVyXG4gICAgICogKG5hcHTDoXIpIGzDqXDDqXNoZXosIGFob2wgYXogw7pqIGTDoXR1bSBsZXN6IGVsxZF2w6FsYXN6dHZhLCDDrWd5IG9ubmFuIMO6anJhIHbDqWdpZ3ZpaGV0xZEgYSBmb2x5YW1hdC5cbiAgICAgKi9cbiAgICB0aGlzLmFwcHJvdmVTdWdnZXN0ZWREZWxpdmVyeURhdGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3VnZ2VzdGVkID0gJCgnLmludmFsaWREZWxpdmVyeURhdGVXYXJuaW5nJykuZGF0YSgnc3VnZ2VzdGVkLWRhdGUnKTtcbiAgICAgICAgaWYoc3VnZ2VzdGVkKXtcbiAgICAgICAgICAgIE9yZGVyLnNldERhdGEoe2RlbGl2ZXJ5RGF0ZTogc3VnZ2VzdGVkfSk7XG4gICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShzdWdnZXN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgICQoJy5pbnZhbGlkRGVsaXZlcnlEYXRlV2FybmluZycpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgIC8vIEEga8O8bGTDqXMgZ29tYm90IGNzYWsgYWtrb3IgZW5nZWRqw7xrIMO6anJhLCBoYSBhIGZlbGhhc3puw6Fsw7MgYSBwYXJhbcOpdGVyIGzDqXDDqXNiZW5cbiAgICAgICAgLy8gw6lydsOpbnllcyBkw6F0dW1vdCB2w6FsYXN6dCDigJMgZXrDqXJ0IGl0dCB2aXNzemFuYXZpZ8OhbHVuayBhIG5hcHTDoXJob3ouXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5yZW1vdmVDbGFzcygnZC1ub25lJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3BhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdTZW5kPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2luaXRWaWV3U2VuZCBjYWxsZWQgMicpO1xuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xuXG4gICAgICAgIC8vIEZpZ3llbG1lenRldMWRIHBhbmVsIGFsYXBoZWx5emV0YmUgw6FsbMOtdMOhc2Egw6lzIGEgasOzdsOhaGFnecOhcyBnb21iIGJla8O2dMOpc2UuXG4gICAgICAgIC8vIEEga8O8bGTDqXMgZ29tYm90IHN6w6FuZMOpa29zYW4gTkVNIHRlc3N6w7xrIGzDoXRoYXTDs3bDoSBpdHQg4oCTIGEgdG9nZ2xlRW5hYmxlU2VuZCgpXG4gICAgICAgIC8vIGFzemlua3JvbiBjaGVja1JlYWR5VG9TZW5kIHbDoWxhc3phIGZvZ2phIGEgdsOpZ3PFkSDDoWxsYXBvdG90IGJlw6FsbMOtdGFuaS5cbiAgICAgICAgJCgnLmludmFsaWREZWxpdmVyeURhdGVXYXJuaW5nJykucmVtb3ZlQ2xhc3MoJ2QtZmxleCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLmFkZENsYXNzKCdkLW5vbmUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAkKCcuYnV0dG9uQXBwcm92ZVN1Z2dlc3RlZERhdGUnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25BcHByb3ZlU3VnZ2VzdGVkRGF0ZScpLm9uKCdjbGljaycsIHJvb3QuYXBwcm92ZVN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZSk7XG5cbiAgICAgICAgLy8gUHJvYWt0w612IFVYLWVsbGVuxZFyesOpczogYSBzZW5kIG7DqXpldCBiZXTDtmx0w6lzZWtvciBqZWxlenrDvGssIGhhIGEgc3rDoWxsw610w6FzaSBkw6F0dW1cbiAgICAgICAgLy8gaWTFkWvDtnpiZW4gw6lydsOpbnl0ZWxlbm7DqSB2w6FsdCwgw6lzIGZlbGFqw6FubGp1ayBhIGvDtnZldGtlesWRIMOpcnbDqW55ZXMgZMOhdHVtb3QuXG4gICAgICAgIHJvb3QudG9nZ2xlRW5hYmxlU2VuZCgpO1xuXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZW5kIGJ1dG9uIGNsaWNrZWQnKTtcbiAgICAgICAgICAgIC8vQHRvZG86IGRhdGFzeW5jaGVyZSBhbmQgY2FsbGJhY2tcbiAgICAgICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBQTTE1OFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkLmVhY2goQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuZ2V0T3B0cygpLmF2YWlsYWJsZSxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRFbmFibGVkKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvKipcblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByb290LnNlbmRPcmRlckRhdGFUb1NlcnZlcignc2VuZCcscm9vdC5hZnRlck9yZGVyU2VuZE9rLHJvb3QuYWZ0ZXJPcmRlclNlbmRFcnJvcik7XG5cbi8qICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xuICAgICAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgICAgICBhamF4RGF0YS5zZW5kPXRydWU7XG4gICAgICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5zdG9yZSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3Mpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hZnRlck9yZGVyU2VuZE9rKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLnRlc3RNb2RlU2VuZD1mdW5jdGlvbiAoKSB7XG5cbiAgICB9XG5cblxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygndGVzdE1vZGUgY2FsbGVkICcpXG4gICAgICAgIE9yZGVyLnNldERhdGEoe1xuICAgICAgICAgICAgaWQ6MjM0LFxuICAgICAgICAgICAgc3VwcGxpZXJJZDo3LFxuICAgICAgICAgICAgcHJvZHVjdFNlbGVjdGVkOntcbiAgICAgICAgICAgICAgICAxMTYgOiAzLFxuICAgICAgICAgICAgICAgIDI5MyA6IDIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGFjdE5hbWU6J0NvbnRhY3QgTmFtZScsXG4gICAgICAgICAgICBub3RlOidOb3RlJyxcbiAgICAgICAgICAgIHR5cGU6J2RhaWx5JyxcbiAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTpPcHRzLmRlZmF1bHREZWxpdmVyeURhdGUsXG4gICAgICAgICAgICBkZWxpdmVyeUFkZHJlc3M6MTIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyhPcmRlci5nZXREYXRhKCkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOnN1cHBsaWVySWR9fSk7XG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfX0pO1xuICAgICAgICB0aGlzLlN0ZXBwZXIuaW5pdCh7XG4gICAgICAgICAgICBVUkw6IHtcbiAgICAgICAgICAgICAgICBjcmVhdGU6IE9wdHMuVVJMLmNyZWF0ZSxcbiAgICAgICAgICAgIH0sXG4vKlxuY3N1cGFzeiBheiBlbGVqZXJvbFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllciddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdzdXBwbGllcicsXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1N1cHBsaWVyLFxuXG5wcm9kdWN0IHNlbGVjdFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcbiAgICAgICAgICAgIGFjdGl2ZTogJ3Byb2R1Y3RTZWxlY3QnLFxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdQcm9kdWN0U2VsZWN0LFxuXG5mdWxsb3NcbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0JywnaW52b2ljZSddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuc2VuZFxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnLCdpbnZvaWNlJywnc2VuZCddLFxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXG4gICAgICAgICAgICBhY3RpdmU6ICdzZW5kJyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuKi9cbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXG4gICAgICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcblxuXG4gICAgICAgICAgICBhdXRvQ2FsbGJhY2s6IHtcbiAgICAgICAgICAgICAgICBpbnZvaWNlOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3SW52b2ljZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VuZDoge1xuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld1NlbmRcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XG5cbiAgICB9XG4gICAgdGhpcy50b2dnbGVFbmFibGVTZW5kPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3RvZ2dsZUVuYWJsZVNlbmQgY2FsbGVkJyk7XG4gICAgICAgIC8vIEhhIG3DqWcgbmluY3MgbWVudGV0dCByZW5kZWzDqXMgSUQgKHBsLiDDumogcmVuZGVsw6lzIGzDqXRyZWhvesOhc2Frb3IgYSBzdXBwbGllciBsw6lww6lzbsOpbCksXG4gICAgICAgIC8vIGEgY2hlY2tSZWFkeVRvU2VuZCBow612w6FzIGZlbGVzbGVnZXMgw6lzIGhpYsOhdCBva296bmEgKC9vcmRlci91bmRlZmluZWQvY2hlY2tSZWFkeVRvU2VuZCkuXG4gICAgICAgIGlmICghT3JkZXIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5jaGVja1JlYWR5VG9TZW5kLnJlcGxhY2UoJyVpZCUnLE9yZGVyLmlkKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0b2dnbGVFbmFibGVTZW5kIHJlc3BvbnNlOicsIGRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIEFsYXDDqXJ0ZWxtZXpldHRlbiBlbHJlanRqw7xrIGEgZmlneWVsbWV6dGV0w6lzdCDigJMgY3NhayBrb25rcsOpdCBkZWxpdmVyeURhdGUgaGliYSBlc2V0w6luIG11dGF0anVrLlxuICAgICAgICAgICAgICAgICQoJy5pbnZhbGlkRGVsaXZlcnlEYXRlV2FybmluZycpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKS5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICAgICAgICAgICAgICBpZihkYXRhICYmIGRhdGEuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgc3rDoWxsw610w6FzaSBkw6F0dW0gaWTFkWvDtnpiZW4gw6lydsOpbnl0ZWxlbm7DqSB2w6FsdCDigJMgZmlneWVsbWV6dGV0w6lzIGEgamF2YXNvbHQgZMOhdHVtbWFsLlxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLndoeSAmJiAkLmluQXJyYXkoJ2RlbGl2ZXJ5RGF0ZScsIGRhdGEud2h5KSAhPT0gLTEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93SW52YWxpZERlbGl2ZXJ5RGF0ZShkYXRhLnN1Z2dlc3RlZERlbGl2ZXJ5RGF0ZSB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoZGF0YS5yZWFkeVRvU2VuZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5hZGRDbGFzcygnZC1ub25lJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjpmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgLy8gQUpBWCBoaWJhIGVzZXTDqW4gKHBsLiA0MTksIDUwMCkg4oCTIGEgZmlneWVsbWV6dGV0w6lzIHJlanR2ZSBtYXJhZCwgZ29tYiBsZXRpbHR2YS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndG9nZ2xlRW5hYmxlU2VuZCBBSkFYIGVycm9yOicsIHhoci5zdGF0dXMsIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICQoJy5pbnZhbGlkRGVsaXZlcnlEYXRlV2FybmluZycpLnJlbW92ZUNsYXNzKCdkLWZsZXgnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLmFkZENsYXNzKCdkLW5vbmUnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJPcmRlck1vZHVsRGVmYXVsdCIsImFjdGlvbkZ1bmN0aW9uIiwiRGF0YU1vZGVsT3JkZXIiLCJfRGF0YU1vZGVsIiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJwcm9kdWN0U2VsZWN0ZWQiLCJwcm9kdWN0Q29tbWVudCIsImNvbnNvbGUiLCJsb2ciLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJEYXRhTW9kZWwiLCJTdGVwcGVyIiwiT3B0cyIsImNvbXBsZXRlIiwiYXZhaWxhYmxlIiwiZW5hYmxlIiwibG9hZCIsImV4Y2x1ZGVMb2FkZWQiLCJsb2FkZWQiLCJhY3RpdmUiLCJVUkwiLCJjcmVhdGUiLCJVcmxEYXRhIiwib25BZnRlckxvYWQiLCJvbkFmdGVyQWN0aXZhdGUiLCJhdXRvQ2FsbGJhY2siLCJub3dMb2FkZWQiLCJyb290IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsImdldE9wdHMiLCJzZXRPcHRzIiwiaW5pdCIsImRlYnVnIiwiZWFjaCIsInN0ZXBOYW1lIiwiaW5jbHVkZXMiLCJzZXRDb21wbGV0ZWQiLCJzZXRFbmFibGVkIiwibG9hZFN0ZXBDb250ZW50Iiwic2V0QWN0aXZlIiwiYmluZENsaWNrQWN0aW9uIiwic3RlcENsaWNrQnV0dG9ucyIsIm9mZiIsIm9uIiwic3RlcENsaWNrIiwiYWRkQ2xhc3MiLCJ1bnNldENvbXBsZXRlZCIsInJlbW92ZUNsYXNzIiwiYXJyYXlSZW1vdmUiLCJ1bnNldEVuYWJsZWQiLCJjb250ZW50cyIsInVud3JhcCIsInN0ZXBJdGVtIiwiaHRtbCIsImFkZEVuYWJsZWQiLCJwdXNoIiwiYWRkQ29tcGxldGVkIiwiYWpheCIsImFzeW5jIiwidHlwZSIsInVybCIsImNhY2hlIiwic3VjY2VzcyIsInJlc3VsdCIsImNvbnRhaW5lciIsImNhcGl0YWxpemUiLCJpbkFycmF5IiwiY2xlYXJMb2FkZWQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInNldEFjdGl2ZUZpbmlzaCIsInNob3ciLCJoaWRlIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJPcmRlck1vZHVsZSIsInRlc3RNb2RlIiwibmVlZFN0ZXBwZXIiLCJDU1NTZWxlY3RvckZvcm0iLCJkZWZhdWx0RGVsaXZlcnlEYXRlIiwiZGF0YVN5bmNQYXVzZVRpbWUiLCJ0b2tlbiIsImdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCIsImNoZWNrUmVhZHlUb1NlbmQiLCJpbmRleCIsImVkaXQiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJ0b2dnbGVGYXZvcml0ZXMiLCJQdWJsaWNWYXIiLCJQdWJsaWNWYXIyIiwiQXBpVG9rZW4iLCJPcmRlciIsInZpZXdJbmljaWFsaXplZCIsImNsaWNrT3JkZXJFZGl0IiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsIkFQUCIsImxvYWRNYWluQ29udGVudCIsImFmdGVyT3JkZXJEZWxldGVkIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiYWpheERhdGEiLCJfdG9rZW4iLCJtZXRob2QiLCJpbml0Vmlld09yZGVyU2VsZWN0IiwiYWN0aW9uIiwib3JkZXJJZCIsImNsb3Nlc3QiLCJmaW5kIiwidGV4dCIsImluaXRTdGVwcGVyIiwiZ2V0RGF0YSIsInNldERlbGl2ZXJ5RGF0ZSIsInNldFN1cHBsaWVyIiwidW5FbmFibGVkIiwidmFsdWUiLCJzdGVwQWN0aXZlIiwic3RlcENvbXBsZXRlIiwic3RlcEVuYWJsZSIsInN0ZXBPbkFmdGVyQWN0aXZhdGUiLCJhdmFsYWlibGVTdGVwcyIsInN0ZXBVcmxEYXRhIiwic3RlcEF1dG9DYWxsYmFjayIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwiZXJyIiwiZSIsImYiLCJzdXBwbGllcklkIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluaXRPcmRlciIsInN1cHBsaWVyTmFtZSIsInNldERhdGEiLCJkYXRlVGV4dCIsImRhdGVUZXh0VG8iLCJkYXRlVGV4dEh1bWFuIiwicmVwbGFjZUFsbCIsImxlbmd0aCIsInZhbCIsInNldFN1cHBsaWVyQ29tcGxldGVkIiwiaW5pdFZpZXdQYXJhbWV0ZXIiLCJhZnRlck9yZGVyU2V0U3VwcGxpZXJPayIsInN1cHBsaWVyIiwiSU5GTyIsImluaXRWaWV3U3VwcGxpZXIiLCJzdG9yZVR5cGUiLCJXQVJOSU5HIiwiY2hlY2tDb250YWN0TmFtZUZpZWxkIiwibm9kZSIsInNlbmRPcmRlckRhdGFUb1NlcnZlciIsInVwZGF0ZVR5cGUiLCJjYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJhamF4TWV0aG9kIiwiX21ldGhvZCIsImpzb25Ub0Zvcm1EYXRhIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImVycm9yIiwieGhyIiwiYWpheE9wdGlvbnMiLCJ0aHJvd25FcnJvciIsImFqYXhFcnJvckhhbmRsZXIiLCJyZXNwb25zZUpTT04iLCJhZnRlck9yZGVyU2V0UGFyYW1ldGVyT2siLCJzZWxlY3RDdXJyZW50V2VlayIsIndlZWtIb3ZlciIsIndlZWtIb3ZlclNsb3ciLCJzZXRUaW1lb3V0IiwiaW5pdERhdGVQaWNrZXIiLCJzdGFydERhdGUiLCJEYXRlIiwiZW5kRGF0ZSIsImRhdGVwaWNrZXIiLCJzaG93T3RoZXJNb250aHMiLCJzZWxlY3RPdGhlck1vbnRocyIsInNob3dXZWVrIiwiZGF0ZUZvcm1hdCIsImZpcnN0RGF5IiwibWluRGF0ZSIsImFmdGVyU2hvdyIsImluc3QiLCJvblNlbGVjdCIsImRhdGUiLCJnZXRNb25kYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldERheSIsImZvcm1hdERhdGUiLCJiZWZvcmVTaG93IiwiZ3JvdXAiLCJncm91cEVuZCIsImJlZm9yZVNob3dEYXkiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJjc3NDbGFzcyIsIm9uQ2hhbmdlTW9udGhZZWFyIiwieWVhciIsIm1vbnRoIiwiYXZhaWxhYmxlRGF0ZXMiLCJuZXh0RGVsaXZlcnlEYXRlIiwiaGFzRGVsaXZlcnlDb25zdHJhaW50IiwiaG9saWRheXMiLCJ3b3JraW5nRGF5cyIsImRhdGVwaWNrZXJJbnB1dCIsImNhbGVuZGFyVXJsIiwicHJvZml0Q2VudGVySWQiLCJvcmRlckRhdGVUaW1lIiwidG9JU09TdHJpbmciLCJtYXAiLCJoIiwiZGVzY3JpcHRpb24iLCJ3IiwiZGF0ZXBpY2tlck9wdHMiLCJkYXRlU3RyIiwiaG9saWRheUVudHJ5Iiwid29ya2luZ0RheUVudHJ5IiwiaXNEZWxpdmVyeSIsImNzc0NsYXNzZXMiLCJ0b29sdGlwIiwic2VsZWN0YWJsZSIsImpvaW4iLCJjYWxsQ2hhbmdlT3JkZXJUeXBlIiwiY2xpY2siLCJzZWxlY3QyIiwicHJvcCIsInNldERhdGUiLCJzdWJtaXQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29udGFjdE5hbWUiLCJub3RlIiwib3JkZXJUeXBlIiwiZGVsaXZlcnlEYXRlIiwiZGVsaXZlcnlBZGRyZXNzSWQiLCJkZWxpdmVyeUFkZHJlc3MiLCJjdXN0b21Ob3RpZmljYXRpb25FbWFpbCIsImJsYW5rIiwic2V0UGFyYW1ldGVyQ29tcGxldGVkIiwiYmluZFJvd0Zhdm9yaXRlc0FjdGlvbiIsInByb2R1Y3RJZCIsImJ1dHRvbiIsInJlc3BvbnNlIiwiYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uIiwiY29tbWVudCIsInF1ZXVlQWpheCIsIm5vdyIsInN5bmNPcmRlckRhdGFUb1NlcnZlciIsInByb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyIiwiZCIsInRlbXBsYXRlRGF0YSIsIl90eXBlb2YiLCJmYXZvcml0ZXMiLCJidG5GYXZvcml0ZXNDbGFzcyIsInRlbXBsYXRlIiwid2Vla2x5IiwiaXRlbVF1YW50aXR5Iiwib2xkVGFncyIsIk11c3RhY2hlIiwidGFncyIsInNwZWNpZmljYXRpb25DbGFzcyIsInBpY3R1cmVJbWciLCJwaWN0dXJlQ2xhc3MiLCJyZW5kZXIiLCJzZXREYXRhdGFibGVIZWFkZXJUZXh0IiwiZ2V0VHJlZVBhdGhOYW1lIiwicmVzIiwiaXRlbXMiLCJwYXJlbnRzIiwidG9BcnJheSIsInNoaWZ0IiwicmV2ZXJzZSIsImNoaWxkcmVuIiwic2VsZWN0ZWRQcm9kdWN0R3JvdXAiLCJkYXRhVGFibGVTZWFyY2hTdHIiLCJkYXRhVGFibGVTZWFyY2hLcmVsIiwic2VhcmNoUHJvZHVjdEJ5U3RyaW5nIiwiZmlsdGVyU3RyIiwiRGF0YVRhYmxlIiwicmVsb2FkIiwiY2xpY2tTZWFyY2hQcm9kdWN0IiwiY2xpY2tGYXZvcml0ZXNQcm9kdWN0IiwicGFyZW50IiwidG9nZ2xlQ2xhc3MiLCJjbGlja09mdGVuUHJvZHVjdCIsImNsaWNrU3BlY2lhbE9mZmVyIiwiY2xpY2tTcGVjaWFsQ2FydCIsImNsaWNrTGFzdFByb2R1Y3QiLCJjbGlja1dlZWtseVByb2R1Y3QiLCJjbGlja0tyZWxQcm9kdWN0IiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIiwiY29sdW1uRGF0YSIsImFjdGlvbkNvbHVtbiIsInJvdyIsInN0b2NrX3N0YXR1cyIsImdldERhdGF0YWJsZXMiLCJ0YWJsZSIsImxhbmd1YWdlIiwic2VhcmNoU3RyIiwia3JlbCIsImdyb3VwSWQiLCJidXR0b25zIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCIsImZpbHRlciIsImlucHV0U3Bpbm5lciIsImJ1dHRvbnNXaWR0aCIsImdyb3VwQ2xhc3MiLCJidXR0b25zQ2xhc3MiLCJiaW5kV2Vha1VzZXJIZWxwZXIiLCJxdWFudGl0eSIsInBhcnNlRmxvYXQiLCJyb3dEYXRhIiwib3JkZXJJdGVtc0NoYW5nZSIsInF1YW50aXR5Q3VycmVudCIsInRyaWdnZXIiLCJpbml0Vmlld1Byb2R1Y3RTZWxlY3QiLCJmdW5jdGlvbk5hbWUiLCJjaGVja0RlbGl2ZXJ5RGF0ZVRvYXN0Iiwid2hpY2giLCJrZXkiLCJuZXh0Iiwic2xpZGVUb2dnbGUiLCJnZXRUaW1lIiwiZGF0YVRhYmxlIiwidHIiLCJjaGlsZCIsImlzU2hvd24iLCJiaW5kUHJvZHVjdERldGFpbHNBY3Rpb24iLCJiaW5kT3JkZXJJdGVtV2Vla1F1YW50aXR5IiwiYWN0dWFsSXRlbSIsImZvY3VzIiwicm93Tm9kZSIsInByZXYiLCJhZnRlclN5bmNPcmRlckRhdGFUb1NlcnZlciIsImkiLCJzeW5jRG9pbmciLCJJdGVtRGF0YSIsImRheUluZGV4IiwiaXNOYU4iLCJwcm9kdWN0U2VsZWN0ZWRJdGVtIiwiaW5pdFZpZXdJbnZvaWNlIiwiT2JqZWN0Iiwia2V5cyIsInN0eWxlU3RyIiwicHJpbnQiLCJuZXdXaW4iLCJvcGVuIiwiZG9jdW1lbnQiLCJ3cml0ZSIsImNsb25lIiwicmVtb3ZlIiwiY2xvc2UiLCJyZXNldE9yZGVyIiwiYWZ0ZXJPcmRlclNlbmRPayIsInJldEhUTUwiLCJhZnRlck9yZGVyU2VuZEVycm9yIiwiZXJyb3JDb2RlIiwic2hvd0ludmFsaWREZWxpdmVyeURhdGUiLCJzdWdnZXN0ZWREZWxpdmVyeURhdGUiLCJ3aHkiLCJzdWdnZXN0ZWQiLCJzdWdnZXN0ZWRIdW1hbiIsImFwcHJvdmVTdWdnZXN0ZWREZWxpdmVyeURhdGUiLCJpbml0Vmlld1NlbmQiLCJ0b2dnbGVFbmFibGVTZW5kIiwidGVzdE1vZGVTZW5kIiwiaW52b2ljZSIsInNlbmQiLCJyZWFkeVRvU2VuZCIsInJlc3BvbnNlVGV4dCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/order.js\n\n}"); /***/ }, diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 0b9be9e..8b5b800 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,7 +1,7 @@ { "/js/app.js": "/js/app.js?id=788435874adbbf8e5ddc27cc9d18e00e", - "/js/admin.js": "/js/admin.js?id=92022e54255ea7a8dc5753dff5a2659b", - "/js/module.js": "/js/module.js?id=e182fe1a0a0338350194e2304def7185", + "/js/admin.js": "/js/admin.js?id=10b9adf2a7c0fa319e265e93605c0749", + "/js/module.js": "/js/module.js?id=6c18e619075de340eef4e5f108952ff0", "/js/components.js": "/js/components.js?id=34668cee8ac371c98657beffcff579b8", "/css/app.css": "/css/app.css?id=366d6978f145ae9341959edd6e69bed7", "/fonts/vendor/bootstrap-icons/bootstrap-icons.woff2?92ea18a81d737146ff044ddb52010366": "/fonts/vendor/bootstrap-icons/bootstrap-icons.woff2?92ea18a81d737146ff044ddb52010366?id=9ad5aa740d7d5e6a0191b309b9b1986c",