/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./resources/js/admin/dashboard.js" /*!*****************************************!*\ !*** ./resources/js/admin/dashboard.js ***! \*****************************************/ () { eval("{window.Dashboard = function () {\n var Opts = {\n active: false,\n containerCssSelector: \".dashboard\",\n testFileMod: false,\n isAdmin: false,\n URL: {\n create: '',\n store: '',\n getDataTableContent: '',\n destroy: ''\n }\n };\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n debug('Dashboard constructor called');\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.init = function (options) {\n console.log('Dashboard init called');\n $.extend(Opts, options);\n /*\r\n APP.setOpts({\r\n afterLoadMainContent:root.initEditor,\r\n })\r\n */\n /*\r\n Init list view\r\n */\n root.initEditorButtons();\n };\n this.initEditorButtons = function () {\n $('.DashboardEditable button.edit').off('click');\n $('.DashboardEditable button.edit').on('click', function () {\n root.initEditor();\n $('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n });\n $('.DashboardEditable button.btnSave').off('click');\n $('.DashboardEditable button.btnSave').on('click', function () {\n /*$('.btnGroupEdit').toggleClass('d-none');\r\n $('.btnGroupModify').toggleClass('d-none');\r\n */\n root.saveCustomContent();\n //tinymce.activeEditor.isDirty() //true when modified\n });\n $('.DashboardEditable button.btnCancel').off('click');\n $('.DashboardEditable button.btnCancel').on('click', function () {\n $('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n root.removeEditor();\n });\n };\n this.saveCustomContent = function () {\n var ajaxData = new FormData($('.dashboardForm')[0]);\n ajaxData.append('stored_data', tinymce.activeEditor.getContent());\n var ajaxUrl = Opts.URL.update.replace('%id%', $('div.dashboardCustomContent').data('id'));\n ajaxData.append('_method', 'PUT');\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n Toast.create({\n title: \"Siekeres mentés!\",\n message: 'Új tartalom elmentve.',\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.loadTinymce = function () {\n $.getScript('https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js', function () {\n root.initEditor();\n });\n };\n this.removeEditor = function (options) {\n if (typeof tinymce !== \"undefined\") {\n tinymce.remove();\n }\n };\n this.initEditor = function (options) {\n if (typeof tinymce === \"undefined\") {\n root.loadTinymce();\n return;\n }\n tinymce.init({\n selector: 'div.dashboardCustomContent',\n // Replace this CSS selector to match the placeholder element for TinyMCE\n language: 'hu_HU',\n plugins: 'code table lists',\n toolbar: ' undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table'\n\n /*\r\n toolbar: 'customInsertButton | undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table',\r\n setup: function (editor) {\r\n editor.ui.registry.addButton('customInsertButton', {\r\n text: 'My Button',\r\n onAction: function (_) {\r\n editor.insertContent(' It\\'s my button! ');\r\n }});\r\n }\r\n */\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJEYXNoYm9hcmQiLCJPcHRzIiwiYWN0aXZlIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0RmlsZU1vZCIsImlzQWRtaW4iLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95Iiwicm9vdCIsImNvbnN0cnVjdCIsIm9wdGlvbnMiLCJkZWJ1ZyIsIiQiLCJleHRlbmQiLCJnZXRPcHRzIiwiaW5pdCIsImNvbnNvbGUiLCJsb2ciLCJpbml0RWRpdG9yQnV0dG9ucyIsIm9mZiIsIm9uIiwiaW5pdEVkaXRvciIsInRvZ2dsZUNsYXNzIiwic2F2ZUN1c3RvbUNvbnRlbnQiLCJyZW1vdmVFZGl0b3IiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwidGlueW1jZSIsImFjdGl2ZUVkaXRvciIsImdldENvbnRlbnQiLCJhamF4VXJsIiwidXBkYXRlIiwicmVwbGFjZSIsImRhdGEiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsIlRvYXN0IiwidGl0bGUiLCJtZXNzYWdlIiwic3RhdHVzIiwiVE9BU1RfU1RBVFVTIiwiSU5GTyIsInRpbWVvdXQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImxvYWRUaW55bWNlIiwiZ2V0U2NyaXB0IiwicmVtb3ZlIiwic2VsZWN0b3IiLCJsYW5ndWFnZSIsInBsdWdpbnMiLCJ0b29sYmFyIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9kYXNoYm9hcmQuanM/ZTBkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuRGFzaGJvYXJkPWZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6XCIuZGFzaGJvYXJkXCIsXHJcbiAgICAgICAgdGVzdEZpbGVNb2Q6ZmFsc2UsXHJcbiAgICAgICAgaXNBZG1pbjpmYWxzZSxcclxuICAgICAgICBVUkw6e1xyXG4gICAgICAgICAgICBjcmVhdGU6JycsXHJcbiAgICAgICAgICAgIHN0b3JlOicnLFxyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxyXG4gICAgICAgICAgICBkZXN0cm95OicnLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdEYXNoYm9hcmQgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnRGFzaGJvYXJkIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbi8qXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBhZnRlckxvYWRNYWluQ29udGVudDpyb290LmluaXRFZGl0b3IsXHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAvKlxyXG4gICAgICAgIEluaXQgbGlzdCB2aWV3XHJcbiAgICAgICAgKi9cclxuICAgICAgICByb290LmluaXRFZGl0b3JCdXR0b25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0RWRpdG9yQnV0dG9ucz1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmVkaXQnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5lZGl0Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgcm9vdC5pbml0RWRpdG9yKCk7XHJcbiAgICAgICAgICAgICQoJy5idG5Hcm91cEVkaXQnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5idG5Hcm91cE1vZGlmeScpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5TYXZlJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5EYXNoYm9hcmRFZGl0YWJsZSBidXR0b24uYnRuU2F2ZScpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIC8qJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICByb290LnNhdmVDdXN0b21Db250ZW50KCk7XHJcbiAgICAgICAgICAgIC8vdGlueW1jZS5hY3RpdmVFZGl0b3IuaXNEaXJ0eSgpIC8vdHJ1ZSB3aGVuIG1vZGlmaWVkXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5DYW5jZWwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5DYW5jZWwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG5cclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICByb290LnJlbW92ZUVkaXRvcigpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmVDdXN0b21Db250ZW50PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBhamF4RGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5kYXNoYm9hcmRGb3JtJylbMF0pO1xyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3RvcmVkX2RhdGEnLHRpbnltY2UuYWN0aXZlRWRpdG9yLmdldENvbnRlbnQoKSk7XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLCQoJ2Rpdi5kYXNoYm9hcmRDdXN0b21Db250ZW50JykuZGF0YSgnaWQnKSk7XHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpZWtlcmVzIG1lbnTDqXMhXCIsIG1lc3NhZ2U6ICfDmmogdGFydGFsb20gZWxtZW50dmUuJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuSU5GTywgdGltZW91dDogNTAwMCB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRUaW55bWNlPSBmdW5jdGlvbiAoKXtcclxuICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4udGlueS5jbG91ZC8xL25vLWFwaS1rZXkvdGlueW1jZS81L3RpbnltY2UubWluLmpzJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICByb290LmluaXRFZGl0b3IoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVtb3ZlRWRpdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBpZih0eXBlb2YgdGlueW1jZSE9PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aW55bWNlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdEVkaXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiB0aW55bWNlPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZFRpbnltY2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGlueW1jZS5pbml0KHtcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdkaXYuZGFzaGJvYXJkQ3VzdG9tQ29udGVudCcsIC8vIFJlcGxhY2UgdGhpcyBDU1Mgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgZm9yIFRpbnlNQ0VcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdodV9IVScsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6ICdjb2RlIHRhYmxlIGxpc3RzJyxcclxuICAgICAgICAgICAgdG9vbGJhcjogJyB1bmRvIHJlZG8gfCBmb3JtYXRzZWxlY3R8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgfCBpbmRlbnQgb3V0ZGVudCB8IGJ1bGxpc3QgbnVtbGlzdCB8IGNvZGUgfCB0YWJsZScsXHJcblxyXG4vKlxyXG4gICAgICAgICAgICB0b29sYmFyOiAnY3VzdG9tSW5zZXJ0QnV0dG9uIHwgdW5kbyByZWRvIHwgZm9ybWF0c2VsZWN0fCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IHwgaW5kZW50IG91dGRlbnQgfCBidWxsaXN0IG51bWxpc3QgfCBjb2RlIHwgdGFibGUnLFxyXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignY3VzdG9tSW5zZXJ0QnV0dG9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdNeSBCdXR0b24nLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudCgnJm5ic3A7PHN0cm9uZz5JdFxcJ3MgbXkgYnV0dG9uITwvc3Ryb25nPiZuYnNwOycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgfVxyXG4qL1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxTQUFTLEdBQUMsWUFBWTtFQUN6QixJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsWUFBWTtJQUNqQ0MsV0FBVyxFQUFDLEtBQUs7SUFD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UUFBUTtNQUNiWSxJQUFJLEVBQUMsTUFBTTtNQUNYQyxXQUFXLEVBQUMsS0FBSztNQUNqQkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBLEVBQWEsQ0FFdkIsQ0FBQztNQUNEQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBV1AsSUFBSSxFQUFFO1FBQ3BCUSxLQUFLLENBQUN0QyxNQUFNLENBQUM7VUFBRXVDLEtBQUssRUFBRSxrQkFBa0I7VUFBRUMsT0FBTyxFQUFFLHVCQUF1QjtVQUFFQyxNQUFNLEVBQUVDLFlBQVksQ0FBQ0MsSUFBSTtVQUFFQyxPQUFPLEVBQUU7UUFBSyxDQUFDLENBQUM7TUFDM0gsQ0FBQztNQUNEQyxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBV2YsSUFBSSxFQUFFO1FBQ2xCbEIsT0FBTyxDQUFDQyxHQUFHLENBQUNpQixJQUFJLENBQUNnQixZQUFZLENBQUM7UUFDOUJDLHFCQUFxQixDQUFDakIsSUFBSSxDQUFDZ0IsWUFBWSxDQUFDRCxLQUFLLENBQUM7TUFDbEQ7SUFDSixDQUFDLENBQUM7RUFFTixDQUFDO0VBRUQsSUFBSSxDQUFDRyxXQUFXLEdBQUUsWUFBVztJQUN6QnhDLENBQUMsQ0FBQ3lDLFNBQVMsQ0FBQyw4REFBOEQsRUFBQyxZQUFXO01BQ25GN0MsSUFBSSxDQUFDYSxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUM7RUFDTixDQUFDO0VBQ0QsSUFBSSxDQUFDRyxZQUFZLEdBQUcsVUFBVWQsT0FBTyxFQUFFO0lBQ25DLElBQUcsT0FBT2tCLE9BQU8sS0FBRyxXQUFXLEVBQUM7TUFDNUJBLE9BQU8sQ0FBQzBCLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCO0VBQ0osQ0FBQztFQUNELElBQUksQ0FBQ2pDLFVBQVUsR0FBRyxVQUFVWCxPQUFPLEVBQUU7SUFFakMsSUFBRyxPQUFPa0IsT0FBTyxLQUFHLFdBQVcsRUFBQztNQUM1QnBCLElBQUksQ0FBQzRDLFdBQVcsQ0FBQyxDQUFDO01BQ2xCO0lBQ0o7SUFFQXhCLE9BQU8sQ0FBQ2IsSUFBSSxDQUFDO01BQ1R3QyxRQUFRLEVBQUUsNEJBQTRCO01BQUU7TUFDeENDLFFBQVEsRUFBRSxPQUFPO01BQ2pCQyxPQUFPLEVBQUUsa0JBQWtCO01BQzNCQyxPQUFPLEVBQUU7O01BRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBRVEsQ0FBQyxDQUFDO0VBQ04sQ0FBQztBQUNMLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL2Rhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/dashboard.js\n\n}"); /***/ }, /***/ "./resources/js/admin/priceList.js" /*!*****************************************!*\ !*** ./resources/js/admin/priceList.js ***! \*****************************************/ () { eval("{window.PriceListAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n active: false,\n containerCssSelector: \".priceListForm\",\n testFileMod: false,\n URL: {\n create: '',\n store: '',\n getDataTableContent: '',\n destroy: ''\n }\n };\n var PriceList = {};\n var root = this;\n var dataTableCSSSelector = null;\n\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n debug('PriceListAdmin constructor called');\n $.extend(Opts, options);\n };\n var errorRowPointer = null;\n var errorRowCount = 0;\n this.initErrorNavigationButton = function () {\n errorRowCount = $('.statusError').length;\n errorRowPointer = null;\n $('.priceListForm .buttonPrevError .buttonNextError').off('click');\n $('.priceListForm .buttonPrevError').on('click', function () {\n if (errorRowPointer == null) {\n errorRowPointer = 0;\n } else {\n if (errorRowPointer > 0) {\n errorRowPointer--;\n } else {\n return;\n }\n }\n $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n $('.priceListForm .buttonNextError').off('click');\n $('.priceListForm .buttonNextError').on('click', function () {\n if (errorRowPointer == null) {\n errorRowPointer = 0;\n } else {\n if (errorRowPointer < errorRowCount - 1) {\n errorRowPointer++;\n } else {\n return;\n }\n }\n $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.priceListTable > tbody').empty();\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.clickNewPriceListCallBack = function () {\n root.initViewDetails();\n };\n this.clickNewPriceList = function () {\n APP.loadMainContent(Opts.URL.create, root.clickNewPriceListCallBack);\n };\n this.datatableRowActionButtonClick = function (event) {\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n //_token\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n /*\r\n */\n };\n this.initViewList = function (options) {\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 datatableActionButtonClickCallBack: root.clickNewPriceList,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n APP.dataTablePriceList = $(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 \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n //buttons+=APP.datatableAddRowEditButton(0,arguments);\n return buttons;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: [\n //'createState', 'savedStates',\n '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 {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"available\"\n }, {\n \"data\": \"created_at\"\n }, {\n \"data\": \"note\"\n }, null],\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n };\n this.initViewDetails = function (options) {\n $(Opts.containerCssSelector + ' .datePickerClick').off('click');\n $(Opts.containerCssSelector + ' .datePickerClick').on('click', function () {\n $(Opts.containerCssSelector + ' .datePicker').datepicker('show');\n });\n $(Opts.containerCssSelector + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText) {\n console.log(dateText);\n $('.selectedDateText').text(dateText.replaceAll('-', '.'));\n $('input[name=\"availableDate\"]').val(dateText);\n }\n });\n $(Opts.containerCssSelector + ' .buttonNewUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonNewUpload').on('click', function () {\n root.selectedUploadFileToggle();\n });\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.log('------------------');\n root.selectedUploadFileToggle();\n var data = new FormData($('.priceListForm')[0]);\n if ($('.supplierSelect').val().length < 1) {\n Toast.create({\n title: \"Hiba!\",\n message: 'Adjon meg beszállítót!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n return;\n }\n var fileInput = $('#inputGroupPriceListFile');\n console.log(fileInput[0].files.length < 1);\n\n /* teszteles miatt kikapcsolva a fajl ellenorzes\r\n */\n if (!Opts.testFileMod) {\n console.log(fileInput[0].files.length < 1);\n if (fileInput[0].files.length < 1) {\n Toast.create({\n title: \"Hiba!\",\n message: 'Vállaszon ki fájlt!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n return;\n }\n }\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n $.ajax({\n url: Opts.URL.store,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.processCheckedPriceListResponse(data);\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n $(Opts.containerCssSelector + ' .buttonFinalization').on('click', function () {\n var data = new FormData($('.priceListForm')[0]);\n var fileInput = $('#inputGroupPriceListFile');\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n data.append('finalization', 1);\n $.ajax({\n url: Opts.URL.store,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success) {\n $('.priceListTable tbody tr').remove();\n $('.uploadStatusRow >.canFinish').hide();\n $('.uploadStatusRow').addClass('d-none');\n $('.priceListTable tbody').append(' Árlistát elmentettük.');\n }\n /*\r\n if(data.success==1){\r\n root.processCheckedPriceListResponse(data);\r\n }\r\n */\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.init = function (options) {\n console.log('PriceListAdmin init called');\n $.extend(Opts, options);\n console.log('Opt extended');\n console.log(Opts);\n /*\r\n Init list view\r\n */\n console.log('call list view Init');\n root.initViewList(options);\n };\n this.getOpts = function () {\n return Opts;\n };\n var priceListHasError = false;\n this.processCheckedPriceListResponse = function (responseData) {\n priceListHasError = false;\n root.processCheckedPriceListResponseRows(responseData.rows);\n if (priceListHasError) {\n $('.uploadStatusRow >.canFinish').hide();\n $('.uploadStatusRow >.canFinishError').show();\n root.initErrorNavigationButton();\n } else {\n $('.uploadStatusRow >.canFinish').show();\n $('.uploadStatusRow >.canFinishError').hide();\n }\n $('.uploadStatusRow').removeClass('d-none');\n $('.containerUploadedSpinner').addClass('d-none');\n };\n this.processCheckedPriceListResponseRows = function (responseRowsData) {\n console.log('processingRows');\n for (var key in responseRowsData) {\n var rowData = responseRowsData[key];\n var templateData = rowData.originalData;\n templateData.rowNum = rowData.rowNum;\n var template = $('template[data-name=\"priceListTableRow\"]').html();\n var render = Mustache.render(template, templateData);\n $('.priceListTable tbody').append(render);\n $('tr[data-rownum=' + rowData.rowNum + ']').addClass('status' + $.ucFirst(rowData.status));\n root.processResponseRowErrors(rowData.error, rowData.rowNum);\n if (rowData.changed) {\n root.processResponseRowChanged(rowData.changed, rowData.rowNum);\n }\n }\n };\n this.processResponseRowChanged = function (changedArray, rowNum) {\n if (changedArray.length < 1) {\n return;\n }\n console.log(changedArray);\n //fields error resz\n var trNode = $('tr[data-rownum=' + rowNum + ']');\n for (var key in changedArray) {\n var tdNode = trNode.find('td[data-pointer=\"' + key + '\"]');\n tdNode.addClass('bg-primary');\n var changedTxtNode = $(document.createElement(\"span\")).text(changedArray[key].old).addClass('fieldChanged');\n tdNode.append(changedTxtNode);\n }\n };\n this.processResponseRowErrors = function (errorArray, rowNum) {\n if (errorArray.length < 1) {\n return;\n }\n //general error resz\n console.log(errorArray);\n priceListHasError = true;\n\n //fields error resz\n if (typeof errorArray.fields == 'undefined') {\n return;\n }\n var trNode = $('tr[data-rownum=' + rowNum + ']');\n for (var key in errorArray.fields) {\n var tdNode = trNode.find('td[data-pointer=\"' + key + '\"]');\n tdNode.addClass('bg-danger');\n var errorTxtNode = $(document.createElement(\"span\")).text(errorArray.fields[key]).addClass('fieldError');\n tdNode.append(errorTxtNode);\n }\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RBZG1pbiIsIm9wdGlvbnMiLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsImFjdGl2ZSIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdEZpbGVNb2QiLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95IiwiUHJpY2VMaXN0Iiwicm9vdCIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiY29uc3RydWN0IiwiZGVidWciLCIkIiwiZXh0ZW5kIiwiZXJyb3JSb3dQb2ludGVyIiwiZXJyb3JSb3dDb3VudCIsImluaXRFcnJvck5hdmlnYXRpb25CdXR0b24iLCJsZW5ndGgiLCJvZmYiLCJvbiIsInJlbW92ZUNsYXNzIiwic2Nyb2xsVG9wIiwicG9zaXRpb24iLCJ0b3AiLCJhZGRDbGFzcyIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwidGV4dCIsIm5hbWUiLCJlbXB0eSIsImNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2siLCJpbml0Vmlld0RldGFpbHMiLCJjbGlja05ld1ByaWNlTGlzdCIsIkFQUCIsImxvYWRNYWluQ29udGVudCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiZGF0YSIsImFqYXhEYXRhIiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsIl90b2tlbiIsInZhbCIsImFqYXgiLCJ1cmwiLCJtZXRob2QiLCJzdWNjZXNzIiwicmVtb3ZlIiwiZHJhdyIsImluaXRWaWV3TGlzdCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGFUYWJsZVByaWNlTGlzdCIsImxhbmd1YWdlIiwicmVuZGVyIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImFyZ3VtZW50cyIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImF0dHIiLCJpbml0IiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJkYXRlcGlja2VyIiwiZGF0ZUZvcm1hdCIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJjb25zb2xlIiwibG9nIiwicmVwbGFjZUFsbCIsIkZvcm1EYXRhIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiYXBwZW5kIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJwcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlIiwiZXJyb3IiLCJyZXNwb25zZUpTT04iLCJhamF4RXJyb3JGaWVsZEhhbmRsZXIiLCJoaWRlIiwiZ2V0T3B0cyIsInByaWNlTGlzdEhhc0Vycm9yIiwicmVzcG9uc2VEYXRhIiwicHJvY2Vzc0NoZWNrZWRQcmljZUxpc3RSZXNwb25zZVJvd3MiLCJyb3dzIiwic2hvdyIsInJlc3BvbnNlUm93c0RhdGEiLCJrZXkiLCJ0ZW1wbGF0ZURhdGEiLCJvcmlnaW5hbERhdGEiLCJyb3dOdW0iLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsInVjRmlyc3QiLCJwcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnMiLCJjaGFuZ2VkIiwicHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZCIsImNoYW5nZWRBcnJheSIsInRyTm9kZSIsInRkTm9kZSIsImZpbmQiLCJjaGFuZ2VkVHh0Tm9kZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9sZCIsImVycm9yQXJyYXkiLCJmaWVsZHMiLCJlcnJvclR4dE5vZGUiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3ByaWNlTGlzdC5qcz9jYWQ2Il0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5QcmljZUxpc3RBZG1pbj1mdW5jdGlvbiAob3B0aW9ucyxQcm9maXRDZW50ZXJJdGVtKSB7XHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOlwiLnByaWNlTGlzdEZvcm1cIixcclxuICAgICAgICB0ZXN0RmlsZU1vZDpmYWxzZSxcclxuICAgICAgICBVUkw6e1xyXG4gICAgICAgICAgICBjcmVhdGU6JycsXHJcbiAgICAgICAgICAgIHN0b3JlOicnLFxyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxyXG4gICAgICAgICAgICBkZXN0cm95OicnLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgUHJpY2VMaXN0ID0ge307XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9bnVsbDtcclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ1ByaWNlTGlzdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgZXJyb3JSb3dQb2ludGVyPW51bGw7XHJcbiAgICBsZXQgZXJyb3JSb3dDb3VudD0wO1xyXG5cclxuICAgIHRoaXMuaW5pdEVycm9yTmF2aWdhdGlvbkJ1dHRvbj1mdW5jdGlvbiAoKXtcclxuXHJcbiAgICAgICAgZXJyb3JSb3dDb3VudD0kKCcuc3RhdHVzRXJyb3InKS5sZW5ndGg7XHJcbiAgICAgICAgZXJyb3JSb3dQb2ludGVyPW51bGw7XHJcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvblByZXZFcnJvciAuYnV0dG9uTmV4dEVycm9yJykub2ZmKCdjbGljaycpXHJcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvblByZXZFcnJvcicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj09bnVsbCl7XHJcbiAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXI9MDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI+MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyLS07XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm47fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5zdGF0dXNFcnJvcicpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZEVycm9yUm93Jyk7XHJcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZVdyYXBwZXInKS5zY3JvbGxUb3AoJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5wb3NpdGlvbigpLnRvcCk7XHJcbiAgICAgICAgICAgICQoJCgnLnN0YXR1c0Vycm9yJylbZXJyb3JSb3dQb2ludGVyXSkuYWRkQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uTmV4dEVycm9yJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5wcmljZUxpc3RGb3JtIC5idXR0b25OZXh0RXJyb3InKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI9PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyPTA7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZXJyb3JSb3dQb2ludGVyPGVycm9yUm93Q291bnQtMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyKys7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm47fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5zdGF0dXNFcnJvcicpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZEVycm9yUm93Jyk7XHJcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZVdyYXBwZXInKS5zY3JvbGxUb3AoJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5wb3NpdGlvbigpLnRvcCk7XHJcbiAgICAgICAgICAgICQoJCgnLnN0YXR1c0Vycm9yJylbZXJyb3JSb3dQb2ludGVyXSkuYWRkQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGU9ZnVuY3Rpb24gKGZpbGVJbnB1dCl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXQuYXR0cignbmFtZScpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcclxuICAgICAgICAqL1xyXG4gICAgICAgIGlmKGZpbGVJbnB1dCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXNbMF0pe1xyXG4gICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWRTdGFydGVkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRTcGlubmVyJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcblxyXG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgPiB0Ym9keScpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWNrTmV3UHJpY2VMaXN0PWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld1ByaWNlTGlzdENhbGxCYWNrKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xyXG4gICAgICAgIC8vX3Rva2VuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIH0pO1xyXG4vKlxyXG4qL1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3UHJpY2VMaXN0LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICBBUFAuZGF0YVRhYmxlUHJpY2VMaXN0PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgLy8nY3JlYXRlU3RhdGUnLCAnc2F2ZWRTdGF0ZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAvKiovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ8OaaiBmZWx2aXRlbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLXN1Y2Nlc3MgbmV3SXRlbScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYToxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOjJcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzonbmV3SXRlbSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oYXBpLCBub2RlLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQobm9kZSkucmVtb3ZlQ2xhc3MoJ3VpLWJ1dHRvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgbm9kZSwgY29uZmlnICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGR0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25maWcpOyovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImF2YWlsYWJsZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJub3RlXCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRlUGlja2VyQ2xpY2snKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXJDbGljaycpLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKCdzaG93Jyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcih7XHJcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXHJcbiAgICAgICAgICAgIG9uU2VsZWN0OmZ1bmN0aW9uIChkYXRlVGV4dCl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAkKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsJy4nKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnaW5wdXRbbmFtZT1cImF2YWlsYWJsZURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25OZXdVcGxvYWQnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbk5ld1VwbG9hZCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLScpO1xyXG4gICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKCcucHJpY2VMaXN0Rm9ybScpWzBdKTtcclxuICAgICAgICAgICAgaWYoJCgnLnN1cHBsaWVyU2VsZWN0JykudmFsKCkubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ0Fkam9uIG1lZyBiZXN6w6FsbMOtdMOzdCEnLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDEwMDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBQcmljZUxpc3RGaWxlJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSk7XHJcblxyXG4gICAgICAgICAgICAvKiB0ZXN6dGVsZXMgbWlhdHQga2lrYXBjc29sdmEgYSBmYWpsIGVsbGVub3J6ZXNcclxuICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYoIU9wdHMudGVzdEZpbGVNb2Qpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzLmxlbmd0aDwxKTtcclxuICAgICAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgdGltZW91dDogMTAwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcblxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25GaW5hbGl6YXRpb24nKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwUHJpY2VMaXN0RmlsZScpO1xyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaW5hbGl6YXRpb24nLDEpO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cgPi5jYW5GaW5pc2gnKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSB0Ym9keScpLmFwcGVuZCgnPHRyPjx0ZCBjb2xzcGFuPVwiOTlcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZm9udC1zaXplOiAyZW07XCI+IMOBcmxpc3TDoXQgZWxtZW50ZXR0w7xrLjwvdGQ+PC90cj4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1ByaWNlTGlzdEFkbWluIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ09wdCBleHRlbmRlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsIGxpc3QgdmlldyBJbml0Jyk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3Qob3B0aW9ucyk7XHJcblxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuICAgIGxldCBwcmljZUxpc3RIYXNFcnJvcj1mYWxzZTtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2U9ZnVuY3Rpb24gKHJlc3BvbnNlRGF0YSl7XHJcbiAgICAgICAgcHJpY2VMaXN0SGFzRXJyb3I9ZmFsc2U7XHJcbiAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyhyZXNwb25zZURhdGEucm93cyk7XHJcbiAgICAgICAgaWYocHJpY2VMaXN0SGFzRXJyb3Ipe1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuaGlkZSgpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5zaG93KCk7XHJcbiAgICAgICAgICAgIHJvb3QuaW5pdEVycm9yTmF2aWdhdGlvbkJ1dHRvbigpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuc2hvdygpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2VSb3dzPWZ1bmN0aW9uIChyZXNwb25zZVJvd3NEYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJvY2Vzc2luZ1Jvd3MnKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcmVzcG9uc2VSb3dzRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YT1yZXNwb25zZVJvd3NEYXRhW2tleV07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZURhdGE9cm93RGF0YS5vcmlnaW5hbERhdGE7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5yb3dOdW09cm93RGF0YS5yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcmljZUxpc3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSx0ZW1wbGF0ZURhdGEpO1xyXG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgJCgndHJbZGF0YS1yb3dudW09Jytyb3dEYXRhLnJvd051bSsnXScpLmFkZENsYXNzKCdzdGF0dXMnKyQudWNGaXJzdChyb3dEYXRhLnN0YXR1cykpO1xyXG4gICAgICAgICAgICByb290LnByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycyhyb3dEYXRhLmVycm9yLHJvd0RhdGEucm93TnVtKTtcclxuICAgICAgICAgICAgaWYocm93RGF0YS5jaGFuZ2VkKXtcclxuICAgICAgICAgICAgICAgIHJvb3QucHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZChyb3dEYXRhLmNoYW5nZWQscm93RGF0YS5yb3dOdW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dDaGFuZ2VkPWZ1bmN0aW9uIChjaGFuZ2VkQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihjaGFuZ2VkQXJyYXkubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYW5nZWRBcnJheSk7XHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGxldCB0ck5vZGU9JCgndHJbZGF0YS1yb3dudW09Jytyb3dOdW0rJ10nKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2hhbmdlZEFycmF5KSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1wcmltYXJ5Jyk7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGNoYW5nZWRBcnJheVtrZXldLm9sZCkuYWRkQ2xhc3MoJ2ZpZWxkQ2hhbmdlZCcpO1xyXG4gICAgICAgICAgICB0ZE5vZGUuYXBwZW5kKGNoYW5nZWRUeHROb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnM9ZnVuY3Rpb24gKGVycm9yQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihlcnJvckFycmF5Lmxlbmd0aDwxKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2dlbmVyYWwgZXJyb3IgcmVzelxyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yQXJyYXkpO1xyXG4gICAgICAgIHByaWNlTGlzdEhhc0Vycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGlmKHR5cGVvZiBlcnJvckFycmF5LmZpZWxkcyA9PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdHJOb2RlPSQoJ3RyW2RhdGEtcm93bnVtPScrcm93TnVtKyddJyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGVycm9yQXJyYXkuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1kYW5nZXInKTtcclxuICAgICAgICAgICAgbGV0IGVycm9yVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGVycm9yQXJyYXkuZmllbGRzW2tleV0pLmFkZENsYXNzKCdmaWVsZEVycm9yJyk7XHJcbiAgICAgICAgICAgIHRkTm9kZS5hcHBlbmQoZXJyb3JUeHROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsY0FBYyxHQUFDLFVBQVVDLE9BQU8sRUFBQ0MsZ0JBQWdCLEVBQUU7RUFDdEQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsZ0JBQWdCO0lBQ3JDQyxXQUFXLEVBQUMsS0FBSztJQUNqQkMsR0FBRyxFQUFDO01BQ0FDLE1BQU0sRUFBQyxFQUFFO01BQ1RDLEtBQUssRUFBQyxFQUFFO01BQ1JDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLE9BQU8sRUFBQztJQUNaO0VBQ0osQ0FBQztFQUNELElBQUlDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDbEIsSUFBSUMsSUFBSSxHQUFHLElBQUk7RUFDZixJQUFJQyxvQkFBb0IsR0FBQyxJQUFJOztFQUk3QjtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxVQUFVZCxPQUFPLEVBQUU7SUFDaENlLEtBQUssQ0FBQyxt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\n//# sourceURL=webpack-internal:///./resources/js/admin/priceList.js\n\n}"); /***/ }, /***/ "./resources/js/admin/priceListProfitCenter.js" /*!*****************************************************!*\ !*** ./resources/js/admin/priceListProfitCenter.js ***! \*****************************************************/ () { eval("{window.PriceListProfitCenterAdmin = function (options) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerPriceListProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n getProductGroupHTML: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('PriceListProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n var changeParameter = {\n supplier: '',\n profitCenter: '',\n deliveryDate: ''\n /*\r\n supplier:26,\r\n profitCenter:49,\r\n deliveryDate:'2023-09-10',\r\n */\n };\n this.checkRefreshPossible = function () {\n console.log('check need parameter');\n var needRefresh = true;\n $.each(changeParameter, function (name, data) {\n if (data === '') {\n needRefresh = false;\n }\n });\n if (needRefresh) {\n root.refreshDatatable();\n root.refreshProductGroup();\n root.setDatatableHeaderText('');\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 if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n return res;\n };\n this.bindProductGroupItem = function () {\n $('.sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\r\n console.log(groupId);\r\n console.log(root.getTreePathName(this));\r\n */\n root.refreshDatatable();\n });\n };\n this.refreshProductGroup = function () {\n var ajaxData = {\n 'supplierId': changeParameter.supplier,\n 'deliveryDate': changeParameter.deliveryDate\n };\n var ajaxUrl = Opts.URL.getProductGroupHTML;\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: 'GET',\n contentType: false,\n processData: true,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n $('.sidebar-menu .productGroup').find('ul').html(data);\n root.bindProductGroupItem();\n },\n error: function error(data) {\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.refreshDatatable = function () {\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.changePriceListProfitCenterParameter = function (e, obj) {\n if (typeof obj == 'undefined') {\n obj = $(this);\n }\n var objName = obj.attr(\"name\");\n if (objName == 'supplier') {\n selectedProductGroup = null;\n }\n var data = '';\n if (obj.get(0).nodeName == 'SELECT') {\n if (obj.select2('data').length > 0) {\n data = obj.select2('data')[0].id;\n }\n ;\n } else {\n data = obj.val();\n }\n if (changeParameter[objName] != data) {\n changeParameter[objName] = data;\n root.checkRefreshPossible();\n }\n };\n this.init = function (options) {\n $.extend(Opts, options);\n var CSSSelectorForm = Opts.containerCssSelector;\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $('.supplierSelect').on('change', root.changePriceListProfitCenterParameter);\n $('.profitCenterSelect').on('change', root.changePriceListProfitCenterParameter);\n\n //$('input[name=\"deliveryDate\"]').on('change',changePriceListProfitCenterParameter);\n\n $(\".supplierSelect\").select2({\n maximumSelectionLength: 1\n });\n /*\r\n */\n $(\".profitCenterSelect\").select2({\n maximumSelectionLength: 1\n });\n $(CSSSelectorForm + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n minDate: new Date(),\n onSelect: function onSelect(dateText, obj) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n root.changePriceListProfitCenterParameter(null, $(obj.input));\n }\n });\n //root.initViewList();\n var table = root.getDatatables('');\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n /*\r\n /!*\r\n ----------------------------------------------------------\r\n Add event listener for opening and closing details\r\n *!/\r\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\r\n let tr = $(this).closest('tr');\r\n let row = table.row( tr );\r\n if ( row.child.isShown() ) {\r\n // This row is already open - close it\r\n row.child.hide();\r\n tr.removeClass('shown');\r\n }\r\n else {\r\n // Open this row\r\n row.child( root.productSelectDatatablesRowFormatter(row.data()) ).show();\r\n tr.addClass('shown');\r\n root.bindProductDetailsAction();\r\n }\r\n } );*/\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n $('td:contains(\"*\")').html('');\n $('td.details-control').removeClass('details-control');\n };\n var selectedProductGroup = null;\n this.getDatatables = function (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.getDataTableContent,\n data: function data(_data) {\n /*\r\n data.searchStr=dataTableSearchStr;\r\n data.krel=dataTableSearchKrel;\r\n data.groupId=selectedProductGroup;\r\n */\n _data.supplierId = changeParameter.supplier;\n _data.profitCenterId = changeParameter.profitCenter;\n _data.deliveryDate = changeParameter.deliveryDate;\n _data.groupId = selectedProductGroup;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": APP.OrderModule.productSelectDataTableColumnDefs(),\n \"columns\": APP.OrderModule.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RQcm9maXRDZW50ZXJBZG1pbiIsIm9wdGlvbnMiLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImdldFByb2R1Y3RHcm91cEhUTUwiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnN0cnVjdCIsIlN1cHBsaWVySXRlbSIsImNvbnNvbGUiLCJsb2ciLCIkIiwiZXh0ZW5kIiwiZ2V0T3B0cyIsImNoYW5nZVBhcmFtZXRlciIsInN1cHBsaWVyIiwicHJvZml0Q2VudGVyIiwiZGVsaXZlcnlEYXRlIiwiY2hlY2tSZWZyZXNoUG9zc2libGUiLCJuZWVkUmVmcmVzaCIsImVhY2giLCJuYW1lIiwiZGF0YSIsInJlZnJlc2hEYXRhdGFibGUiLCJyZWZyZXNoUHJvZHVjdEdyb3VwIiwic2V0RGF0YXRhYmxlSGVhZGVyVGV4dCIsInRleHQiLCJnZXRUcmVlUGF0aE5hbWUiLCJub2RlIiwicmVzIiwiaXRlbXMiLCJwYXJlbnRzIiwidG9BcnJheSIsInNoaWZ0IiwicmV2ZXJzZSIsIml0ZW0iLCJjaGlsZHJlbiIsImxlbmd0aCIsImJpbmRQcm9kdWN0R3JvdXBJdGVtIiwib2ZmIiwib24iLCJncm91cElkIiwic2VsZWN0ZWRQcm9kdWN0R3JvdXAiLCJhamF4RGF0YSIsImFqYXhVcmwiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsImZpbmQiLCJodG1sIiwiZXJyb3IiLCJhamF4RXJyb3JGaWVsZEhhbmRsZXIiLCJyZXNwb25zZUpTT04iLCJEYXRhVGFibGUiLCJyZWxvYWQiLCJjaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIiLCJlIiwib2JqIiwib2JqTmFtZSIsImF0dHIiLCJnZXQiLCJub2RlTmFtZSIsInNlbGVjdDIiLCJpZCIsInZhbCIsImluaXQiLCJDU1NTZWxlY3RvckZvcm0iLCJjbGljayIsImRhdGVwaWNrZXIiLCJtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoIiwiZGF0ZUZvcm1hdCIsIm1pbkRhdGUiLCJEYXRlIiwib25TZWxlY3QiLCJkYXRlVGV4dCIsInJlcGxhY2VBbGwiLCJpbnB1dCIsInRhYmxlIiwiZ2V0RGF0YXRhYmxlcyIsInByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQiLCJyZW1vdmVDbGFzcyIsIm9yZGVyVHlwZSIsImxhbmd1YWdlIiwic3VwcGxpZXJJZCIsInByb2ZpdENlbnRlcklkIiwiYnV0dG9ucyIsIkFQUCIsIk9yZGVyTW9kdWxlIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3RQcm9maXRDZW50ZXIuanM/MWNiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByaWNlTGlzdFByb2ZpdENlbnRlcicsXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgZ2V0UHJvZHVjdEdyb3VwSFRNTDogJycsXHJcbiAgICAgICAgICAgIGluZGV4OiAnJyxcclxuICAgICAgICAgICAgc2hvdzogJycsXHJcbiAgICAgICAgICAgIGVkaXQ6ICcnLFxyXG4gICAgICAgICAgICBjcmVhdGU6ICcnLFxyXG4gICAgICAgICAgICBzdG9yZTogJycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogJycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOiB7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkFmdGVySW5pdFZpZXdEZXRhaWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBTdXBwbGllckl0ZW0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgbGV0IGNoYW5nZVBhcmFtZXRlcj17XHJcbiAgICAgICAgc3VwcGxpZXI6JycsXHJcbiAgICAgICAgcHJvZml0Q2VudGVyOicnLFxyXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZTonJyxcclxuICAgICAgICAvKlxyXG4gICAgICAgIHN1cHBsaWVyOjI2LFxyXG4gICAgICAgIHByb2ZpdENlbnRlcjo0OSxcclxuICAgICAgICBkZWxpdmVyeURhdGU6JzIwMjMtMDktMTAnLFxyXG4gICAgICAgICovXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tSZWZyZXNoUG9zc2libGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIG5lZWQgcGFyYW1ldGVyJyk7XHJcbiAgICAgICAgbGV0IG5lZWRSZWZyZXNoPXRydWU7XHJcbiAgICAgICAgJC5lYWNoKGNoYW5nZVBhcmFtZXRlcixmdW5jdGlvbiAobmFtZSxkYXRhKXtcclxuICAgICAgICAgICAgaWYoZGF0YT09PScnKXtcclxuICAgICAgICAgICAgICAgIG5lZWRSZWZyZXNoPWZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYobmVlZFJlZnJlc2gpe1xyXG4gICAgICAgICAgICByb290LnJlZnJlc2hEYXRhdGFibGUoKVxyXG4gICAgICAgICAgICByb290LnJlZnJlc2hQcm9kdWN0R3JvdXAoKTtcclxuICAgICAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERhdGF0YWJsZUhlYWRlclRleHQ9ZnVuY3Rpb24odGV4dCl7XHJcbiAgICAgICAgJCgnLnRhYmxlSGVhZGVyVGV4dCcpLnRleHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRUcmVlUGF0aE5hbWU9ZnVuY3Rpb24gKG5vZGUpe1xyXG4gICAgICAgIGxldCByZXM9Jyc7XHJcbiAgICAgICAgbGV0IGl0ZW1zPSQobm9kZSkucGFyZW50cygnbGknKS50b0FycmF5KCk7XHJcbiAgICAgICAgaXRlbXMuc2hpZnQoKTtcclxuICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIGluIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJlcys9JChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykudGV4dCgpKycvJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcys9JChub2RlKS50ZXh0KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRQcm9kdWN0R3JvdXBJdGVtPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCgnLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub24oJ2NsaWNrJyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwSWQ9JCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9Z3JvdXBJZDtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dChyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgcm9vdC5yZWZyZXNoRGF0YXRhYmxlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hQcm9kdWN0R3JvdXA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXtcclxuICAgICAgICAgICAgJ3N1cHBsaWVySWQnOmNoYW5nZVBhcmFtZXRlci5zdXBwbGllcixcclxuICAgICAgICAgICAgJ2RlbGl2ZXJ5RGF0ZSc6Y2hhbmdlUGFyYW1ldGVyLmRlbGl2ZXJ5RGF0ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXRQcm9kdWN0R3JvdXBIVE1MO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidHRVQnLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgJCgnLnNpZGViYXItbWVudSAucHJvZHVjdEdyb3VwJykuZmluZCgndWwnKS5odG1sKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5iaW5kUHJvZHVjdEdyb3VwSXRlbSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoRGF0YXRhYmxlPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcj1mdW5jdGlvbihlLG9iail7XHJcbiAgICAgICAgaWYodHlwZW9mIG9iaiA9PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb2JqPSQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYmpOYW1lPW9iai5hdHRyKFwibmFtZVwiKTtcclxuICAgICAgICBpZihvYmpOYW1lPT0nc3VwcGxpZXInKXtcclxuICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9bnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGE9Jyc7XHJcbiAgICAgICAgaWYob2JqLmdldCgwKS5ub2RlTmFtZT09J1NFTEVDVCcpe1xyXG4gICAgICAgICAgICBpZihvYmouc2VsZWN0MignZGF0YScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGRhdGE9b2JqLnNlbGVjdDIoJ2RhdGEnKVswXS5pZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZGF0YT1vYmoudmFsKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY2hhbmdlUGFyYW1ldGVyW29iak5hbWVdIT1kYXRhKXtcclxuICAgICAgICAgICAgY2hhbmdlUGFyYW1ldGVyW29iak5hbWVdPWRhdGE7XHJcbiAgICAgICAgICAgIHJvb3QuY2hlY2tSZWZyZXNoUG9zc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3I7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlckNsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnLnN1cHBsaWVyU2VsZWN0Jykub24oJ2NoYW5nZScscm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIpO1xyXG4gICAgICAgICQoJy5wcm9maXRDZW50ZXJTZWxlY3QnKS5vbignY2hhbmdlJyxyb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcik7XHJcblxyXG4gICAgICAgIC8vJCgnaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLm9uKCdjaGFuZ2UnLGNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcik7XHJcblxyXG5cclxuICAgICAgICAkKFwiLnN1cHBsaWVyU2VsZWN0XCIpLnNlbGVjdDIoe1xyXG4gICAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9uTGVuZ3RoOiAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgKi9cclxuICAgICAgICAkKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKHtcclxuICAgICAgICAgICAgbWF4aW11bVNlbGVjdGlvbkxlbmd0aDogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcih7XHJcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXHJcbiAgICAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsb2JqKSB7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIobnVsbCwkKG9iai5pbnB1dCkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgICAgICBsZXQgdGFibGUgPSByb290LmdldERhdGF0YWJsZXMoJycpO1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2RyYXcuZHQnLHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCkuZGF0YVRhYmxlKCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgIC8hKlxyXG4gICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgIEFkZCBldmVudCBsaXN0ZW5lciBmb3Igb3BlbmluZyBhbmQgY2xvc2luZyBkZXRhaWxzXHJcbiAgICAgICAgICAgKiEvXHJcblxyXG4gICAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyID0gJCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgICAgICAgIGxldCByb3cgPSB0YWJsZS5yb3coIHRyICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICggcm93LmNoaWxkLmlzU2hvd24oKSApIHtcclxuICAgICAgICAgICAgICAgICAgLy8gVGhpcyByb3cgaXMgYWxyZWFkeSBvcGVuIC0gY2xvc2UgaXRcclxuICAgICAgICAgICAgICAgICAgcm93LmNoaWxkLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgdHIucmVtb3ZlQ2xhc3MoJ3Nob3duJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBPcGVuIHRoaXMgcm93XHJcbiAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZCggcm9vdC5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcihyb3cuZGF0YSgpKSApLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgdHIuYWRkQ2xhc3MoJ3Nob3duJyk7XHJcbiAgICAgICAgICAgICAgICAgIHJvb3QuYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSApOyovXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQ9ZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAvL2RlYnVnKCAnVGFibGUgZHJhdyBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xyXG5cclxuICAgICAgICAkKCd0ZDpjb250YWlucyhcIipcIiknKS5odG1sKCc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCI+PC9pPicpO1xyXG4gICAgICAgICQoJ3RkLmRldGFpbHMtY29udHJvbCcpLnJlbW92ZUNsYXNzKCdkZXRhaWxzLWNvbnRyb2wnKTtcclxuXHJcblxyXG5cclxuICAgIH1cclxuICAgIGxldCBzZWxlY3RlZFByb2R1Y3RHcm91cD1udWxsO1xyXG5cclxuICAgIHRoaXMuZ2V0RGF0YXRhYmxlcz1mdW5jdGlvbiAob3JkZXJUeXBlKXtcclxuICAgICAgICBsZXQgdGFibGUgPSAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2VhcmNoU3RyPWRhdGFUYWJsZVNlYXJjaFN0cjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmtyZWw9ZGF0YVRhYmxlU2VhcmNoS3JlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN1cHBsaWVySWQ9Y2hhbmdlUGFyYW1ldGVyLnN1cHBsaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHJvZml0Q2VudGVySWQ9Y2hhbmdlUGFyYW1ldGVyLnByb2ZpdENlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1jaGFuZ2VQYXJhbWV0ZXIuZGVsaXZlcnlEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZ3JvdXBJZD1zZWxlY3RlZFByb2R1Y3RHcm91cDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uczoge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IEFQUC5PcmRlck1vZHVsZS5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uRGVmcygpLFxyXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogQVBQLk9yZGVyTW9kdWxlLnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW4oKSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBbWzEsICdhc2MnXV0sXHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsMEJBQTBCLEdBQUMsVUFBVUMsT0FBTyxFQUFFO0VBQ2pEO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxHQUFHO0lBQ1BDLEtBQUssRUFBRSxJQUFJO0lBQ1hDLG9CQUFvQixFQUFFLGlDQUFpQztJQUN2REMsUUFBUSxFQUFFLEtBQUs7SUFDZkMsR0FBRyxFQUFFO01BQ0RDLG1CQUFtQixFQUFFLEVBQUU7TUFDdkJDLG1CQUFtQixFQUFFLEVBQUU7TUFDdkJDLEtBQUssRUFBRSxFQUFFO01BQ1RDLElBQUksRUFBRSxFQUFFO01BQ1JDLElBQUksRUFBRSxFQUFFO01BQ1JDLE1BQU0sRUFBRSxFQUFFO01BQ1ZDLEtBQUssRUFBRSxFQUFFO01BQ1RDLE1BQU0sRUFBRSxFQUFFO01BQ1ZDLE9BQU8sRUFBRTtJQUNiLENBQUM7SUFDREMsU0FBUyxFQUFFO01BQ1BDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLO0lBQzdCLENBQUM7SUFDREMsc0JBQXNCLEVBQUUsU0FBeEJBLHNCQUFzQkEsQ0FBQSxFQUFjLENBQ3BDO0VBQ0osQ0FBQztFQUNELElBQUlDLElBQUksR0FBRyxJQUFJO0VBQ2Y7QUFD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QztJQUNGO0lBQ0EsSUFBSUMsS0FBSyxHQUFHM0UsSUFBSSxDQUFDNEUsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUNsQ3ZFLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDNkIsRUFBRSxDQUFFLFNBQVMsRUFBQ2xDLElBQUksQ0FBQzZFLDRCQUE0QixDQUFDLENBQUNoRixTQUFTLENBQUMsQ0FBQztJQUM5RjtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBR0ksQ0FBQztFQUNELElBQUksQ0FBQ2dGLDRCQUE0QixHQUFDLFVBQVV2QixDQUFDLEVBQUU7SUFDM0M7O0lBRUFqRCxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQzBDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQztJQUNyRTFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDeUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDO0VBSTFELENBQUM7RUFDRCxJQUFJMUMsb0JBQW9CLEdBQUMsSUFBSTtFQUU3QixJQUFJLENBQUN3QyxhQUFhLEdBQUMsVUFBVUcsU0FBUyxFQUFDO0lBQ25DLElBQUlKLEtBQUssR0FBR3RFLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDOEMsU0FBUyxDQUFFO01BQ3JENkIsUUFBUSxFQUFFO1FBQ054QyxHQUFHLEVBQUU7TUFDVCxDQUFDO01BRUQ7TUFDQSxNQUFNLEVBQUU7UUFDSkEsR0FBRyxFQUFDekQsSUFBSSxDQUFDSSxHQUFHLENBQUNDLG1CQUFtQjtRQUNoQzRCLElBQUksRUFBQyxTQUFMQSxJQUFJQSxDQUFXQSxLQUFJLEVBQUU7VUFDakI7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7VUFDb0JBLEtBQUksQ0FBQ2lFLFVBQVUsR0FBQ3pFLGVBQWUsQ0FBQ0MsUUFBUTtVQUN4Q08sS0FBSSxDQUFDa0UsY0FBYyxHQUFDMUUsZUFBZSxDQUFDRSxZQUFZO1VBQ2hETSxLQUFJLENBQUNMLFlBQVksR0FBQ0gsZUFBZSxDQUFDRyxZQUFZO1VBQzlDSyxLQUFJLENBQUNtQixPQUFPLEdBQUNDLG9CQUFvQjtRQUNyQztNQUNKLENBQUM7TUFDRCtDLE9BQU8sRUFBRTtRQUNMQSxPQUFPLEVBQUU7TUFDYixDQUFDO01BQ0QsWUFBWSxFQUFFQyxHQUFHLENBQUNDLFdBQVcsQ0FBQ0MsZ0NBQWdDLENBQUMsQ0FBQztNQUNoRSxTQUFTLEVBQUVGLEdBQUcsQ0FBQ0MsV0FBVyxDQUFDRSw0QkFBNEIsQ0FBQyxDQUFDO01BQ3pELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN4QixDQUFFLENBQUM7SUFDSCxPQUFPWixLQUFLO0VBQ2hCLENBQUM7QUFHTCxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3RQcm9maXRDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/priceListProfitCenter.js\n\n}"); /***/ }, /***/ "./resources/js/admin/product.js" /*!***************************************!*\ !*** ./resources/js/admin/product.js ***! \***************************************/ () { 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\": \"id\"\n }, {\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 \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\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 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\": \"id\"\n }, {\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 \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n root.showResultContainer();\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.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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0IiwiX0RhdGFNb2RlbCIsIl9Qcm9kdWN0IiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJjb250YWN0IiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2R1Y3RBZG1pbiIsIlByb2R1Y3RJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJjb250YWluZXIiLCJyZXN1bHRDb250YWluZXJTZWxlY3RvciIsInJlc3VsdENvbnRhaW5lciIsInRlc3RNb2RlIiwiZmlsdGVycyIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJkZWJ1ZyIsIm5vZGUiLCJjdXJyZW50VGFyZ2V0Iiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0RldGFpbHMiLCJpbml0Vmlld0xpc3RPbGQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwidXJsIiwic2VydmVyU2lkZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJpbml0Vmlld0xpc3QiLCJmaW5kIiwic2VsZWN0MiIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImFqYXgiLCJnZXRQcm9kdWN0U2VhcmNoIiwiZGF0YVR5cGUiLCJwYXJhbXMiLCJ0ZXJtIiwicGFnZSIsInN1cHBsaWVySWQiLCJ2YWwiLCJjYWNoZSIsImRhdGVwaWNrZXIiLCJkYXRlRm9ybWF0Iiwib25TZWxlY3QiLCJkYXRlVGV4dCIsIm9iaiIsImlucHV0IiwiY2xpY2siLCJidXR0b24iLCJvZmYiLCJvbiIsImxvYWRpbmdSZXN1bHRDb250YWluZXIiLCJyZXF1ZXN0UHJvZHVjdHMiLCJzZXRWaXNpYmxlRmlsdGVycyIsImxvYWRGaWx0ZXJzRnJvbUxvY2FsU3RvcmFnZSIsImhpZGVSZXN1bHRDb250YWluZXIiLCJoaWRlIiwic2hvd1Jlc3VsdENvbnRhaW5lciIsImluaXQiLCJDU1NTZWxlY3RvckZvcm0iLCJwaWN0dXJlIiwicGljVXJsIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJhdHRyIiwic3BlY2lmaWNhdGlvbiIsImRvY1VybCIsImFkZEF0dGFjaG1lbnQiLCJGb3JtU2F2ZUJ1dHRvbiIsImNsaWNrU2F2ZUJ1dHRvbiIsImF0dGFjaG1lbnREYXRhIiwicm93TnVtIiwiZGF0ZVN0ciIsIkRhdGUiLCJ1cGRhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJkYXRlIiwibGluayIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiVG9hc3QiLCJlbmFibGVUaW1lcnMiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbF9maWxlbmFtZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJ0aW1lb3V0IiwidHlwZUluZGV4IiwidHlwZU5hbWUiLCJjIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheERhdGEiLCJGb3JtRGF0YSIsImVhY2giLCJnZXRBbGwiLCJrZXkiLCJ2YWx1ZSIsImdldEFqYXhEYXRhSnNvbiIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiZW50cmllcyIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwicGFpciIsImVyciIsImUiLCJmIiwib2JqZWN0IiwiZm9yRWFjaCIsIlJlZmxlY3QiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwiYWpheERhdGFKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsImFqYXhNZXRob2QiLCJmb3JtIiwiZm9ybURhdGEiLCJmaWx0ZXJEYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImQiLCJkcmF3IiwiZ2V0SXRlbSIsInBhcnNlIiwiX2xvb3AiLCJmaWVsZHMiLCJpcyIsInRyaWdnZXIiLCJwcm9wIiwiaW5jbHVkZXMiLCJwcm9jZXNzUmVzcG9uc2UiLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJzdG9wUHJvcGFnYXRpb24iLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsInN1Y2Nlc3MiLCJnZXQiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2R1Y3QuanM/OWI1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgUHJvZHVjdD09PSd1bmRlZmluZWQnKXtcbiAgICBjbGFzcyBQcm9kdWN0IGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIENvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgd2luZG93LlByb2R1Y3Q9UHJvZHVjdDtcbn1cbndpbmRvdy5Qcm9kdWN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pIHtcbiAgICAvKlxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXG4gICAgICogaW4gdGhlIGNsYXNzXG4gICAgICovXG4gICAgbGV0IE9wdHMgPSB7XG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJQcm9kdWN0JyxcbiAgICAgICAgY29udGFpbmVyOm51bGwsXG4gICAgICAgIHJlc3VsdENvbnRhaW5lclNlbGVjdG9yOicuY29udGFpbmVyUHJvZHVjdCAuY29udGFpbmVyUmVzdWx0JyxcbiAgICAgICAgcmVzdWx0Q29udGFpbmVyOm51bGwsXG5cbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJzOntcbiAgICAgICAgICAgIFByb2R1Y3Q6e30sXG4gICAgICAgIH0sXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDogJycsXG4gICAgICAgICAgICBpbmRleDogJycsXG4gICAgICAgICAgICBzaG93OiAnJyxcbiAgICAgICAgICAgIGVkaXQ6ICcnLFxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcbiAgICAgICAgICAgIHVwZGF0ZTogJycsXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6ICcnLFxuICAgICAgICAgICAgZGV0YWNoRmlsZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZToge1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ10sXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IFByb2R1Y3QgPSB7fTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XG4gICAgbGV0IGRhdGFUYWJsZT1udWxsO1xuICAgIC8qXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBQcm9kdWN0SXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFQcm9kdWN0SXRlbSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgbGV0cmUga2VsbGV0IGhvem5pICcpO1xuICAgICAgICAgICAgaWYgKCFBUFAuUHJvZHVjdCkge1xuICAgICAgICAgICAgICAgIEFQUC5Qcm9kdWN0ID0gbmV3IHdpbmRvdy5Qcm9kdWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290LlByb2R1Y3QgPSBBUFAuUHJvZHVjdDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRWRpdD1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdMaXN0T2xkID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIn0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJwcm9kdWN0R3JvdXBcIn0sXG4gICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwifSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdMaXN0PWZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XG4gICAgICAgIGRlYnVnKCdpbml0Vmlld1NlYXJjaCBpbmljaWFsaXphdGlvbiAxJyk7XG5cbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnN1cHBsaWVyU2VsZWN0LCBzZWxlY3QucHJvZml0Q2VudGVyU2VsZWN0LCBzZWxlY3QucHJvZHVjdEdyb3VwU2VsZWN0LCBzZWxlY3QucHJvZHVjZXJTZWxlY3QsIHNlbGVjdC5ob29yZXljYU5hbWVzU2VsZWN0LCBzZWxlY3Quc3BlY2lhbE9mZmVyU2VsZWN0Jykuc2VsZWN0MigpO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3QucHJvZHVjdFNlbGVjdCcpLnNlbGVjdDIoe1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcuLi4nLFxuICAgICAgICAgICAgYWxsb3dDbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIGFqYXg6IHtcbiAgICAgICAgICAgICAgICB1cmw6IE9wdHMuVVJMLmdldFByb2R1Y3RTZWFyY2gsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm06IHBhcmFtcy50ZXJtIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFyYW1zLnBhZ2UgfHwgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVySWQ6IHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5zdXBwbGllclNlbGVjdCcpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjYWNoZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmRhdGVQaWNrZXJGcm9tLCAuZGF0ZVBpY2tlclRvJykuZGF0ZXBpY2tlcih7XG4gICAgICAgICAgICBkYXRlRm9ybWF0OiAneXktbW0tZGQnLFxuXG4gICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0LG9iaikge1xuICAgICAgICAgICAgICAgIGRlYnVnKHRoaXMpO1xuICAgICAgICAgICAgICAgIGRlYnVnKG9iai5pbnB1dCk7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJyBpbnB1dFtuYW1lPVwiZGVsaXZlcnlEYXRlXCJdJykudmFsKGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIC8vcm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIobnVsbCwkKG9iai5pbnB1dCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyQ2xpY2snKS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgICAgICAgZGVidWcoJCh0aGlzKS5kYXRhKCdhY3Rpb24nKSk7XG4gICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiJyskKHRoaXMpLmRhdGEoJ2FjdGlvbicpKydcIl0nKS5kYXRlcGlja2VyKCdzaG93Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgYnV0dG9uPXJvb3QuY29udGFpbmVyLmZpbmQoJy5Gb3JtU2VuZEJ1dHRvbicpO1xuICAgICAgICBidXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBidXR0b24ub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGRlYnVnICgnRm9ybVNlbmRCdXR0b24gY2xpY2snKTtcbiAgICAgICAgICAgIHJvb3QubG9hZGluZ1Jlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICAgICAgcm9vdC5yZXF1ZXN0UHJvZHVjdHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3Quc2V0VmlzaWJsZUZpbHRlcnMoJ1Byb2R1Y3QnKTtcblxuICAgICAgICBpZiAocm9vdC5sb2FkRmlsdGVyc0Zyb21Mb2NhbFN0b3JhZ2UoKSkge1xuICAgICAgICAgICAgcm9vdC5sb2FkaW5nUmVzdWx0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICByb290LnJlcXVlc3RQcm9kdWN0cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGVuZCcpO1xuICAgIH1cblxuXG4gICAgdGhpcy5sb2FkaW5nUmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2xlYXJSZXN1bHRDb250YWluZXInKTtcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xuICAgICAgICByb290LmhpZGVSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmNvbnRhaW5lckxvYWRpbmcnKS5zaG93KCk7XG4gICAgICAgIC8qXG4gICAgICAgIGxldCB0ZW1wbGF0ZT1yb290LmNvbnRhaW5lci5maW5kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJsb2FkaW5nXCJdJykuaHRtbCgpXG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmh0bWwodGVtcGxhdGUpO1xuXG4gICAgICAgICAqL1xuICAgIH1cbiAgICB0aGlzLmhpZGVSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdoaWRlIGNvbnRhaW5lclJlc3VsdCcpO1xuICAgICAgICBkZWJ1Zyhyb290LnJlc3VsdENvbnRhaW5lcik7XG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zaG93UmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLmhpZGUoKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuc2hvdygpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0QWRtaW4gaW5pdCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcblxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoUHJvZHVjdEl0ZW0pe1xuICAgICAgICAgICAgcm9vdC5Qcm9kdWN0PVByb2R1Y3RJdGVtXG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5kYXRhVGFibGU9bnVsbDtcbiAgICAgICAgcm9vdC5jb250YWluZXI9JChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXI9JChPcHRzLnJlc3VsdENvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pe1xuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnBpY3R1cmUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqLy8vLy8vLy8vLy8vLy8vLy8vKioqKioqKioqKioqKioqKicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnBpY3R1cmUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgICAgIGxldCBwaWNVcmw9cm9vdC5Qcm9kdWN0LnBpY3R1cmUuUHVibGljVXJsKycvJytyb290LlByb2R1Y3QucGljdHVyZS5maWxlbmFtZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBpY1VybCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKSk7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKS5hdHRyKCdzcmMnLHBpY1VybCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqLy8vLy8vLy8vLy8vLy8vLy8vKioqKioqKioqKioqKioqKicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xuICAgICAgICAgICAgbGV0IGRvY1VybD1yb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbi5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLmZpbGVuYW1lO1xuICAgICAgICAgICAgcm9vdC5hZGRBdHRhY2htZW50KHJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgRm9ybVNhdmVCdXR0b249JChDU1NTZWxlY3RvckZvcm0rJyBidXR0b24uRm9ybVNhdmVCdXR0b24nKTtcbiAgICAgICAgRm9ybVNhdmVCdXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcblxuICAgIH1cblxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XG4gICAgICAgIC8vcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xuICAgICAgICAvL2F0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xuICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09MTtcbiAgICAgICAgbGV0IGRhdGVTdHI9bmV3IERhdGUoYXR0YWNobWVudERhdGEudXBkYXRlZF9hdCk7XG4gICAgICAgIGRhdGVTdHI9ZGF0ZVN0ci50b0xvY2FsZVN0cmluZygnaHUtSFUnLCB7fSk7XG4gICAgICAgIGF0dGFjaG1lbnREYXRhLmRhdGU9ZGF0ZVN0cjtcbiAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZHVjdEF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAvL3Jvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJGw6FqbCBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBhdHRhY2htZW50RGF0YS5vcmlnaW5hbF9maWxlbmFtZStcIiBmw6FqbCBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRWaXNpYmxlRmlsdGVycz1mdW5jdGlvbiAodHlwZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZXRWaXNpYmxlRmlsdGVycycpO1xuICAgICAgICBjb25zb2xlLmxvZyhPcHRzLmZpbHRlcnNbdHlwZV0pO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XG4gICAgICAgICQocm9vdC5jb250YWluZXIpLmZpbmQoJ2RpdltjbGFzcyo9XCJmaWx0ZXJcIl0nKS5oaWRlKClcbiAgICAgICAgZm9yIChjb25zdCB0eXBlSW5kZXggaW4gT3B0cy5maWx0ZXJzW3R5cGVdKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZT1PcHRzLmZpbHRlcnNbdHlwZV1bdHlwZUluZGV4XTtcbiAgICAgICAgICAgIGRlYnVnKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQocm9vdC5jb250YWluZXIpLmZpbmQoJy5maWx0ZXJfJyt0eXBlTmFtZSkpO1xuICAgICAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKS5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jPWZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pe1xuICAgICAgICBjb25zb2xlLmxvZygnYyBjYWxsZWQnKTtcbiAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKENTU1NlbGVjdG9yRm9ybSkpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKENTU1NlbGVjdG9yRm9ybSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcbiAgICAgICAgLy9yZXR1cm47XG4gICAgICAgIGxldCBhamF4RGF0YSA9IG5ldyBGb3JtRGF0YShyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3VwcGxpZXJzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnc3VwcGxpZXInKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2ZpdENlbnRlcnNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9maXRDZW50ZXInKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cHNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWN0R3JvdXAnKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0c1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3QnKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjZXJzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjZXInKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnaG9vcmV5Y2FOYW1lJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2hvb3JleWNhTmFtZXNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdob29yZXljYU5hbWUnKTtcblxuICAgICAgICAvL2FqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywgcm9vdC5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCkpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4S2V5ID0gJCh0aGlzKS5hdHRyKCduYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhEYXRhLmdldChpbmRleEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LCBhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICovXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcblxuICAgIH1cbiAgICB0aGlzLmdldEFqYXhEYXRhSnNvbj1mdW5jdGlvbigpe1xuXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLlByb2R1Y3RMaXN0Rm9ybScpO1xuICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgICBmb3IgKGxldCBwYWlyIG9mIGFqYXhEYXRhLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9iamVjdCA9IHt9O1xuICAgICAgICBhamF4RGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICAgIGlmKCFSZWZsZWN0LmhhcyhvYmplY3QsIGtleSkpe1xuICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkob2JqZWN0W2tleV0pKXtcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IFtvYmplY3Rba2V5XV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmplY3Rba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBhamF4RGF0YUpzb24gPSBKU09OLnN0cmluZ2lmeShvYmplY3QpO1xuICAgICAgICByZXR1cm4gYWpheERhdGFKc29uO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFByb2R1Y3RzPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudDtcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9J0dFVCc7XG4gICAgICAgIC8vdG9rZW4gZm9ybWRhdGFiYSFcbiAgICAgICAgZGVidWcoYWpheFVybCk7XG5cbiAgICAgICAgYWpheERhdGFKc29uPXJvb3QuZ2V0QWpheERhdGFKc29uKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhEYXRhSnNvbik7XG5cbiAgICAgICAgLy8gU2F2ZSBmaWx0ZXJzIHRvIGxvY2FsU3RvcmFnZVxuICAgICAgICBsZXQgZm9ybSA9IHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0uUHJvZHVjdExpc3RGb3JtJyk7XG4gICAgICAgIGlmIChmb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtWzBdKTtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJEYXRhID0ge307XG4gICAgICAgICAgICBmb3JtRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKGZpbHRlckRhdGEsIGtleSkpe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShmaWx0ZXJEYXRhW2tleV0pKXtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGF0YVtrZXldID0gW2ZpbHRlckRhdGFba2V5XV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlckRhdGFba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Byb2R1Y3RfYWRtaW5fZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KGZpbHRlckRhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cbiAgICAgICAgY29uc29sZS5sb2coZGF0YVRhYmxlQ1NTU2VsZWN0b3IgKTtcblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICAvKlxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmKCFyb290LmRhdGFUYWJsZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggTmluY3MgRGF0YXRhYmxlJyk7XG4gICAgICAgICAgICByb290LmRhdGFUYWJsZT1cbiAgICAgICAgICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYWpheFwiOntcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLSoqKioqKi0tLS0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIGQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheERhdGE6IEFQUC5Qcm9kdWN0QWRtaW4uZ2V0QWpheERhdGFKc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYWpheE1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYWpheERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB9ICxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInByb2R1Y3RHcm91cFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJzdXBwbGllck5hbWVcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXRlU2F2ZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2hvd1Jlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RyYXdDYWxsYmFjaycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuXG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggdmFuIERhdGF0YWJsZScpO1xuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgcm9vdC5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMubG9hZEZpbHRlcnNGcm9tTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Byb2R1Y3RfYWRtaW5fZmlsdGVycycpO1xuICAgICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSBKU09OLnBhcnNlKGZpbHRlcnMpO1xuICAgICAgICAgICAgbGV0IGZvcm0gPSByb290LmNvbnRhaW5lci5maW5kKCdmb3JtLlByb2R1Y3RMaXN0Rm9ybScpO1xuXG4gICAgICAgICAgICBpZiAoZm9ybS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGZpbHRlckRhdGEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJEYXRhW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IGZvcm0uZmluZCgnW25hbWU9XCInICsga2V5ICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5pcygnc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkcy5pcygnOmNoZWNrYm94JykgfHwgZmllbGRzLmlzKCc6cmFkaW8nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsIHZhbHVlLmluY2x1ZGVzKCQodGhpcykudmFsKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLnZhbCgpID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlPWZ1bmN0aW9uICgpIHtcblxuICAgIH1cblxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBkZWJ1ZygnU2F2ZSBjbGlja2VkJyk7XG5cbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcbiAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYWpheERhdGE9cm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5wcm9kdWN0Rm9ybScpO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XG4gICAgICAgIGlmKHJvb3QuUHJvZHVjdC5pZCl7XG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlByb2R1Y3QuaWQpO1xuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAvLydYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogT3B0cy50b2tlblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTaWtlcmVzIHLDtmd6w610w6lzIVwiLCBtZXNzYWdlOiBhamF4RGF0YS5nZXQoJ25hbWUnKStcIiBuZXbFsSB0ZXJtw6lrIGVsbWVudHZlXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLE9BQU8sS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN0QkEsUUFBTywwQkFBQUMsVUFBQTtJQUVUO0FBQ1I7QUFDQTtJQUNRLFNBQUFDLFNBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLFFBQUE7TUFDdkJHLEtBQUEsR0FBQUUsVUFBQSxPQUFBTCxRQUFBLEdBQU1DLElBQUksRUFBQ0MsT0FBTztNQUNsQixJQUFHLE9BQU9DLEtBQUEsQ0FBS0csT0FBTyxLQUFJLFdBQVcsRUFBQztRQUNsQ0gsS0FBQSxDQUFLRyxPQUFPLEdBQUMsRUFBRTtNQUNuQjtNQUNBQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztNQUFDLE9BQUFMLEtBQUE7SUFDOUM7SUFBQ00sU0FBQSxDQUFBVCxRQUFBLEVBQUFELFVBQUE7SUFBQSxPQUFBVyxZQUFBLENBQUFWLFFBQUE7RUFBQSxFQVhpQlcsU0FBUztFQVk5QjtFQUNEQyxNQUFNLENBQUNkLE9BQU8sR0FBQ0EsUUFBTztBQUMxQjtBQUNBYyxNQUFNLENBQUNDLFlBQVksR0FBQyxVQUFVWCxPQUFPLEVBQUNZLFdBQVcsRUFBRTtFQUMvQztBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUlDLElBQUksR0FBRztJQUNQQyxLQUFLLEVBQUUsSUFBSTtJQUNYQyxvQkFBb0IsRUFBRSxtQkFBbUI7SUFDekNDLFNBQVMsRUFBQyxJQUFJO0lBQ2RDLHVCQUF1QixFQUFDLG9DQUFvQztJQUM1REMsZUFBZSxFQUFDLElBQUk7SUFFcEJDLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLE9BQU8sRUFBQztNQUNKeEIsT0FBTyxFQUFDLENBQUM7SUFDYixDQUFDO0lBQ0R5QixHQUFHLEVB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\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}"); /***/ }, /***/ "./resources/js/admin/profitCenter.js" /*!********************************************!*\ !*** ./resources/js/admin/profitCenter.js ***! \********************************************/ () { 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 _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 DataModelProfitCenter === 'undefined') {\n var _DataModelProfitCenter = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _DataModelProfitCenter(data, options) {\n var _this;\n _classCallCheck(this, _DataModelProfitCenter);\n _this = _callSuper(this, _DataModelProfitCenter, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.address === \"undefined\") {\n _this.address = [];\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(_DataModelProfitCenter, _DataModel);\n return _createClass(_DataModelProfitCenter);\n }(DataModel);\n ;\n window.DataModelProfitCenter = _DataModelProfitCenter;\n}\nwindow.ProfitCenterAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var ProfitCenter = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var addressPopupWorkflow = 'new';\n var CSSSelectorForm = '';\n var dataTableCSSSelector = '';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, ProfitCenterItem) {\n console.log('ProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n if (!ProfitCenterItem) {\n console.log('ProfitCentert letre kellet hozni ');\n if (!APP.ProfitCenter) {\n APP.ProfitCenter = new window.DataModelProfitCenter();\n }\n root.ProfitCenter = APP.ProfitCenter;\n }\n CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n };\n this.getOpts = function () {\n return Opts;\n };\n this.getData = function () {\n return root.ProfitCenter;\n };\n this.init = function (options, ProfitCenterItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProfitCenterItem) {\n root.ProfitCenter = ProfitCenterItem;\n }\n root.initViewList();\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.ProfitCenter = new window.DataModelProfitCenter();\n root.initViewDetails();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n /**\r\n * Contact Popup setup\r\n */\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $(CSSSelectorForm + ' .buttonNewContact').bind('click', function () {\n APP.ProfitCenterAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n /**\r\n * Address Popup setup\r\n */\n if (!APP.AddressPopUp) {\n console.log('nincs APP.AddressPopUp');\n APP.AddressPopUp = new window.AddressPopUp();\n } else {\n console.log('mar van APP.AddressPopUp');\n }\n APP.AddressPopUp.init({\n active: true,\n onAfterSave: root.addressAction\n });\n root.renderAddress();\n $(CSSSelectorForm + ' .buttonNewAddress').bind('click', function () {\n APP.ProfitCenterAdmin.setAddressPopupWorkflow('new');\n APP.AddressPopUp.clearData();\n APP.AddressPopUp.show();\n });\n /**\r\n *\r\n */\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons({\n onChange: function onChange(value, node) {\n debug(value);\n debug(node);\n /*\r\n if(node==='profitCenterMultiAddress'){\r\n if(value==1){\r\n $('.containerMultiAddress').removeClass('d-none');\r\n }else{\r\n $('.containerMultiAddress').addClass('d-none');\r\n }\r\n }\r\n */\n if (node === 'addressEqual') {\n if (value == 1) {\n $(CSSSelectorForm + ' .containerMultiAddress').addClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').addClass('d-none');\n } else {\n $(CSSSelectorForm + ' .containerMultiAddress').removeClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').removeClass('d-none');\n }\n }\n }\n });\n $(CSSSelectorForm + \" :input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $(CSSSelectorForm + ' button.FormSaveButton').off('click');\n $(CSSSelectorForm + ' button.FormSaveButton').on('click', root.clickSaveButton);\n /*\r\n $(\"input[name=logoFile]\").change(function(){\r\n setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo');\r\n });\r\n */\n\n //Opts.onAfterInitViewDetails();\n debug('**end initViewDetails ');\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n var CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'email', 'postCode', 'city', 'street', 'phone', 'mobil'];\n $.each(needToSet, function () {\n // debug(this); //alapadatok beallitasanak logolasa\n if (typeof root.ProfitCenter[this] != 'undefined') {\n /* //alapadatok beallitasanak logolasa\r\n debug(root.ProfitCenter[this]);\r\n debug(CSSSelectorForm+' input[name='+this+']');\r\n debug($(CSSSelectorForm+' input[name='+this+']'));\r\n */\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.ProfitCenter[this]);\n }\n });\n if (typeof root.ProfitCenter['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.ProfitCenter.note);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.ProfitCenter.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.ProfitCenter.hooreycaDataActive + ']').click();\n if (typeof root.ProfitCenter['logoFile'] != 'undefined' && root.ProfitCenter['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.ProfitCenter['logoFile']);\n }\n $(CSSSelectorForm + ' *[data-toggle=addressEqual][data-title=' + root.ProfitCenter.addressEqual + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=multiAddress][data-title=' + root.ProfitCenter.multiAddress + ']').click();\n /*debug(root.ProfitCenter.address.length);\r\n if(root.ProfitCenter.address.length>0){\r\n $(CSSSelectorForm+' *[data-toggle=addressEqual][data-title=0]').click();\r\n if(root.ProfitCenter.address.length>1){\r\n $(CSSSelectorForm+' *[data-toggle=multiAddress][data-title=1]').click();\r\n }\r\n }\r\n */\n var supplier = [];\n $.each(root.ProfitCenter.suppliers, function () {\n supplier.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n $.each(supplier, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n };\n this.resetContactTable = function () {\n $(CSSSelectorForm + ' .contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.ProfitCenter.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n $('.contactTable .buttonDelete').unbind('click');\n $('.contactTable .buttonDelete').bind('click', root.contactDeleteClick);\n $('.contactTable .buttonEdit').unbind('click');\n $('.contactTable .buttonEdit').bind('click', root.contactEditClick);\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.ProfitCenter.contact = root.ProfitCenter.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n console.log(root.ProfitCenter.contact);\n row.remove();\n root.resetContactTable();\n };\n this.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n this.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.contact.push(contactData);\n contactData.rowNum = root.ProfitCenter.contact.length;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $(CSSSelectorForm + ' .contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Kapcsolat tartó hozzáadva!\",\n message: contactData.name + \" nevű kapocsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.ProfitCenter.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.ProfitCenter.contact = newContacts;\n root.resetContactTable();\n Toast.create({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapocsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n\n /***************\r\n *\r\n * Address function\r\n *\r\n */\n this.resetAddressTable = function () {\n $(CSSSelectorForm + ' .addressTable tbody tr').remove();\n root.renderAddress();\n };\n this.renderAddress = function () {\n var rowNum = 1;\n console.log('renderingAddress');\n $.each(root.ProfitCenter.getData('address'), function () {\n var itemData = this;\n itemData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n debug(itemData);\n var render = Mustache.render(template, itemData);\n $('.addressTable tbody').append(render);\n rowNum++;\n });\n root.bindAddressClickAction();\n };\n this.bindAddressClickAction = function () {\n $('.addressTable .buttonDelete').unbind('click');\n $('.addressTable .buttonDelete').bind('click', root.addressDeleteClick);\n $('.addressTable .buttonEdit').unbind('click');\n $('.addressTable .buttonEdit').bind('click', root.addressEditClick);\n };\n this.addressDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.ProfitCenter.address = root.ProfitCenter.address.filter(function (value, index, arr) {\n if (value.id != id) return true;\n });\n console.log(root.ProfitCenter.address);\n row.remove();\n root.resetAddressTable();\n };\n this.getAddressPopupWorkflow = function () {\n return addressPopupWorkflow;\n };\n this.setAddressPopupWorkflow = function (status) {\n addressPopupWorkflow = status;\n };\n this.addressEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.setAddressPopupWorkflow('edit');\n APP.AddressPopUp.loadData(id);\n };\n this.addressAction = function (itemData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getAddressPopupWorkflow() == 'new') {\n root.addAddress(itemData);\n } else if (root.getAddressPopupWorkflow() == 'edit') {\n root.editAddress(itemData.id, itemData);\n }\n };\n this.addAddress = function (ItemData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.address.push(ItemData);\n ItemData.rowNum = root.ProfitCenter.address.length;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n var render = Mustache.render(template, ItemData);\n $(CSSSelectorForm + ' .addressTable tbody').append(render);\n root.bindAddressClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Cím hozzáadva!\",\n message: ItemData.street + \" hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.editAddress = function (id, itemData) {\n var newItem = [];\n $.each(root.ProfitCenter.getData('address'), function (index) {\n if (this.id == id) {\n newItem.push(itemData);\n } else {\n newItem.push(this);\n }\n });\n root.ProfitCenter.address = newItem;\n root.resetAddressTable();\n Toast.create({\n title: \"cím adatai módosítva!\",\n message: itemData.street + \" módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.initViewList = 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 datatableActionButtonClickCallBack: root.clickNew,\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 \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n 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 {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\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 /*\r\n console.log(Opts.URL);\r\n console.log(ajaxUrl);\r\n */\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n event.preventDefault();\n debug(CSSSelectorForm);\n debug($(CSSSelectorForm));\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n $(CSSSelectorForm).addClass('was-validated');\n $(CSSSelectorForm)[0].reportValidity();\n Toast.create({\n title: \"Validációs hiba!\",\n message: \"Kérjük, töltse ki a kötelező mezőket!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n $(CSSSelectorForm).removeClass('was-validated');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.ProfitCenter.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.ProfitCenter.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n /*\r\n debug(ajaxUrl);\r\n debug(ajaxMethod);\r\n debug(ajaxData.entries());\r\n for (var pair of ajaxData.entries()) {\r\n console.log(pair[0]+ ', ' + pair[1]);\r\n }\r\n */\n\n console.table(Object.fromEntries(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 },\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ű profitcenter 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 this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n /*\r\n $.each(ajaxData.getAll('productGroup'),function(key,value){\r\n ajaxData.append('productGroup[]',value);\r\n })\r\n */\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('supplier[]', value);\n });\n return ajaxData;\n };\n this.construct(options, ProfitCenterItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhTW9kZWxQcm9maXRDZW50ZXIiLCJfRGF0YU1vZGVsIiwiX0RhdGFNb2RlbFByb2ZpdENlbnRlciIsImRhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiY29udGFjdCIsImFkZHJlc3MiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZml0Q2VudGVyQWRtaW4iLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwiUHJvZml0Q2VudGVyIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiYWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJDU1NTZWxlY3RvckZvcm0iLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZ2V0RGF0YSIsImluaXQiLCJpbml0Vmlld0xpc3QiLCJjbGlja05ldyIsImRlYnVnIiwibG9hZE1haW5Db250ZW50IiwiY2xpY2tOZXdDYWxsQmFjayIsImluaXRWaWV3RGV0YWlscyIsIlN1cHBsaWVySXRlbSIsIkNvbnRhY3RQb3BVcCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJBZGRyZXNzUG9wVXAiLCJhZGRyZXNzQWN0aW9uIiwicmVuZGVyQWRkcmVzcyIsInNldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwidG9vbHRpcCIsImluaXRSYWRpb0J1dHRvbnMiLCJvbkNoYW5nZSIsInZhbHVlIiwibm9kZSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJpbnB1dG1hc2siLCJvbmluY29tcGxldGUiLCJ2YWwiLCJsZW5ndGgiLCJvbmNvbXBsZXRlIiwib25jbGVhcmVkIiwib2ZmIiwib24iLCJjbGlja1NhdmVCdXR0b24iLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJlYWNoIiwibm90ZSIsImNhblNlZSIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwiYXR0ciIsImFkZHJlc3NFcXVhbCIsIm11bHRpQWRkcmVzcyIsInN1cHBsaWVyIiwic3VwcGxpZXJzIiwicHVzaCIsImVzY2FwZVNlbGVjdG9yIiwicHJvcCIsInJlc2V0Q29udGFjdFRhYmxlIiwicmVtb3ZlIiwicm93TnVtIiwiY29udGFjdERhdGEiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsImFwcGVuZCIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiZXZlbnQiLCJyb3ciLCJjbG9zZXN0IiwiaWQiLCJmaW5kIiwiZmlsdGVyIiwiYXJyIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJzdGF0dXMiLCJsb2FkRGF0YSIsImFkZENvbnRhY3QiLCJlZGl0Q29udGFjdCIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwidGl0bGUiLCJtZXNzYWdlIiwiVE9BU1RfU1RBVFVTIiwiU1VDQ0VTUyIsInRpbWVvdXQiLCJuZXdDb250YWN0cyIsInJlc2V0QWRkcmVzc1RhYmxlIiwiaXRlbURhdGEiLCJiaW5kQWRkcmVzc0NsaWNrQWN0aW9uIiwiYWRkcmVzc0RlbGV0ZUNsaWNrIiwiYWRkcmVzc0VkaXRDbGljayIsImdldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwiYWRkQWRkcmVzcyIsImVkaXRBZGRyZXNzIiwiSXRlbURhdGEiLCJzdHJlZXQiLCJuZXdJdGVtIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJEYXRhVGFibGUiLCJsYW5ndWFnZSIsInVybCIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJ0ZXh0IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50cyIsInJvd0RhdGEiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJhamF4VXJsIiwicmVwbGFjZSIsImRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSIsImFqYXhEYXRhIiwiX3Rva2VuIiwiYWpheCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJkcmF3IiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5IiwicmVwb3J0VmFsaWRpdHkiLCJEQU5HRVIiLCJzdG9wUHJvcGFnYXRpb24iLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4TWV0aG9kIiwidGFibGUiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwiZ2V0IiwiRm9ybURhdGEiLCJnZXRBbGwiLCJrZXkiLCJpbmRleEtleSIsInNldCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzP2NkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIERhdGFNb2RlbFByb2ZpdENlbnRlcj09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIERhdGFNb2RlbFByb2ZpdENlbnRlciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmFkZHJlc3MgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3M9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyPURhdGFNb2RlbFByb2ZpdENlbnRlcjtcclxufVxyXG5cclxud2luZG93LlByb2ZpdENlbnRlckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2ZpdENlbnRlcicsXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgaW5kZXg6ICcnLFxyXG4gICAgICAgICAgICBzaG93OiAnJyxcclxuICAgICAgICAgICAgZWRpdDogJycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXHJcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcclxuICAgICAgICAgICAgdXBkYXRlOiAnJyxcclxuICAgICAgICAgICAgZGVzdHJveTogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhVGFibGU6IHtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGV0IFByb2ZpdENlbnRlciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XHJcbiAgICBsZXQgYWRkcmVzc1BvcHVwV29ya2Zsb3cgPSAnbmV3JztcclxuICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jyc7XHJcbiAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9Jyc7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9maXRDZW50ZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZiAoIVByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpdENlbnRlcnQgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZiAoIUFQUC5Qcm9maXRDZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXIgPSBuZXcgd2luZG93LkRhdGFNb2RlbFByb2ZpdENlbnRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZml0Q2VudGVyID0gQVBQLlByb2ZpdENlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZml0Q2VudGVyRm9ybSc7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXREYXRhPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiByb290LlByb2ZpdENlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihQcm9maXRDZW50ZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXI9UHJvZml0Q2VudGVySXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyPW5ldyB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyKCk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhY3QgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFkZHJlc3MgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkFkZHJlc3NQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcCA9IG5ldyB3aW5kb3cuQWRkcmVzc1BvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuYWRkcmVzc0FjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0FkZHJlc3MnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgICQoJ1tkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIl0nKS50b29sdGlwKCk7XHJcbiAgICAgICAgaW5pdFJhZGlvQnV0dG9ucyh7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUsbm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZGVidWcodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9kZT09PSdwcm9maXRDZW50ZXJNdWx0aUFkZHJlc3MnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyTXVsdGlBZGRyZXNzJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZihub2RlPT09J2FkZHJlc3NFcXVhbCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzU3dpdGNoJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybStcIiA6aW5wdXRcIikuaW5wdXRtYXNrKHtcclxuICAgICAgICAgICAgXCJvbmluY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpKTtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA+IDAgfHwgJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNsZWFyZWRcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyZWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4vKlxyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG4qL1xyXG5cclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgICAgIGRlYnVnKCcqKmVuZCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9maXRDZW50ZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ2VtYWlsJywncG9zdENvZGUnLCdjaXR5Jywnc3RyZWV0JywncGhvbmUnLCdtb2JpbCdcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBkZWJ1Zyh0aGlzKTsgLy9hbGFwYWRhdG9rIGJlYWxsaXRhc2FuYWsgbG9nb2xhc2FcclxuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbi8qIC8vYWxhcGFkYXRvayBiZWFsbGl0YXNhbmFrIGxvZ29sYXNhXHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyhyb290LlByb2ZpdENlbnRlclt0aGlzXSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpKTtcclxuKi9cclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5Qcm9maXRDZW50ZXJbdGhpc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5Qcm9maXRDZW50ZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5jYW5TZWUrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5ob29yZXljYURhdGFBY3RpdmUrJ10nKS5jbGljaygpO1xyXG5cclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuUHJvZml0Q2VudGVyWydsb2dvRmlsZSddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5hZGRyZXNzRXF1YWwrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1tdWx0aUFkZHJlc3NdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5tdWx0aUFkZHJlc3MrJ10nKS5jbGljaygpO1xyXG4gICAgICAgIC8qZGVidWcocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9YWRkcmVzc0VxdWFsXVtkYXRhLXRpdGxlPTBdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MSl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9bXVsdGlBZGRyZXNzXVtkYXRhLXRpdGxlPTFdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIGxldCBzdXBwbGllcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuc3VwcGxpZXJzLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc3VwcGxpZXIucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XHJcbiAgICAgICAgJC5lYWNoKHN1cHBsaWVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWN0VGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlbmRlckNvbnRhY3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyQ29udGFjdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3REZWxldGVDbGljayk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRWRpdCcpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0JykuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdEVkaXRDbGljayk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0PXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdCk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ2VkaXQnKTtcclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmxvYWREYXRhKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlByb2ZpdENlbnRlci5jb250YWN0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiS2FwY3NvbGF0IHRhcnTDsyBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdD1uZXdDb250YWN0cztcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiS2FwY3NvbGF0IGFkYXRhaSBtw7Nkb3PDrXR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBvY3NvbGF0dGFydMOzIG3Ds2Rvc8OtdHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKioqKioqKioqKioqKipcclxuICAgICAqXHJcbiAgICAgKiBBZGRyZXNzIGZ1bmN0aW9uXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2V0QWRkcmVzc1RhYmxlPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmFkZHJlc3NUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJBZGRyZXNzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQWRkcmVzcycpO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdhZGRyZXNzJyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBpdGVtRGF0YT10aGlzO1xyXG4gICAgICAgICAgICBpdGVtRGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQWRkcmVzc1RhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGRlYnVnKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsaXRlbURhdGEpO1xyXG4gICAgICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZEFkZHJlc3NDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZEFkZHJlc3NDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRGVsZXRlJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmFkZHJlc3NEZWxldGVDbGljayk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRWRpdCcpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25FZGl0JykuYmluZCgnY2xpY2snLHJvb3QuYWRkcmVzc0VkaXRDbGljayk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRyZXNzRGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9XCJhZGRyZXNzSWRbXVwiXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPXJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9aWQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2ZpdENlbnRlci5hZGRyZXNzKTtcclxuICAgICAgICByb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZXNldEFkZHJlc3NUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gYWRkcmVzc1BvcHVwV29ya2Zsb3c7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEFkZHJlc3NQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGFkZHJlc3NQb3B1cFdvcmtmbG93PXN0YXR1cztcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5hZGRyZXNzRWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPVwiYWRkcmVzc0lkW11cIl0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XHJcbiAgICAgICAgcm9vdC5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5BZGRyZXNzUG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRyZXNzQWN0aW9uPWZ1bmN0aW9uIChpdGVtRGF0YSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcclxuICAgICAgICBpZihyb290LmdldEFkZHJlc3NQb3B1cFdvcmtmbG93KCk9PSduZXcnKXtcclxuICAgICAgICAgICAgcm9vdC5hZGRBZGRyZXNzKGl0ZW1EYXRhKTtcclxuICAgICAgICB9ZWxzZSBpZihyb290LmdldEFkZHJlc3NQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuZWRpdEFkZHJlc3MoaXRlbURhdGEuaWQsaXRlbURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWRkQWRkcmVzcz1mdW5jdGlvbiAoSXRlbURhdGEpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MucHVzaChJdGVtRGF0YSk7XHJcbiAgICAgICAgSXRlbURhdGEucm93TnVtPXJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJBZGRyZXNzVGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxJdGVtRGF0YSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYWRkcmVzc1RhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJDw61tIGhvenrDoWFkdmEhXCIsIG1lc3NhZ2U6IEl0ZW1EYXRhLnN0cmVldCtcIiBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRBZGRyZXNzPWZ1bmN0aW9uIChpZCxpdGVtRGF0YSl7XHJcblxyXG4gICAgICAgIGxldCBuZXdJdGVtPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdhZGRyZXNzJyksZnVuY3Rpb24gKGluZGV4KXtcclxuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbS5wdXNoKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPW5ld0l0ZW07XHJcbiAgICAgICAgcm9vdC5yZXNldEFkZHJlc3NUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcImPDrW0gYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBpdGVtRGF0YS5zdHJlZXQrXCIgbcOzZG9zw610dmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgLy9cInN0YXRlU2F2ZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKTtcclxuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgZW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE9wdHMuVVJMKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZGVidWcoQ1NTU2VsZWN0b3JGb3JtKTtcclxuICAgICAgICBkZWJ1ZygkKENTU1NlbGVjdG9yRm9ybSkpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSlbMF0ucmVwb3J0VmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkucmVtb3ZlQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG4vKlxyXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xyXG4gICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgY29uc29sZS50YWJsZShPYmplY3QuZnJvbUVudHJpZXMoYWpheERhdGEpKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHByb2ZpdGNlbnRlciBlbG1lbnR2ZVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuLypcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLHFCQUFxQixLQUFHLFdBQVcsRUFBQztFQUFBLElB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S0FBSyxFQUFFLG1CQUFtQjtZQUFFQyxPQUFPLEVBQUVtRCxRQUFRLENBQUNtQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUMsNkJBQTZCO1lBQUU3RSxNQUFNLEVBQUVRLFlBQVksQ0FBQ0MsT0FBTztZQUFFQyxPQUFPLEVBQUU7VUFBSyxDQUFDLENBQUM7VUFDdEpyRixHQUFHLENBQUNPLGVBQWUsQ0FBQ2hDLElBQUksQ0FBQ0ksR0FBRyxDQUFDRSxLQUFLLEdBQUMsU0FBUyxFQUFDVyxJQUFJLENBQUNZLFlBQVksQ0FBQztRQUNuRTtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQztFQUVELElBQUksQ0FBQzRJLDJCQUEyQixHQUFHLFVBQVVySixlQUFlLEVBQUU7SUFDMUQsSUFBSTBJLFFBQVEsR0FBQyxJQUFJb0IsUUFBUSxDQUFDM0osQ0FBQyxDQUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ1FHLENBQUMsQ0FBQzJDLElBQUksQ0FBQzRGLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBQyxVQUFTQyxHQUFHLEVBQUNqSSxLQUFLLEVBQUM7TUFDbkQyRyxRQUFRLENBQUN2RSxNQUFNLENBQUMsYUFBYSxFQUFDcEMsS0FBSyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztJQUVGMkcsUUFBUSxDQUFDdkUsTUFBTSxDQUFDLFFBQVEsRUFBQ2hFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDa0MsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV2RGxDLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLHdCQUF3QixDQUFDLENBQUM4QyxJQUFJLENBQUMsWUFBVztNQUN4RCxJQUFJbUgsUUFBUSxHQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDZ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQztNQUNqQyxJQUFHdUYsUUFBUSxDQUFDbUIsR0FBRyxDQUFDSSxRQUFRLENBQUMsRUFBQztRQUN0QnZCLFFBQVEsQ0FBQ3dCLEdBQUcsQ0FBQ0QsUUFBUSxFQUFDdkIsUUFBUSxDQUFDbUIsR0FBRyxDQUFDSSxRQUFRLENBQUMsQ0FBQ3pCLE9BQU8sQ0FBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkU7SUFDSixDQUFDLENBQUM7SUFDRnJJLENBQUMsQ0FBQzJDLElBQUksQ0FBQzRGLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQyxVQUFTQyxHQUFHLEVBQUNqSSxLQUFLLEVBQUM7TUFDbEQyRyxRQUFRLENBQUN2RSxNQUFNLENBQUMsWUFBWSxFQUFDcEMsS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztJQUNGLE9BQU8yRyxRQUFRO0VBQ25CLENBQUM7RUFDRCxJQUFJLENBQUN4SSxTQUFTLENBQUN0QyxPQUFPLEVBQUVlLGdCQUFnQixDQUFDO0FBRTdDLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2ZpdENlbnRlci5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.js\n\n}"); /***/ }, /***/ "./resources/js/admin/supplier.js" /*!****************************************!*\ !*** ./resources/js/admin/supplier.js ***! \****************************************/ () { 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 _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 Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.canSee === \"undefined\") {\n _this.canSee = 1;\n }\n if (typeof _this.canSeeInOrder === \"undefined\") {\n _this.canSeeInOrder = 1;\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: '',\n createUser: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\n * Constructor\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\n formJSON.multiselectName = data.getAll('multiselectName');\n $.each(formJSON, function (item, value) {\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\n delete formJSON[item];\n });\n if(formJSON.phone){\n formJSON.phone=formJSON.phone.replaceAll('_','');\n }\n if(formJSON.email){\n formJSON.email=formJSON.email.replaceAll('_','');\n }\n */\n return formJSON;\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n $(CSSSelectorForm).addClass('was-validated');\n $(CSSSelectorForm)[0].reportValidity();\n Toast.create({\n title: \"Validációs hiba!\",\n message: \"Kérjük, töltse ki a kötelező mezőket!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n $(CSSSelectorForm).removeClass('was-validated');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.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 },\n success: function success(data) {\n debug('d1: Save success ');\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ű beszálllító 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 this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n if (typeof root.Supplier.users !== 'undefined') {\n root.resetUserTable();\n }\n\n //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n root.initUserCreate();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\n console.log(fileInput.attr('name'));\n console.log(fileInput[0].files[0]);\n console.log(fileInput[0].files[0].name);\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create({\n title: \"Hiba!\",\n message: 'Vállaszon ki fájlt!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n return;\n }\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\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.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\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 ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n var datatableRowActionCallerNode = false;\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\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 beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\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.initViewList = 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 datatableActionButtonClickCallBack: root.clickNew,\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 \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n 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 {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\n data:{\n a:1,\n b:2\n }\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\n console.log(dt);\n console.log(node);\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\n {\n id:3,\n name:'Kósa Veronika',\n email:'szamlazas4@funkcio.hu',\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\n }\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\n };\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').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.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n return false;\n });\n /*\n */\n //row.remove();\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapcsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.addContact = function (contactData) {\n /*\n fel kell venni a sorba\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Kapcsolattartó hozzáadva!\",\n message: contactData.name + \" nevű kapcsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.resetUserTable = function () {\n $('.supplierUserTable tbody tr').remove();\n root.renderUsers();\n };\n this.renderUsers = function () {\n var rowNum = 1;\n var users = root.Supplier.users || [];\n $.each(users, function () {\n var userData = $.extend({}, this);\n userData.rowNum = rowNum;\n var template = $('template[data-name=\"supplierUserTableRow\"]').html();\n var render = Mustache.render(template, userData);\n $('.supplierUserTable tbody').append(render);\n rowNum++;\n });\n root.bindUserClickAction();\n };\n this.bindUserClickAction = function () {\n var node = $('.supplierUserTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.userDeleteClick);\n };\n this.userDeleteClick = function () {\n var row = $(this).closest('tr');\n var id = row.find('input[name=userId]').val() * 1;\n root.Supplier.users = root.Supplier.users.filter(function (value) {\n return value.id !== id;\n });\n row.remove();\n root.resetUserTable();\n };\n this.addUser = function (userData) {\n if (!root.Supplier.users) {\n root.Supplier.users = [];\n }\n var alreadyAdded = root.Supplier.users.some(function (u) {\n return u.id === userData.id;\n });\n if (alreadyAdded) {\n return;\n }\n root.Supplier.users.push(userData);\n userData.rowNum = root.Supplier.users.length;\n var template = $('template[data-name=\"supplierUserTableRow\"]').html();\n var render = Mustache.render(template, userData);\n $('.supplierUserTable tbody').append(render);\n root.bindUserClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: 'Felhasználó hozzáadva!',\n message: userData.name + ' hozzárendelve',\n status: TOAST_STATUS.SUCCESS,\n timeout: 3000\n });\n };\n this.initUserCreate = function () {\n var createUrl = Opts.URL.createUser || '';\n var container = $(Opts.containerCssSelector);\n function clearForm() {\n container.find('.supplierNewUserName').val('');\n container.find('.supplierNewUserEmail').val('');\n container.find('.supplierNewUserPassword').val('');\n container.find('.supplierNewUserError').hide().text('');\n }\n container.find('.buttonCreateUser').off('click').on('click', function () {\n var name = container.find('.supplierNewUserName').val().trim();\n var email = container.find('.supplierNewUserEmail').val().trim();\n var password = container.find('.supplierNewUserPassword').val();\n var errorEl = container.find('.supplierNewUserError');\n errorEl.hide().text('');\n if (!name || !email || !password) {\n errorEl.text('Minden mező kitöltése kötelező!').show();\n return;\n }\n $.ajax({\n url: createUrl,\n type: 'POST',\n data: {\n name: name,\n email: email,\n password: password\n },\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n if (data.success) {\n root.addUser(data.user);\n clearForm();\n } else {\n errorEl.text('Hiba történt a felhasználó létrehozásakor!').show();\n }\n },\n error: function error(xhr) {\n var msg = 'Hiba történt!';\n if (xhr.responseJSON && xhr.responseJSON.errors) {\n var errors = xhr.responseJSON.errors;\n var firstKey = Object.keys(errors)[0];\n msg = errors[firstKey][0];\n }\n errorEl.text(msg).show();\n }\n });\n });\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjYW5TZWUiLCJjYW5TZWVJbk9yZGVyIiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlN1cHBsaWVyQWRtaW4iLCJTdXBwbGllckl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImNyZWF0ZVVzZXIiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbE9sZCIsIkNTU1NlbGVjdG9yIiwiRm9ybURhdGEiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJmb3JtSlNPTiIsImZvckVhY2giLCJ2YWx1ZSIsImtleSIsIlJlZmxlY3QiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwiZWFjaCIsImF0dHIiLCJyZXBsYWNlIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiQ1NTU2VsZWN0b3JGb3JtIiwiYWpheERhdGEiLCJnZXRBbGwiLCJhcHBlbmQiLCJ2YWwiLCJpbmRleEtleSIsImdldCIsInNldCIsImNsaWNrU2F2ZUJ1dHRvbiIsImV2ZW50IiwiZGVidWciLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJhZGRDbGFzcyIsInJlcG9ydFZhbGlkaXR5IiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwicmVtb3ZlQ2xhc3MiLCJhamF4VXJsIiwiYWpheE1ldGhvZCIsImlkIiwiYWpheCIsInVybCIsInR5cGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsInN1Y2Nlc3MiLCJTVUNDRVNTIiwibG9hZE1haW5Db250ZW50IiwiaW5pdFZpZXdMaXN0Iiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0Iiwibm90ZSIsInByb3AiLCJjbGljayIsImhvb3JleWNhRGF0YUFjdGl2ZSIsInByb2R1Y3RHcm91cCIsInByb2R1Y3RfZ3JvdXAiLCJuYW1lIiwiY2hhbmdlIiwic2VydmljZSIsInByb2ZpdENlbnRlciIsInByb2ZpdF9jZW50ZXIiLCJlc2NhcGVTZWxlY3RvciIsInVzZXJzIiwicmVzZXRVc2VyVGFibGUiLCJpbml0Vmlld0RldGFpbHMiLCJDb250YWN0UG9wVXAiLCJpbml0IiwiYWN0aXZlIiwib25BZnRlclNhdmUiLCJjb250YWN0QWN0aW9uIiwicmVuZGVyQ29udGFjdCIsImJpbmQiLCJzZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImNsZWFyRGF0YSIsInRvb2x0aXAiLCJpbml0UmFkaW9CdXR0b25zIiwiaW5wdXRtYXNrIiwib25pbmNvbXBsZXRlIiwibGVuZ3RoIiwib25jb21wbGV0ZSIsIm9uY2xlYXJlZCIsIm9mZiIsIm9uIiwiaW5pdFVzZXJDcmVhdGUiLCJzZWxlY3QyIiwidGFncyIsImNyZWF0ZVRhZyIsInBhcmFtcyIsInRlcm0iLCJ0cmltIiwidGV4dCIsIm5ld1RhZyIsInNldEltYWdlRnJvbUxvY2FsIiwiaXMiLCJyZW5kZXJBdHRhY2htZW50IiwiaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZSIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwiZ3JvdXAiLCJmaW5kIiwiZ3JvdXBFbmQiLCJiZWZvcmVTZW5kIiwiYWRkQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImNsaWNrTmV3IiwiY2xpY2tOZXdDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJyb3dEYXRhIiwibm9kZSIsImNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQiLCJtb2RhbCIsIl90b2tlbiIsInJvdyIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiRGF0YVRhYmxlIiwiZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwicGFyZW50cyIsIm1ldGhvZCIsInJlbW92ZSIsImRyYXciLCJkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJsYW5ndWFnZSIsInJlbmRlciIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImFwaSIsImNvbmZpZyIsImFjdGlvbiIsImUiLCJkdCIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiYXV0b2ZpbGxEZXRhaWxzIiwicmFuZG9tTnVtYmVyIiwiZ2V0UmFuZG9tSW50Iiwicm93TnVtIiwiZ2V0RGF0YSIsImF0dGFjaG1lbnREYXRhIiwiZGF0ZSIsIkRhdGUiLCJjcmVhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJsaW5rIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsImJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24iLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwiZW5hYmxlVGltZXJzIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJyZXNldENvbnRhY3RUYWJsZSIsImNvbnRhY3REYXRhIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImF0dGFjaG1lbnREZWxldGVDbGljayIsImN1cnJlbnRBdHRhY2htZW50Um93IiwiY2xvc2VzdCIsImF0dGFjaGVtbnRJZCIsImZpbHRlciIsImFyciIsInJlc2V0QXR0YWNobWVudFRhYmxlIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJsb2FkRGF0YSIsImdldFN1cHBsaWVyIiwiYWRkQ29udGFjdCIsImVkaXRDb250YWN0IiwibmV3Q29udGFjdHMiLCJyZW5kZXJVc2VycyIsInVzZXJEYXRhIiwiYmluZFVzZXJDbGlja0FjdGlvbiIsInVzZXJEZWxldGVDbGljayIsImFkZFVzZXIiLCJhbHJlYWR5QWRkZWQiLCJzb21lIiwidSIsImNyZWF0ZVVybCIsImNvbnRhaW5lciIsImNsZWFyRm9ybSIsImhpZGUiLCJlbWFpbCIsInBhc3N3b3JkIiwiZXJyb3JFbCIsInVzZXIiLCJ4aHIiLCJtc2ciLCJlcnJvcnMiLCJmaXJzdEtleSIsIk9iamVjdCIsImtleXMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9zdXBwbGllci5qcz9hN2M0Il0sInNvdXJjZXNDb250ZW50IjpbImlmKHR5cGVvZiBTdXBwbGllcj09PSd1bmRlZmluZWQnKXtcbiAgICBjbGFzcyBTdXBwbGllciBleHRlbmRzIERhdGFNb2RlbHtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuY29udGFjdCA9PT1cInVuZGVmaW5lZFwiKXtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jYW5TZWUgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5TZWU9MTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNhblNlZUluT3JkZXIgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5TZWVJbk9yZGVyPTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3VwcGxpZXIgY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB3aW5kb3cuU3VwcGxpZXI9U3VwcGxpZXI7XG59XG5cblxud2luZG93LlN1cHBsaWVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XG4gICAgLypcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxuICAgICAqIGluIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIGxldCBPcHRzID0ge1xuICAgICAgICB0b2tlbjpudWxsLFxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJTdXBwbGllcicsXG4gICAgICAgIHRlc3RNb2RlOmZhbHNlLFxuICAgICAgICBVUkw6e1xuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcbiAgICAgICAgICAgIGluZGV4OicnLFxuICAgICAgICAgICAgc2hvdzonJyxcbiAgICAgICAgICAgIGVkaXQ6JycsXG4gICAgICAgICAgICBjcmVhdGU6JycsXG4gICAgICAgICAgICBzdG9yZTonJyxcbiAgICAgICAgICAgIHVwZGF0ZTonJyxcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXG4gICAgICAgICAgICBhdHRhY2hGaWxlOicnLFxuICAgICAgICAgICAgZGV0YWNoRmlsZTonJyxcbiAgICAgICAgICAgIGNyZWF0ZVVzZXI6JycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZTp7XG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTpbMSwgJ2FzYyddXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6ZnVuY3Rpb24gKCl7fVxuICAgIH07XG4gICAgbGV0IFN1cHBsaWVyID0ge307XG4gICAgbGV0IHJvb3QgPSB0aGlzO1xuICAgIGxldCBjb250YWN0UG9wdXBXb3JrZmxvdz0nbmV3JztcbiAgICAvKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgICAgICBpZighU3VwcGxpZXJJdGVtKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdXBwbGllciBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XG4gICAgICAgICAgICBpZighQVBQLlN1cHBsaWVyKXtcbiAgICAgICAgICAgICAgICBBUFAuU3VwcGxpZXI9bmV3IHdpbmRvdy5TdXBwbGllcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1BUFAuU3VwcGxpZXI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcbiAgICAgICAgcmV0dXJuIE9wdHM7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQ9IGZ1bmN0aW9uIChDU1NTZWxlY3Rvcikge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENTU1NlbGVjdG9yKSk7XG4gICAgICAgIC8vbGV0IGZvcm1KU09OID0gT2JqZWN0LmZyb21FbnRyaWVzKGRhdGEuZW50cmllcygpKTtcbiAgICAgICAgdmFyIGZvcm1KU09OID0ge307XG4gICAgICAgIGRhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgLy8gUmVmbGVjdC5oYXMgaW4gZmF2b3Igb2Y6IGZvcm1KU09OLmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICAgIGlmKCFSZWZsZWN0Lmhhcyhmb3JtSlNPTiwga2V5KSl7XG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZvcm1KU09OW2tleV0pKXtcbiAgICAgICAgICAgICAgICBmb3JtSlNPTltrZXldID0gW2Zvcm1KU09OW2tleV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9ybUpTT05ba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChDU1NTZWxlY3RvcisnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBpZihmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV0pe1xuICAgICAgICAgICAgICAgIGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXT1mb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV0ucmVwbGFjZSgvW18gXSskL2csXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvL2Zvcm1KU09OLnByb2R1Y3RHcm91cHM9JChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpLnZhbCgpO1xuXG5cbiAgICAgICAgLypNdWx0aXNlbGVjdCBvciBjaGVja2JveCB0byBhcnJheTpcbiAgICAgICAgYWpheERhdGFbJ3Byb2R1Y3RHcm91cCddPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcblxuICAgICAgICBmb3JtSlNPTi5tdWx0aXNlbGVjdE5hbWUgPSBkYXRhLmdldEFsbCgnbXVsdGlzZWxlY3ROYW1lJyk7XG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XG4gICAgICAgICAgICBmb3JtSlNPTlskLmxjRmlyc3QoaXRlbS5yZXBsYWNlKCdjb250YWN0JywgJycpKV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGRlbGV0ZSBmb3JtSlNPTltpdGVtXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmKGZvcm1KU09OLnBob25lKXtcbiAgICAgICAgICAgIGZvcm1KU09OLnBob25lPWZvcm1KU09OLnBob25lLnJlcGxhY2VBbGwoJ18nLCcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZihmb3JtSlNPTi5lbWFpbCl7XG4gICAgICAgICAgICBmb3JtSlNPTi5lbWFpbD1mb3JtSlNPTi5lbWFpbC5yZXBsYWNlQWxsKCdfJywnJyk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGZvcm1KU09OO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2ZpdENlbnRlcicpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2ZpdENlbnRlcltdJyx2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3N1cHBsaWVyU2VydmljZScpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyU2VydmljZVtdJyx2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2NvbnRhY3RJZCcpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XG4gICAgICAgICAgICBpZihhamF4RGF0YS5nZXQoaW5kZXhLZXkpKXtcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksYWpheERhdGEuZ2V0KGluZGV4S2V5KS5yZXBsYWNlKC9bXyBdKyQvZyxcIlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrU2F2ZUJ1dHRvbj1mdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiY2FuU2VlSW5PcmRlclwiXScpLnZhbCgpPT0xICYmICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkuYWRkQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5yZW1vdmVDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWpheERhdGE9cm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoQ1NTU2VsZWN0b3JGb3JtKTtcblxuXG5cbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xuICAgICAgICBpZihyb290LlN1cHBsaWVyLmlkKXtcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogJCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgICAgICAgICBkZWJ1ZygnZDE6IFNhdmUgc3VjY2VzcyAnKTtcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICBPcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZT1bMCwgJ2Rlc2MnXTtcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiU2lrZXJlcyByw7ZnesOtdMOpcyFcIiwgbWVzc2FnZTogYWpheERhdGEuZ2V0KCduYW1lJykrXCIgbmV2xbEgYmVzesOhbGxsw610w7MgZWxtZW50dmVcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xuICAgICAgICBjb25zb2xlLmxvZyhTdXBwbGllcik7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcbiAgICAgICAgICAgICduYW1lJywnaG9vcmV5Y2FJZCcsJ25hbWVJZCcsXG4gICAgICAgICAgICAnb3JkZXJFbWFpbCcsJ29yZGVyRW1haWwyJywnYWRkcmVzcycsJ21haWxpbmdBZGRyZXNzJywncGhvbmUnLCdmYXgnLCdjdXN0b21lclNlcnZpY2VQaG9uZScsXG4gICAgICAgICAgICAnbmFtZTIyJyxcbiAgICAgICAgICAgICdvcGVuSG91cnMnLCAnb3JkZXJzRGVhZGxpbmUnLCAnbWluT3JkZXJWYWx1ZScsXG4gICAgICAgIF07XG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbdGhpc10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykudmFsKHJvb3QuU3VwcGxpZXJbdGhpc10pO1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbChyb290LlN1cHBsaWVyLm5vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1lbWFpbEF0dGFjaG1lbnRUeXBlXVt2YWx1ZT0nK3Jvb3QuU3VwcGxpZXJbJ2VtYWlsQXR0YWNobWVudFR5cGUnXSsnXScpLnByb3AoJ2NoZWNrZWQnLHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVJbk9yZGVyXVtkYXRhLXRpdGxlPScrcm9vdC5TdXBwbGllci5jYW5TZWVJbk9yZGVyKyddJykuY2xpY2soKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuaG9vcmV5Y2FEYXRhQWN0aXZlKyddJykuY2xpY2soKTtcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZHVjdF9ncm91cCxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAucHVzaCh0aGlzLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZHVjdENhdGVnb3J5U2VsZWN0JykudmFsKHByb2R1Y3RHcm91cCkuY2hhbmdlKCk7XG5cbiAgICAgICAgbGV0IHNlcnZpY2U9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnNlcnZpY2UsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VydmljZS5wdXNoKHRoaXMubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5zZXJ2aWNlU2VsZWN0JykudmFsKHNlcnZpY2UpLmNoYW5nZSgpO1xuXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnByb2ZpdF9jZW50ZXIsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJvZml0Q2VudGVyLnB1c2godGhpcy5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XG4gICAgICAgIC8vZGVidWcocHJvZml0Q2VudGVyKTtcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCdpbnB1dFt2YWx1ZT1cIicrJC5lc2NhcGVTZWxlY3Rvcih0aGlzKSsnXCJdJykucHJvcCggXCJjaGVja2VkXCIsIHRydWUgKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSE9J3VuZGVmaW5lZCcgJiYgKHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXIudXNlcnMgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIHJvb3QucmVzZXRVc2VyVGFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZGVidWcoQVBQLlN1cHBsaWVyQWRtaW4uZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuc3VwcGxpZXJGb3JtJylbJ3Byb2R1Y3RHcm91cCddKTtcbiAgICAgICAgLy8kKCdbbmFtZT1wcm9kdWN0R3JvdXBdJykudmFsKFsnQsO8ZsOpw6FydV/DqWRlc2lwYXJpX3Rlcm3DqWtlaycsJ1RvasOhcyddKS5jaGFuZ2UoKTtcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICAgICAgaWYoIUFQUC5Db250YWN0UG9wVXApe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxuICAgICAgICB9XG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAuaW5pdCh7XG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBBUFAuU3VwcGxpZXJBZG1pbi5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnbmV3Jyk7XG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmNsZWFyRGF0YSgpO1xuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XG4gICAgICAgICQoXCI6aW5wdXRcIikuaW5wdXRtYXNrKHtcbiAgICAgICAgICAgIFwib25pbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA+IDAgfHwgJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJvbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyZWQnKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub24oJ2NsaWNrJyxyb290LmNsaWNrU2F2ZUJ1dHRvbik7XG4gICAgICAgIHJvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XG4gICAgICAgIHJvb3QuaW5pdFVzZXJDcmVhdGUoKTtcbiAgICAgICAgJChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpO1xuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XG4gICAgICAgICAgICB0YWdzOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlVGFnOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlcm0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8kKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKCk7XG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNldEltYWdlRnJvbUxvY2FsKHRoaXMsT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5pbWFnZUxvZ28nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIC8vbGV0IGNoZWNrZWQ9JCh0aGlzKS5pcyhcIjpjaGVja2VkXCIpXG4gICAgICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBpbnB1dC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LnJlbmRlckF0dGFjaG1lbnQoKTtcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMoKTtcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XG4gICAgICAgIGRlYnVnKCcqKmVuZCBpbml0Vmlld0RldGFpbHMgJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGU9ZnVuY3Rpb24gKGZpbGVJbnB1dCl7XG4gICAgICAgIC8qXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XG4gICAgICAgICovXG4gICAgICAgIGlmKGZpbGVJbnB1dCl7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XG4gICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWRTdGFydGVkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoJycpO1xuICAgICAgICAgICAgJCgnLmN1c3RvbS1maWxlLWxhYmVsLnNlbGVjdGVkJykudGV4dCgnJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93JykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLWluaXRGaWxlQXR0YWNobWVudEZlYXR1cmUtLS0tLS0tLS0tLScpO1xuICAgICAgICBpZihyb290LlN1cHBsaWVyLmlkKXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWROb25lJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICB9XG5cblxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJy0tLS0tLS1idXR0b25VcGxvYWQtLS0tLS0tLS0tLScpO1xuICAgICAgICAgICAgbGV0IGZpbGVJbnB1dD0kKCcjaW5wdXRHcm91cEF0dGFjaGVGaWxlJyk7XG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xuICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkhpYmEhXCIsIG1lc3NhZ2U6ICdWw6FsbGFzem9uIGtpIGbDoWpsdCEnLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XG5cbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XG4gICAgICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5hdHRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xuXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcbiAgICAgICAgICAgICAgICB0eXBlOidQT1NUJyxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmFkZEF0dGFjaG1lbnQoZGF0YS5kYXRhLmF0dGFjaG1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xuICAgICAgICAgICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrTmV3PWZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVidWcoJ2NhbGxiYWNrTmV3Jyk7XG4gICAgICAgIHJvb3QuU3VwcGxpZXI9bmV3IHdpbmRvdy5TdXBwbGllcigpO1xuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xuICAgIH1cbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IEVuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZD1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnY2xpY2tTdXBwbGllckRlbGV0ZUNvbmZpcm1lZCcpO1xuICAgICAgICBkZWJ1ZyhldmVudCk7XG4gICAgICAgIGRlYnVnKGV2ZW50LmRhdGEpO1xuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xuICAgICAgICBsZXQgYWpheERhdGE9e307XG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLGV2ZW50LmRhdGEuaWQpO1xuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xuICAgICAgICBjb25zb2xlLmxvZyhhamF4RGF0YSk7XG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxuICAgICAgICAgICAgbWV0aG9kOlwiREVMRVRFXCIsXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICByb3cucmVtb3ZlKCkuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGxldCBkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPWZhbHNlO1xuXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25EZWxldGU9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5vbignc2hvdy5icy5tb2RhbCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgaW5pdGlhdGUgYW4gQUpBWCByZXF1ZXN0IGhlcmUgKGFuZCB0aGVuIGRvIHRoZSB1cGRhdGluZyBpbiBhIGNhbGxiYWNrKS5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxuICAgICAgICAgICAgdmFyIG1vZGFsID0gJCh0aGlzKTtcbiAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC10aXRsZScpLnRleHQoJ01lZ2VyxZFzw610w6lzICcpO1xuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcbiAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub24oJ2NsaWNrJyx7aWQ6cm93RGF0YS5pZH0scm9vdC5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgaW5pY2lhbGl6YXRpb24nKTtcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xuXG4gICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcbiAgICAgICAgQVBQLnNldE9wdHMoe1xuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxuICAgICAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxuXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBvcmRlckRpcmVjdGl2ZT1PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XG4gICAgICAgIH1cbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XG4gICAgICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24oMCxhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBidXR0b25zOntcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cblxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLXN1Y2Nlc3MgbmV3SXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzonbmV3SXRlbSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQobm9kZSkucmVtb3ZlQ2xhc3MoJ3VpLWJ1dHRvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgZW5kJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvZmlsbERldGFpbHM9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdueWVyZXNyZSBhbGx1bmsnKTtcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XG4gICAgICAgICQoJ2lucHV0W25hbWU9bmFtZV0nKS52YWwoJ0Jlc3phbMOtdMOzJytyYW5kb21OdW1iZXIpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPWhvb3JleWNhSWRdJykudmFsKCdoYicrcmFuZG9tTnVtYmVyKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1vcmRlckVtYWlsXScpLnZhbCgna2FwY3NvbGF0JytyYW5kb21OdW1iZXIrJ0BiZXN6YWxsaXRvLmh1Jyk7XG4gICAgICAgICQoJ2lucHV0W25hbWU9b3JkZXJFbWFpbDJdJykudmFsKCdpbmZvcm1hY2lvJytyYW5kb21OdW1iZXIrJ0BiZXN6YWxsaXRvLmh1Jyk7XG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XG4gICAgICAgICQoJ2lucHV0W25hbWU9bWFpbGluZ0FkZHJlc3NdJykudmFsKCc4OTg5IFBvc3RhaSDDunQnK3JhbmRvbU51bWJlcik7XG4gICAgICAgICQoJ2lucHV0W25hbWU9cGhvbmVdJykudmFsKCcrMzYzMDEyMzQ1NjcnKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPWN1c3RvbWVyU2VydmljZVBob25lXScpLnZhbCgnKzM2NzYxMjM0NDQ0Jyk7XG4gICAgICAgICQoJ3RleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoJ01lZ2plZ3l6ZW0gJytyYW5kb21OdW1iZXIpO1xuXG4gICAgfVxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xuICAgICAgICByb290LlN1cHBsaWVyID0gbmV3IHdpbmRvdy5TdXBwbGllcih7XG4gICAgICAgICAgICAnY29udGFjdCc6W1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6MixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6MyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOjMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDonc3phbWxhemFzNEBmdW5rY2lvLmh1JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lOid7e2Zvcm1hdHRlclBob25lTnVtYmVyKFwiKzM2MjA0NTg5MTgwXCIpfX0nXG4gICAgICAgICAgICB9XG4qL1xuXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgICBPcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICB9XG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSl7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZihTdXBwbGllckl0ZW0pe1xuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cbiAgICAgICAgfVxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyQXR0YWNobWVudD1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IHJvd051bT0xO1xuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQXR0YWNobWVudCcpO1xuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdhdHRhY2htZW50JyksZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb3dOdW07XG4gICAgICAgICAgICBkYXRlPW5ldyBEYXRlKGF0dGFjaG1lbnREYXRhLmNyZWF0ZWRfYXQpO1xuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5saW5rPWF0dGFjaG1lbnREYXRhLlB1YmxpY1VybCsnLycrYXR0YWNobWVudERhdGEuZmlsZW5hbWU7XG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJBdHRhY2htZW50VGFibGVSb3dcIl0nKS5odG1sKClcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgICAgICQoJy5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcbiAgICAgICAgICAgIHJvd051bSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRBdHRhY2htZW50PWZ1bmN0aW9uIChhdHRhY2htZW50RGF0YSl7XG4gICAgICAgIGNvbnNvbGUubG9nKGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XG4gICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5wdXNoKGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5sZW5ndGg7XG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiRsOhamwgaG96esOhYWR2YSFcIiwgbWVzc2FnZTogYXR0YWNobWVudERhdGEub3JpZ2luYWxfZmlsZW5hbWUrXCIgZsOhamwgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgIH1cblxuXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xuICAgICAgICByb290LnJlbmRlckNvbnRhY3QoKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgcm93TnVtPTE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBsZXQgY29udGFjdERhdGE9dGhpcztcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAgICAgcm93TnVtKys7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25EZWxldGUnKTtcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcblxuICAgICAgICBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKTtcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdEVkaXRDbGljayk7XG5cbiAgICB9XG5cbiAgICB0aGlzLmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5hdHRhY2htZW50RGVsZXRlQ2xpY2spO1xuICAgIH1cbiAgICBsZXQgY3VycmVudEF0dGFjaG1lbnRSb3c9ZmFsc2U7XG4gICAgdGhpcy5hdHRhY2htZW50RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1hdHRhY2htZW50SWRdJykudmFsKCk7XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRldGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xuICAgICAgICAvL2RhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcbiAgICAgICAgbGV0IGRhdGE9e307XG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcbiAgICAgICAgZGF0YS5hdHRhY2hlbW50SWQ9aWQ7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6ZGF0YSxcbiAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIC8vcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50PXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1kYXRhLmRhdGEuICAgYXR0YWNobWVudC5pZCoxKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICByb290LnJlc2V0QXR0YWNobWVudFRhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIH1cblxuXG4gICAgdGhpcy5yZXNldEF0dGFjaG1lbnRUYWJsZT1mdW5jdGlvbiAoKXtcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xuICAgICAgICByb290LnJlbmRlckF0dGFjaG1lbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhY3REZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PXJvb3QuU3VwcGxpZXIuY29udGFjdC5maWx0ZXIoXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJvdy5yZW1vdmUoKTtcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xuICAgIH1cbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY29udGFjdFBvcHVwV29ya2Zsb3c7XG4gICAgfVxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIGNvbnRhY3RQb3B1cFdvcmtmbG93PXN0YXR1cztcbiAgICB9XG5cblxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmxvYWREYXRhKGlkKTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFN1cHBsaWVyPWZ1bmN0aW9uICgpe1xuICAgICAgICByZXR1cm4gcm9vdC5TdXBwbGllcjtcbiAgICB9XG4gICAgdGhpcy5jb250YWN0QWN0aW9uPWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xuICAgICAgICAgICAgcm9vdC5hZGRDb250YWN0KGNvbnRhY3REYXRhKTtcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmVkaXRDb250YWN0PWZ1bmN0aW9uIChpZCxjb250YWN0RGF0YSl7XG5cbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKGluZGV4KXtcbiAgICAgICAgICAgIGlmKHRoaXMuaWQ9PWlkKXtcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2godGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9bmV3Q29udGFjdHM7XG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiS2FwY3NvbGF0IGFkYXRhaSBtw7Nkb3PDrXR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBjc29sYXR0YXJ0w7MgbcOzZG9zw610dmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbiAgICB9XG4gICAgdGhpcy5hZGRDb250YWN0PWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XG4gICAgICAgIC8qXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcbiAgICAgICAgICovXG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdC5wdXNoKGNvbnRhY3REYXRhKTtcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuY29udGFjdC5sZW5ndGg7XG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XG4gICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkthcGNzb2xhdHRhcnTDsyBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgfVxuXG5cbiAgICB0aGlzLnJlc2V0VXNlclRhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuc3VwcGxpZXJVc2VyVGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcbiAgICAgICAgcm9vdC5yZW5kZXJVc2VycygpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlclVzZXJzPWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgcm93TnVtPTE7XG4gICAgICAgIGxldCB1c2Vycz1yb290LlN1cHBsaWVyLnVzZXJzfHxbXTtcbiAgICAgICAgJC5lYWNoKHVzZXJzLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgbGV0IHVzZXJEYXRhPSQuZXh0ZW5kKHt9LHRoaXMpO1xuICAgICAgICAgICAgdXNlckRhdGEucm93TnVtPXJvd051bTtcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllclVzZXJUYWJsZVJvd1wiXScpLmh0bWwoKTtcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLHVzZXJEYXRhKTtcbiAgICAgICAgICAgICQoJy5zdXBwbGllclVzZXJUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAgICAgcm93TnVtKys7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LmJpbmRVc2VyQ2xpY2tBY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy5iaW5kVXNlckNsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgbm9kZT0kKCcuc3VwcGxpZXJVc2VyVGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC51c2VyRGVsZXRlQ2xpY2spO1xuICAgIH1cbiAgICB0aGlzLnVzZXJEZWxldGVDbGljaz1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT11c2VySWRdJykudmFsKCkqMTtcbiAgICAgICAgcm9vdC5TdXBwbGllci51c2Vycz1yb290LlN1cHBsaWVyLnVzZXJzLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpe1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlkIT09aWQ7XG4gICAgICAgIH0pO1xuICAgICAgICByb3cucmVtb3ZlKCk7XG4gICAgICAgIHJvb3QucmVzZXRVc2VyVGFibGUoKTtcbiAgICB9XG4gICAgdGhpcy5hZGRVc2VyPWZ1bmN0aW9uICh1c2VyRGF0YSl7XG4gICAgICAgIGlmKCFyb290LlN1cHBsaWVyLnVzZXJzKXsgcm9vdC5TdXBwbGllci51c2Vycz1bXTsgfVxuICAgICAgICBsZXQgYWxyZWFkeUFkZGVkPXJvb3QuU3VwcGxpZXIudXNlcnMuc29tZShmdW5jdGlvbih1KXsgcmV0dXJuIHUuaWQ9PT11c2VyRGF0YS5pZDsgfSk7XG4gICAgICAgIGlmKGFscmVhZHlBZGRlZCl7IHJldHVybjsgfVxuICAgICAgICByb290LlN1cHBsaWVyLnVzZXJzLnB1c2godXNlckRhdGEpO1xuICAgICAgICB1c2VyRGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci51c2Vycy5sZW5ndGg7XG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllclVzZXJUYWJsZVJvd1wiXScpLmh0bWwoKTtcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsdXNlckRhdGEpO1xuICAgICAgICAkKCcuc3VwcGxpZXJVc2VyVGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcbiAgICAgICAgcm9vdC5iaW5kVXNlckNsaWNrQWN0aW9uKCk7XG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiAnRmVsaGFzem7DoWzDsyBob3p6w6FhZHZhIScsIG1lc3NhZ2U6IHVzZXJEYXRhLm5hbWUrJyBob3p6w6FyZW5kZWx2ZScsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDMwMDAgfSk7XG4gICAgfVxuICAgIHRoaXMuaW5pdFVzZXJDcmVhdGU9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBjcmVhdGVVcmw9T3B0cy5VUkwuY3JlYXRlVXNlcnx8Jyc7XG4gICAgICAgIGxldCBjb250YWluZXI9JChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKTtcbiAgICAgICAgZnVuY3Rpb24gY2xlYXJGb3JtKCl7XG4gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLnN1cHBsaWVyTmV3VXNlck5hbWUnKS52YWwoJycpO1xuICAgICAgICAgICAgY29udGFpbmVyLmZpbmQoJy5zdXBwbGllck5ld1VzZXJFbWFpbCcpLnZhbCgnJyk7XG4gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLnN1cHBsaWVyTmV3VXNlclBhc3N3b3JkJykudmFsKCcnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyRXJyb3InKS5oaWRlKCkudGV4dCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyLmZpbmQoJy5idXR0b25DcmVhdGVVc2VyJykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGxldCBuYW1lPWNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyTmFtZScpLnZhbCgpLnRyaW0oKTtcbiAgICAgICAgICAgIGxldCBlbWFpbD1jb250YWluZXIuZmluZCgnLnN1cHBsaWVyTmV3VXNlckVtYWlsJykudmFsKCkudHJpbSgpO1xuICAgICAgICAgICAgbGV0IHBhc3N3b3JkPWNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyUGFzc3dvcmQnKS52YWwoKTtcbiAgICAgICAgICAgIGxldCBlcnJvckVsPWNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyRXJyb3InKTtcbiAgICAgICAgICAgIGVycm9yRWwuaGlkZSgpLnRleHQoJycpO1xuICAgICAgICAgICAgaWYoIW5hbWV8fCFlbWFpbHx8IXBhc3N3b3JkKXtcbiAgICAgICAgICAgICAgICBlcnJvckVsLnRleHQoJ01pbmRlbiBtZXrFkSBraXTDtmx0w6lzZSBrw7Z0ZWxlesWRIScpLnNob3coKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDpjcmVhdGVVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXG4gICAgICAgICAgICAgICAgZGF0YTp7bmFtZTpuYW1lLCBlbWFpbDplbWFpbCwgcGFzc3dvcmQ6cGFzc3dvcmR9LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6eydYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKCl9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmFkZFVzZXIoZGF0YS51c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRWwudGV4dCgnSGliYSB0w7ZydMOpbnQgYSBmZWxoYXN6bsOhbMOzIGzDqXRyZWhvesOhc2Frb3IhJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjpmdW5jdGlvbih4aHIpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgbXNnPSdIaWJhIHTDtnJ0w6ludCEnO1xuICAgICAgICAgICAgICAgICAgICBpZih4aHIucmVzcG9uc2VKU09OJiZ4aHIucmVzcG9uc2VKU09OLmVycm9ycyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JzPXhoci5yZXNwb25zZUpTT04uZXJyb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0S2V5PU9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyb3JzW2ZpcnN0S2V5XVswXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlcnJvckVsLnRleHQobXNnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zLFN1cHBsaWVySXRlbSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxRQUFRLEtBQUcsV0FBVyxFQUFDO0VBQUEsSUFDdkJBLFNB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\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); /***/ } /******/ }); /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ __webpack_modules__["./resources/js/admin/dashboard.js"](); /******/ __webpack_modules__["./resources/js/admin/priceList.js"](); /******/ __webpack_modules__["./resources/js/admin/priceListProfitCenter.js"](); /******/ __webpack_modules__["./resources/js/admin/product.js"](); /******/ __webpack_modules__["./resources/js/admin/profitCenter.js"](); /******/ var __webpack_exports__ = {}; /******/ __webpack_modules__["./resources/js/admin/supplier.js"](); /******/ /******/ })() ;