PATH: /home/hwyuvbry/dear.waroenkhoki123.web.id/topadmin/assets/vendor/js
FILE_BARU
CREATE
FOLDER_BARU
MKDIR
UPLOAD_FILE
GO
[ .. KEMBALI ]
📄 bootstrap.js
↓
X
📄 dropdown-hover.js
↓
X
📄 helpers.js
↓
X
📄 mega-dropdown.js
↓
X
📄 menu.js
↓
X
📄 template-customizer.js
↓
X
SAVING...
BERHASIL DIUBAH!
EDITING: helpers.js
/* * 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/). */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else { var a = factory(); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(self, function() { return /******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./js/helpers.js": /*!***********************!*\ !*** ./js/helpers.js ***! \***********************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Helpers\": function() { return /* binding */ Helpers; }\n/* harmony export */ });\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n// Constants\nvar TRANS_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'];\nvar TRANS_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'];\nvar INLINE_STYLES = \"\\n.layout-menu-fixed .layout-navbar-full .layout-menu,\\n.layout-menu-fixed-offcanvas .layout-navbar-full .layout-menu {\\n top: {navbarHeight}px !important;\\n}\\n.layout-page {\\n padding-top: {navbarHeight}px !important;\\n}\\n.content-wrapper {\\n padding-bottom: {footerHeight}px !important;\\n}\";\n\n// Guard\nfunction requiredParam(name) {\n throw new Error(\"Parameter required\".concat(name ? \": `\".concat(name, \"`\") : ''));\n}\nvar Helpers = {\n // Root Element\n ROOT_EL: typeof window !== 'undefined' ? document.documentElement : null,\n // Large screens breakpoint\n LAYOUT_BREAKPOINT: 1200,\n // Resize delay in milliseconds\n RESIZE_DELAY: 200,\n menuPsScroll: null,\n mainMenu: null,\n // Internal variables\n _curStyle: null,\n _styleEl: null,\n _resizeTimeout: null,\n _resizeCallback: null,\n _transitionCallback: null,\n _transitionCallbackTimeout: null,\n _listeners: [],\n _initialized: false,\n _autoUpdate: false,\n _lastWindowHeight: 0,\n // *******************************************************************************\n // * Utilities\n // ---\n // Scroll To Active Menu Item\n _scrollToActive: function _scrollToActive() {\n var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return;\n var activeEl = layoutMenu.querySelector('li.menu-item.active:not(.open)');\n if (activeEl) {\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n var easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t -= 1;\n return -c / 2 * (t * (t - 2) - 1) + b;\n };\n var element = this.getLayoutMenu().querySelector('.menu-inner');\n if (typeof activeEl === 'string') {\n activeEl = document.querySelector(activeEl);\n }\n if (typeof activeEl !== 'number') {\n activeEl = activeEl.getBoundingClientRect().top + element.scrollTop;\n }\n\n // If active element's top position is less than 2/3 (66%) of menu height than do not scroll\n if (activeEl < parseInt(element.clientHeight * 2 / 3, 10)) return;\n var start = element.scrollTop;\n var change = activeEl - start - parseInt(element.clientHeight / 2, 10);\n var startDate = +new Date();\n if (animate === true) {\n var animateScroll = function animateScroll() {\n var currentDate = +new Date();\n var currentTime = currentDate - startDate;\n var val = easeInOutQuad(currentTime, start, change, duration);\n element.scrollTop = val;\n if (currentTime < duration) {\n requestAnimationFrame(animateScroll);\n } else {\n element.scrollTop = change;\n }\n };\n animateScroll();\n } else {\n element.scrollTop = change;\n }\n }\n },\n // ---\n // Swipe In Gesture\n _swipeIn: function _swipeIn(targetEl, callback) {\n var _window = window,\n Hammer = _window.Hammer;\n if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') {\n // Swipe menu gesture\n var swipeInElement = document.querySelector(targetEl);\n if (swipeInElement) {\n var hammerInstance = new Hammer(swipeInElement);\n hammerInstance.on('panright', callback);\n }\n }\n },\n // ---\n // Swipe Out Gesture\n _swipeOut: function _swipeOut(targetEl, callback) {\n var _window2 = window,\n Hammer = _window2.Hammer;\n if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') {\n setTimeout(function () {\n // Swipe menu gesture\n var swipeOutElement = document.querySelector(targetEl);\n if (swipeOutElement) {\n var hammerInstance = new Hammer(swipeOutElement);\n hammerInstance.get('pan').set({\n direction: Hammer.DIRECTION_ALL,\n threshold: 250\n });\n hammerInstance.on('panleft', callback);\n }\n }, 500);\n }\n },\n // ---\n // Swipe Out On Overlay Tap\n _overlayTap: function _overlayTap(targetEl, callback) {\n var _window3 = window,\n Hammer = _window3.Hammer;\n if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') {\n // Swipe out overlay element\n var swipeOutOverlayElement = document.querySelector(targetEl);\n if (swipeOutOverlayElement) {\n var hammerInstance = new Hammer(swipeOutOverlayElement);\n hammerInstance.on('tap', callback);\n }\n }\n },\n // ---\n // Add classes\n _addClass: function _addClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\n if (el.length !== undefined) {\n // Add classes to multiple elements\n el.forEach(function (e) {\n cls.split(' ').forEach(function (c) {\n return e.classList.add(c);\n });\n });\n } else {\n // Add classes to single element\n cls.split(' ').forEach(function (c) {\n return el.classList.add(c);\n });\n }\n },\n // ---\n // Remove classes\n _removeClass: function _removeClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\n if (el.length !== undefined) {\n // Remove classes to multiple elements\n el.forEach(function (e) {\n cls.split(' ').forEach(function (c) {\n return e.classList.remove(c);\n });\n });\n } else {\n // Remove classes to single element\n cls.split(' ').forEach(function (c) {\n return el.classList.remove(c);\n });\n }\n },\n // Toggle classes\n _toggleClass: function _toggleClass() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.ROOT_EL;\n var cls1 = arguments.length > 1 ? arguments[1] : undefined;\n var cls2 = arguments.length > 2 ? arguments[2] : undefined;\n if (el.classList.contains(cls1)) {\n el.classList.replace(cls1, cls2);\n } else {\n el.classList.replace(cls2, cls1);\n }\n },\n // ---\n // Has class\n _hasClass: function _hasClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\n var result = false;\n cls.split(' ').forEach(function (c) {\n if (el.classList.contains(c)) result = true;\n });\n return result;\n },\n _findParent: function _findParent(el, cls) {\n if (el && el.tagName.toUpperCase() === 'BODY' || el.tagName.toUpperCase() === 'HTML') return null;\n el = el.parentNode;\n while (el && el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\n el = el.parentNode;\n }\n el = el && el.tagName.toUpperCase() !== 'BODY' ? el : null;\n return el;\n },\n // ---\n // Trigger window event\n _triggerWindowEvent: function _triggerWindowEvent(name) {\n if (typeof window === 'undefined') return;\n if (document.createEvent) {\n var event;\n if (typeof Event === 'function') {\n event = new Event(name);\n } else {\n event = document.createEvent('Event');\n event.initEvent(name, false, true);\n }\n window.dispatchEvent(event);\n } else {\n window.fireEvent(\"on\".concat(name), document.createEventObject());\n }\n },\n // ---\n // Trigger event\n _triggerEvent: function _triggerEvent(name) {\n this._triggerWindowEvent(\"layout\".concat(name));\n this._listeners.filter(function (listener) {\n return listener.event === name;\n }).forEach(function (listener) {\n return listener.callback.call(null);\n });\n },\n // ---\n // Update style\n _updateInlineStyle: function _updateInlineStyle() {\n var navbarHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var footerHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!this._styleEl) {\n this._styleEl = document.createElement('style');\n this._styleEl.type = 'text/css';\n document.head.appendChild(this._styleEl);\n }\n var newStyle = INLINE_STYLES.replace(/\\{navbarHeight\\}/gi, navbarHeight).replace(/\\{footerHeight\\}/gi, footerHeight);\n if (this._curStyle !== newStyle) {\n this._curStyle = newStyle;\n this._styleEl.textContent = newStyle;\n }\n },\n // ---\n // Remove style\n _removeInlineStyle: function _removeInlineStyle() {\n if (this._styleEl) document.head.removeChild(this._styleEl);\n this._styleEl = null;\n this._curStyle = null;\n },\n // ---\n // Redraw layout menu (Safari bugfix)\n _redrawLayoutMenu: function _redrawLayoutMenu() {\n var layoutMenu = this.getLayoutMenu();\n if (layoutMenu && layoutMenu.querySelector('.menu')) {\n var inner = layoutMenu.querySelector('.menu-inner');\n var scrollTop = inner.scrollTop;\n var pageScrollTop = document.documentElement.scrollTop;\n layoutMenu.style.display = 'none';\n // layoutMenu.offsetHeight\n layoutMenu.style.display = '';\n inner.scrollTop = scrollTop;\n document.documentElement.scrollTop = pageScrollTop;\n return true;\n }\n return false;\n },\n // ---\n // Check for transition support\n _supportsTransitionEnd: function _supportsTransitionEnd() {\n if (window.QUnit) return false;\n var el = document.body || document.documentElement;\n if (!el) return false;\n var result = false;\n TRANS_PROPERTIES.forEach(function (evnt) {\n if (typeof el.style[evnt] !== 'undefined') result = true;\n });\n return result;\n },\n // ---\n // Calculate current navbar height\n _getNavbarHeight: function _getNavbarHeight() {\n var _this2 = this;\n var layoutNavbar = this.getLayoutNavbar();\n if (!layoutNavbar) return 0;\n if (!this.isSmallScreen()) return layoutNavbar.getBoundingClientRect().height;\n\n // Needs some logic to get navbar height on small screens\n\n var clonedEl = layoutNavbar.cloneNode(true);\n clonedEl.id = null;\n clonedEl.style.visibility = 'hidden';\n clonedEl.style.position = 'absolute';\n Array.prototype.slice.call(clonedEl.querySelectorAll('.collapse.show')).forEach(function (el) {\n return _this2._removeClass('show', el);\n });\n layoutNavbar.parentNode.insertBefore(clonedEl, layoutNavbar);\n var navbarHeight = clonedEl.getBoundingClientRect().height;\n clonedEl.parentNode.removeChild(clonedEl);\n return navbarHeight;\n },\n // ---\n // Get current footer height\n _getFooterHeight: function _getFooterHeight() {\n var layoutFooter = this.getLayoutFooter();\n if (!layoutFooter) return 0;\n return layoutFooter.getBoundingClientRect().height;\n },\n // ---\n // Get animation duration of element\n _getAnimationDuration: function _getAnimationDuration(el) {\n var duration = window.getComputedStyle(el).transitionDuration;\n return parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000);\n },\n // ---\n // Set menu hover state\n _setMenuHoverState: function _setMenuHoverState(hovered) {\n this[hovered ? '_addClass' : '_removeClass']('layout-menu-hover');\n },\n // ---\n // Toggle collapsed\n _setCollapsed: function _setCollapsed(collapsed) {\n var _this3 = this;\n if (this.isSmallScreen()) {\n if (collapsed) {\n this._removeClass('layout-menu-expanded');\n } else {\n setTimeout(function () {\n _this3._addClass('layout-menu-expanded');\n }, this._redrawLayoutMenu() ? 5 : 0);\n }\n } else {\n this[collapsed ? '_addClass' : '_removeClass']('layout-menu-collapsed');\n }\n },\n // ---\n // Add layout sivenav toggle animationEnd event\n _bindLayoutAnimationEndEvent: function _bindLayoutAnimationEndEvent(modifier, cb) {\n var _this4 = this;\n var menu = this.getMenu();\n var duration = menu ? this._getAnimationDuration(menu) + 50 : 0;\n if (!duration) {\n modifier.call(this);\n cb.call(this);\n return;\n }\n this._transitionCallback = function (e) {\n if (e.target !== menu) return;\n _this4._unbindLayoutAnimationEndEvent();\n cb.call(_this4);\n };\n TRANS_EVENTS.forEach(function (e) {\n menu.addEventListener(e, _this4._transitionCallback, false);\n });\n modifier.call(this);\n this._transitionCallbackTimeout = setTimeout(function () {\n _this4._transitionCallback.call(_this4, {\n target: menu\n });\n }, duration);\n },\n // ---\n // Remove layout sivenav toggle animationEnd event\n _unbindLayoutAnimationEndEvent: function _unbindLayoutAnimationEndEvent() {\n var _this5 = this;\n var menu = this.getMenu();\n if (this._transitionCallbackTimeout) {\n clearTimeout(this._transitionCallbackTimeout);\n this._transitionCallbackTimeout = null;\n }\n if (menu && this._transitionCallback) {\n TRANS_EVENTS.forEach(function (e) {\n menu.removeEventListener(e, _this5._transitionCallback, false);\n });\n }\n if (this._transitionCallback) {\n this._transitionCallback = null;\n }\n },\n // ---\n // Bind delayed window resize event\n _bindWindowResizeEvent: function _bindWindowResizeEvent() {\n var _this6 = this;\n this._unbindWindowResizeEvent();\n var cb = function cb() {\n if (_this6._resizeTimeout) {\n clearTimeout(_this6._resizeTimeout);\n _this6._resizeTimeout = null;\n }\n _this6._triggerEvent('resize');\n };\n this._resizeCallback = function () {\n if (_this6._resizeTimeout) clearTimeout(_this6._resizeTimeout);\n _this6._resizeTimeout = setTimeout(cb, _this6.RESIZE_DELAY);\n };\n window.addEventListener('resize', this._resizeCallback, false);\n },\n // ---\n // Unbind delayed window resize event\n _unbindWindowResizeEvent: function _unbindWindowResizeEvent() {\n if (this._resizeTimeout) {\n clearTimeout(this._resizeTimeout);\n this._resizeTimeout = null;\n }\n if (this._resizeCallback) {\n window.removeEventListener('resize', this._resizeCallback, false);\n this._resizeCallback = null;\n }\n },\n _bindMenuMouseEvents: function _bindMenuMouseEvents() {\n var _this7 = this;\n if (this._menuMouseEnter && this._menuMouseLeave && this._windowTouchStart) return;\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return this._unbindMenuMouseEvents();\n if (!this._menuMouseEnter) {\n this._menuMouseEnter = function () {\n if (_this7.isSmallScreen() || !_this7._hasClass('layout-menu-collapsed') || _this7.isOffcanvas() || _this7._hasClass('layout-transitioning')) {\n return _this7._setMenuHoverState(false);\n }\n return _this7._setMenuHoverState(true);\n };\n layoutMenu.addEventListener('mouseenter', this._menuMouseEnter, false);\n layoutMenu.addEventListener('touchstart', this._menuMouseEnter, false);\n }\n if (!this._menuMouseLeave) {\n this._menuMouseLeave = function () {\n _this7._setMenuHoverState(false);\n };\n layoutMenu.addEventListener('mouseleave', this._menuMouseLeave, false);\n }\n if (!this._windowTouchStart) {\n this._windowTouchStart = function (e) {\n if (!e || !e.target || !_this7._findParent(e.target, '.layout-menu')) {\n _this7._setMenuHoverState(false);\n }\n };\n window.addEventListener('touchstart', this._windowTouchStart, true);\n }\n },\n _unbindMenuMouseEvents: function _unbindMenuMouseEvents() {\n if (!this._menuMouseEnter && !this._menuMouseLeave && !this._windowTouchStart) return;\n var layoutMenu = this.getLayoutMenu();\n if (this._menuMouseEnter) {\n if (layoutMenu) {\n layoutMenu.removeEventListener('mouseenter', this._menuMouseEnter, false);\n layoutMenu.removeEventListener('touchstart', this._menuMouseEnter, false);\n }\n this._menuMouseEnter = null;\n }\n if (this._menuMouseLeave) {\n if (layoutMenu) {\n layoutMenu.removeEventListener('mouseleave', this._menuMouseLeave, false);\n }\n this._menuMouseLeave = null;\n }\n if (this._windowTouchStart) {\n if (layoutMenu) {\n window.addEventListener('touchstart', this._windowTouchStart, true);\n }\n this._windowTouchStart = null;\n }\n this._setMenuHoverState(false);\n },\n // *******************************************************************************\n // * Methods\n scrollToActive: function scrollToActive() {\n var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this._scrollToActive(animate);\n },\n swipeIn: function swipeIn(el, callback) {\n this._swipeIn(el, callback);\n },\n swipeOut: function swipeOut(el, callback) {\n this._swipeOut(el, callback);\n },\n overlayTap: function overlayTap(el, callback) {\n this._overlayTap(el, callback);\n },\n scrollPageTo: function scrollPageTo(to) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n var easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t -= 1;\n return -c / 2 * (t * (t - 2) - 1) + b;\n };\n var element = document.scrollingElement;\n if (typeof to === 'string') {\n to = document.querySelector(to);\n }\n if (typeof to !== 'number') {\n to = to.getBoundingClientRect().top + element.scrollTop;\n }\n var start = element.scrollTop;\n var change = to - start;\n var startDate = +new Date();\n // const increment = 20\n\n var animateScroll = function animateScroll() {\n var currentDate = +new Date();\n var currentTime = currentDate - startDate;\n var val = easeInOutQuad(currentTime, start, change, duration);\n element.scrollTop = val;\n if (currentTime < duration) {\n requestAnimationFrame(animateScroll);\n } else {\n element.scrollTop = to;\n }\n };\n animateScroll();\n },\n // ---\n // Collapse / expand layout\n setCollapsed: function setCollapsed() {\n var _this8 = this;\n var collapsed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('collapsed');\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return;\n this._unbindLayoutAnimationEndEvent();\n if (animate && this._supportsTransitionEnd()) {\n this._addClass('layout-transitioning');\n if (collapsed) this._setMenuHoverState(false);\n this._bindLayoutAnimationEndEvent(function () {\n // Collapse / Expand\n _this8._setCollapsed(collapsed);\n }, function () {\n _this8._removeClass('layout-transitioning');\n _this8._triggerWindowEvent('resize');\n _this8._triggerEvent('toggle');\n _this8._setMenuHoverState(false);\n });\n } else {\n this._addClass('layout-no-transition');\n if (collapsed) this._setMenuHoverState(false);\n\n // Collapse / Expand\n this._setCollapsed(collapsed);\n setTimeout(function () {\n _this8._removeClass('layout-no-transition');\n _this8._triggerWindowEvent('resize');\n _this8._triggerEvent('toggle');\n _this8._setMenuHoverState(false);\n }, 1);\n }\n },\n // ---\n // Toggle layout\n toggleCollapsed: function toggleCollapsed() {\n var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.setCollapsed(!this.isCollapsed(), animate);\n },\n // ---\n // Set layout positioning\n setPosition: function setPosition() {\n var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\n var offcanvas = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : requiredParam('offcanvas');\n this._removeClass('layout-menu-offcanvas layout-menu-fixed layout-menu-fixed-offcanvas');\n if (!fixed && offcanvas) {\n this._addClass('layout-menu-offcanvas');\n } else if (fixed && !offcanvas) {\n this._addClass('layout-menu-fixed');\n this._redrawLayoutMenu();\n } else if (fixed && offcanvas) {\n this._addClass('layout-menu-fixed-offcanvas');\n this._redrawLayoutMenu();\n }\n this.update();\n },\n // *******************************************************************************\n // * Getters\n getLayoutMenu: function getLayoutMenu() {\n return document.querySelector('.layout-menu');\n },\n getMenu: function getMenu() {\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return null;\n return !this._hasClass('menu', layoutMenu) ? layoutMenu.querySelector('.menu') : layoutMenu;\n },\n getLayoutNavbar: function getLayoutNavbar() {\n return document.querySelector('.layout-navbar');\n },\n getLayoutFooter: function getLayoutFooter() {\n return document.querySelector('.content-footer');\n },\n getLayoutContainer: function getLayoutContainer() {\n return document.querySelector('.layout-page');\n },\n // *******************************************************************************\n // * Setters\n setNavbarFixed: function setNavbarFixed() {\n var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\n this[fixed ? '_addClass' : '_removeClass']('layout-navbar-fixed');\n this.update();\n },\n setFooterFixed: function setFooterFixed() {\n var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\n this[fixed ? '_addClass' : '_removeClass']('layout-footer-fixed');\n this.update();\n },\n setFlipped: function setFlipped() {\n var reversed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('reversed');\n this[reversed ? '_addClass' : '_removeClass']('layout-menu-flipped');\n },\n // *******************************************************************************\n // * Update\n update: function update() {\n if (this.getLayoutNavbar() && (!this.isSmallScreen() && this.isLayoutNavbarFull() && this.isFixed() || this.isNavbarFixed()) || this.getLayoutFooter() && this.isFooterFixed()) {\n this._updateInlineStyle(this._getNavbarHeight(), this._getFooterHeight());\n }\n this._bindMenuMouseEvents();\n },\n setAutoUpdate: function setAutoUpdate() {\n var _this9 = this;\n var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('enable');\n if (enable && !this._autoUpdate) {\n this.on('resize.Helpers:autoUpdate', function () {\n return _this9.update();\n });\n this._autoUpdate = true;\n } else if (!enable && this._autoUpdate) {\n this.off('resize.Helpers:autoUpdate');\n this._autoUpdate = false;\n }\n },\n // Update custom option based on element\n updateCustomOptionCheck: function updateCustomOptionCheck(el) {\n if (el.checked) {\n // If custom option element is radio, remove checked from the siblings (closest `.row`)\n if (el.type === 'radio') {\n var customRadioOptionList = [].slice.call(el.closest('.row').querySelectorAll('.custom-option'));\n customRadioOptionList.map(function (customRadioOptionEL) {\n customRadioOptionEL.closest('.custom-option').classList.remove('checked');\n });\n }\n el.closest('.custom-option').classList.add('checked');\n } else {\n el.closest('.custom-option').classList.remove('checked');\n }\n },\n // *******************************************************************************\n // * Tests\n isRtl: function isRtl() {\n return document.querySelector('body').getAttribute('dir') === 'rtl' || document.querySelector('html').getAttribute('dir') === 'rtl';\n },\n isMobileDevice: function isMobileDevice() {\n return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1;\n },\n isSmallScreen: function isSmallScreen() {\n return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) < this.LAYOUT_BREAKPOINT;\n },\n isLayoutNavbarFull: function isLayoutNavbarFull() {\n return !!document.querySelector('.layout-wrapper.layout-navbar-full');\n },\n isCollapsed: function isCollapsed() {\n if (this.isSmallScreen()) {\n return !this._hasClass('layout-menu-expanded');\n }\n return this._hasClass('layout-menu-collapsed');\n },\n isFixed: function isFixed() {\n return this._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas');\n },\n isOffcanvas: function isOffcanvas() {\n return this._hasClass('layout-menu-offcanvas layout-menu-fixed-offcanvas');\n },\n isNavbarFixed: function isNavbarFixed() {\n return this._hasClass('layout-navbar-fixed') || !this.isSmallScreen() && this.isFixed() && this.isLayoutNavbarFull();\n },\n isFooterFixed: function isFooterFixed() {\n return this._hasClass('layout-footer-fixed');\n },\n isFlipped: function isFlipped() {\n return this._hasClass('layout-menu-flipped');\n },\n isLightStyle: function isLightStyle() {\n return document.documentElement.classList.contains('light-style');\n },\n isDarkStyle: function isDarkStyle() {\n return document.documentElement.classList.contains('dark-style');\n },\n // *******************************************************************************\n // * Events\n on: function on() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('event');\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : requiredParam('callback');\n var _event$split = event.split('.'),\n _event$split2 = _slicedToArray(_event$split, 1),\n _event = _event$split2[0];\n var _event$split3 = event.split('.'),\n _event$split4 = _toArray(_event$split3),\n namespace = _event$split4.slice(1);\n // let [_event, ...namespace] = event.split('.')\n namespace = namespace.join('.') || null;\n this._listeners.push({\n event: _event,\n namespace: namespace,\n callback: callback\n });\n },\n off: function off() {\n var _this10 = this;\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('event');\n var _event$split5 = event.split('.'),\n _event$split6 = _slicedToArray(_event$split5, 1),\n _event = _event$split6[0];\n var _event$split7 = event.split('.'),\n _event$split8 = _toArray(_event$split7),\n namespace = _event$split8.slice(1);\n namespace = namespace.join('.') || null;\n this._listeners.filter(function (listener) {\n return listener.event === _event && listener.namespace === namespace;\n }).forEach(function (listener) {\n return _this10._listeners.splice(_this10._listeners.indexOf(listener), 1);\n });\n },\n // *******************************************************************************\n // * Life cycle\n init: function init() {\n var _this11 = this;\n if (this._initialized) return;\n this._initialized = true;\n\n // Initialize `style` element\n this._updateInlineStyle(0);\n\n // Bind window resize event\n this._bindWindowResizeEvent();\n\n // Bind init event\n this.off('init._Helpers');\n this.on('init._Helpers', function () {\n _this11.off('resize._Helpers:redrawMenu');\n _this11.on('resize._Helpers:redrawMenu', function () {\n // eslint-disable-next-line no-unused-expressions\n _this11.isSmallScreen() && !_this11.isCollapsed() && _this11._redrawLayoutMenu();\n });\n\n // Force repaint in IE 10\n if (typeof document.documentMode === 'number' && document.documentMode < 11) {\n _this11.off('resize._Helpers:ie10RepaintBody');\n _this11.on('resize._Helpers:ie10RepaintBody', function () {\n if (_this11.isFixed()) return;\n var scrollTop = document.documentElement.scrollTop;\n document.body.style.display = 'none';\n // document.body.offsetHeight\n document.body.style.display = 'block';\n document.documentElement.scrollTop = scrollTop;\n });\n }\n });\n this._triggerEvent('init');\n },\n destroy: function destroy() {\n var _this12 = this;\n if (!this._initialized) return;\n this._initialized = false;\n this._removeClass('layout-transitioning');\n this._removeInlineStyle();\n this._unbindLayoutAnimationEndEvent();\n this._unbindWindowResizeEvent();\n this._unbindMenuMouseEvents();\n this.setAutoUpdate(false);\n this.off('init._Helpers');\n\n // Remove all listeners except `init`\n this._listeners.filter(function (listener) {\n return listener.event !== 'init';\n }).forEach(function (listener) {\n return _this12._listeners.splice(_this12._listeners.indexOf(listener), 1);\n });\n },\n // ---\n // Init Password Toggle\n initPasswordToggle: function initPasswordToggle() {\n var toggler = document.querySelectorAll('.form-password-toggle i');\n if (typeof toggler !== 'undefined' && toggler !== null) {\n toggler.forEach(function (el) {\n el.addEventListener('click', function (e) {\n e.preventDefault();\n var formPasswordToggle = el.closest('.form-password-toggle');\n var formPasswordToggleIcon = formPasswordToggle.querySelector('i');\n var formPasswordToggleInput = formPasswordToggle.querySelector('input');\n if (formPasswordToggleInput.getAttribute('type') === 'text') {\n formPasswordToggleInput.setAttribute('type', 'password');\n formPasswordToggleIcon.classList.replace('mdi-eye-outline', 'mdi-eye-off-outline');\n } else if (formPasswordToggleInput.getAttribute('type') === 'password') {\n formPasswordToggleInput.setAttribute('type', 'text');\n formPasswordToggleIcon.classList.replace('mdi-eye-off-outline', 'mdi-eye-outline');\n }\n });\n });\n }\n },\n //--\n // Init custom option check\n initCustomOptionCheck: function initCustomOptionCheck() {\n var _this = this;\n var custopOptionList = [].slice.call(document.querySelectorAll('.custom-option .form-check-input'));\n custopOptionList.map(function (customOptionEL) {\n // Update custom options check on page load\n _this.updateCustomOptionCheck(customOptionEL);\n\n // Update custom options check on click\n customOptionEL.addEventListener('click', function (e) {\n _this.updateCustomOptionCheck(customOptionEL);\n });\n });\n },\n // ---\n // Init Speech To Text\n initSpeechToText: function initSpeechToText() {\n var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n var speechToText = document.querySelectorAll('.speech-to-text');\n if (SpeechRecognition !== undefined && SpeechRecognition !== null) {\n if (typeof speechToText !== 'undefined' && speechToText !== null) {\n var recognition = new SpeechRecognition();\n var toggler = document.querySelectorAll('.speech-to-text i');\n toggler.forEach(function (el) {\n var listening = false;\n el.addEventListener('click', function () {\n el.closest('.input-group').querySelector('.form-control').focus();\n recognition.onspeechstart = function () {\n listening = true;\n };\n if (listening === false) {\n recognition.start();\n }\n recognition.onerror = function () {\n listening = false;\n };\n recognition.onresult = function (event) {\n el.closest('.input-group').querySelector('.form-control').value = event.results[0][0].transcript;\n };\n recognition.onspeechend = function () {\n listening = false;\n recognition.stop();\n };\n });\n });\n }\n }\n },\n // Tabs animation\n navTabsAnimation: function navTabsAnimation() {\n document.querySelectorAll('.nav-tabs').forEach(function (tab) {\n var slider = tab.querySelector('.tab-slider');\n if (!slider) {\n var sliderEle = document.createElement('span');\n sliderEle.setAttribute('class', 'tab-slider');\n slider = tab.appendChild(sliderEle);\n }\n var isVertical = tab.closest('.nav-align-left') || tab.closest('.nav-align-right');\n var setSlider = function setSlider(activeTab) {\n var tabsEl = activeTab.parentElement;\n var tabsRect = tabsEl.getBoundingClientRect();\n var activeTabRect = activeTab.getBoundingClientRect();\n var sliderStart = activeTabRect.x - tabsRect.x;\n var isBottom = tab.closest('.nav-align-bottom');\n if (isVertical) {\n slider.style.top = activeTabRect.y - tabsRect.y + 'px';\n slider.style[tab.closest('.nav-align-right') ? 'inset-inline-start' : 'inset-inline-end'] = 0;\n slider.style.height = activeTabRect.height + 'px';\n } else {\n slider.style.left = sliderStart + 'px';\n slider.style.width = activeTabRect.width + 'px';\n if (!isBottom) {\n slider.style.bottom = 0;\n }\n }\n };\n // On click\n tab.addEventListener('click', function (event) {\n // To avoid active state for disabled element\n if (event.target.closest('.nav-item .active')) {\n setSlider(event.target.closest('.nav-item'));\n }\n });\n // On Load\n setSlider(tab.querySelector('.nav-link.active').closest('.nav-item'));\n });\n },\n // ---\n // Init Navbar Dropdown (i.e notification) PerfectScrollbar\n initNavbarDropdownScrollbar: function initNavbarDropdownScrollbar() {\n var scrollbarContainer = document.querySelectorAll('.navbar-dropdown .scrollable-container');\n var _window4 = window,\n PerfectScrollbar = _window4.PerfectScrollbar;\n if (PerfectScrollbar !== undefined) {\n if (typeof scrollbarContainer !== 'undefined' && scrollbarContainer !== null) {\n scrollbarContainer.forEach(function (el) {\n // eslint-disable-next-line no-new\n new PerfectScrollbar(el, {\n wheelPropagation: false,\n suppressScrollX: true\n });\n });\n }\n }\n },\n // Ajax Call Promise\n ajaxCall: function ajaxCall(url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.open('GET', url);\n req.onload = function () {\n return req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));\n };\n req.onerror = function (e) {\n return reject(Error(\"Network Error: \".concat(e)));\n };\n req.send();\n });\n },\n // ---\n // SidebarToggle (Used in Apps)\n initSidebarToggle: function initSidebarToggle() {\n var sidebarToggler = document.querySelectorAll('[data-bs-toggle=\"sidebar\"]');\n sidebarToggler.forEach(function (el) {\n el.addEventListener('click', function () {\n var target = el.getAttribute('data-target');\n var overlay = el.getAttribute('data-overlay');\n var appOverlay = document.querySelectorAll('.app-overlay');\n var targetEl = document.querySelectorAll(target);\n targetEl.forEach(function (tel) {\n tel.classList.toggle('show');\n if (typeof overlay !== 'undefined' && overlay !== null && overlay !== false && typeof appOverlay !== 'undefined') {\n if (tel.classList.contains('show')) {\n appOverlay[0].classList.add('show');\n } else {\n appOverlay[0].classList.remove('show');\n }\n appOverlay[0].addEventListener('click', function (e) {\n e.currentTarget.classList.remove('show');\n tel.classList.remove('show');\n });\n }\n });\n });\n });\n }\n};\n\n// *******************************************************************************\n// * Initialization\n\nif (typeof window !== 'undefined') {\n Helpers.init();\n if (Helpers.isMobileDevice() && window.chrome) {\n document.documentElement.classList.add('layout-menu-100vh');\n }\n\n // Update layout after page load\n if (document.readyState === 'complete') Helpers.update();else document.addEventListener('DOMContentLoaded', function onContentLoaded() {\n Helpers.update();\n document.removeEventListener('DOMContentLoaded', onContentLoaded);\n });\n}\n\n// ---\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RDs7RUFFQTtFQUNBLElBQUlyRSxRQUFRLENBQUN5UixVQUFVLEtBQUssVUFBVSxFQUFFNVIsT0FBTyxDQUFDZ0wsTUFBTSxFQUFFLE1BRXREN0ssUUFBUSxDQUFDcUosZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBU3FJLGVBQWUsR0FBRztJQUN2RTdSLE9BQU8sQ0FBQ2dMLE1BQU0sRUFBRTtJQUNoQjdLLFFBQVEsQ0FBQ3VKLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFbUksZUFBZSxDQUFDO0VBQ25FLENBQUMsQ0FBQztBQUNOOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTWF0ZXJpYWxpemUvLi9qcy9oZWxwZXJzLmpzPzBiMjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29uc3RhbnRzXG5jb25zdCBUUkFOU19FVkVOVFMgPSBbJ3RyYW5zaXRpb25lbmQnLCAnd2Via2l0VHJhbnNpdGlvbkVuZCcsICdvVHJhbnNpdGlvbkVuZCddXG5jb25zdCBUUkFOU19QUk9QRVJUSUVTID0gWyd0cmFuc2l0aW9uJywgJ01velRyYW5zaXRpb24nLCAnd2Via2l0VHJhbnNpdGlvbicsICdXZWJraXRUcmFuc2l0aW9uJywgJ09UcmFuc2l0aW9uJ11cbmNvbnN0IElOTElORV9TVFlMRVMgPSBgXG4ubGF5b3V0LW1lbnUtZml4ZWQgLmxheW91dC1uYXZiYXItZnVsbCAubGF5b3V0LW1lbnUsXG4ubGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzIC5sYXlvdXQtbmF2YmFyLWZ1bGwgLmxheW91dC1tZW51IHtcbiAgdG9wOiB7bmF2YmFySGVpZ2h0fXB4ICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LXBhZ2Uge1xuICBwYWRkaW5nLXRvcDoge25hdmJhckhlaWdodH1weCAhaW1wb3J0YW50O1xufVxuLmNvbnRlbnQtd3JhcHBlciB7XG4gIHBhZGRpbmctYm90dG9tOiB7Zm9vdGVySGVpZ2h0fXB4ICFpbXBvcnRhbnQ7XG59YFxuXG4vLyBHdWFyZFxuZnVuY3Rpb24gcmVxdWlyZWRQYXJhbShuYW1lKSB7XG4gIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIHJlcXVpcmVkJHtuYW1lID8gYDogXFxgJHtuYW1lfVxcYGAgOiAnJ31gKVxufVxuXG5jb25zdCBIZWxwZXJzID0ge1xuICAvLyBSb290IEVsZW1lbnRcbiAgUk9PVF9FTDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBudWxsLFxuXG4gIC8vIExhcmdlIHNjcmVlbnMgYnJlYWtwb2ludFxuICBMQVlPVVRfQlJFQUtQT0lOVDogMTIwMCxcblxuICAvLyBSZXNpemUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gIFJFU0laRV9ERUxBWTogMjAwLFxuXG4gIG1lbnVQc1Njcm9sbDogbnVsbCxcblxuICBtYWluTWVudTogbnVsbCxcblxuICAvLyBJbnRlcm5hbCB2YXJpYWJsZXNcbiAgX2N1clN0eWxlOiBudWxsLFxuICBfc3R5bGVFbDogbnVsbCxcbiAgX3Jlc2l6ZVRpbWVvdXQ6IG51bGwsXG4gIF9yZXNpemVDYWxsYmFjazogbnVsbCxcbiAgX3RyYW5zaXRpb25DYWxsYmFjazogbnVsbCxcbiAgX3RyYW5zaXRpb25DYWxsYmFja1RpbWVvdXQ6IG51bGwsXG4gIF9saXN0ZW5lcnM6IFtdLFxuICBfaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICBfYXV0b1VwZGF0ZTogZmFsc2UsXG4gIF9sYXN0V2luZG93SGVpZ2h0OiAwLFxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKiBVdGlsaXRpZXNcblxuICAvLyAtLS1cbiAgLy8gU2Nyb2xsIFRvIEFjdGl2ZSBNZW51IEl0ZW1cbiAgX3Njcm9sbFRvQWN0aXZlKGFuaW1hdGUgPSBmYWxzZSwgZHVyYXRpb24gPSA1MDApIHtcbiAgICBjb25zdCBsYXlvdXRNZW51ID0gdGhpcy5nZXRMYXlvdXRNZW51KClcblxuICAgIGlmICghbGF5b3V0TWVudSkgcmV0dXJuXG5cbiAgICBsZXQgYWN0aXZlRWwgPSBsYXlvdXRNZW51LnF1ZXJ5U2VsZWN0b3IoJ2xpLm1lbnUtaXRlbS5hY3RpdmU6bm90KC5vcGVuKScpXG5cbiAgICBpZiAoYWN0aXZlRWwpIHtcbiAgICAgIC8vIHQgPSBjdXJyZW50IHRpbWVcbiAgICAgIC8vIGIgPSBzdGFydCB2YWx1ZVxuICAgICAgLy8gYyA9IGNoYW5nZSBpbiB2YWx1ZVxuICAgICAgLy8gZCA9IGR1cmF0aW9uXG4gICAgICBjb25zdCBlYXNlSW5PdXRRdWFkID0gKHQsIGIsIGMsIGQpID0+IHtcbiAgICAgICAgdCAvPSBkIC8gMlxuICAgICAgICBpZiAodCA8IDEpIHJldHVybiAoYyAvIDIpICogdCAqIHQgKyBiXG4gICAgICAgIHQgLT0gMVxuICAgICAgICByZXR1cm4gKC1jIC8gMikgKiAodCAqICh0IC0gMikgLSAxKSArIGJcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcblxuICAgICAgaWYgKHR5cGVvZiBhY3RpdmVFbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYWN0aXZlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFjdGl2ZUVsKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhY3RpdmVFbCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgYWN0aXZlRWwgPSBhY3RpdmVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBlbGVtZW50LnNjcm9sbFRvcFxuICAgICAgfVxuXG4gICAgICAvLyBJZiBhY3RpdmUgZWxlbWVudCdzIHRvcCBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gMi8zICg2NiUpIG9mIG1lbnUgaGVpZ2h0IHRoYW4gZG8gbm90IHNjcm9sbFxuICAgICAgaWYgKGFjdGl2ZUVsIDwgcGFyc2VJbnQoKGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogMikgLyAzLCAxMCkpIHJldHVyblxuXG4gICAgICBjb25zdCBzdGFydCA9IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBjaGFuZ2UgPSBhY3RpdmVFbCAtIHN0YXJ0IC0gcGFyc2VJbnQoZWxlbWVudC5jbGllbnRIZWlnaHQgLyAyLCAxMClcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9ICtuZXcgRGF0ZSgpXG5cbiAgICAgIGlmIChhbmltYXRlID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGFuaW1hdGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSArbmV3IERhdGUoKVxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gY3VycmVudERhdGUgLSBzdGFydERhdGVcbiAgICAgICAgICBjb25zdCB2YWwgPSBlYXNlSW5PdXRRdWFkKGN1cnJlbnRUaW1lLCBzdGFydCwgY2hhbmdlLCBkdXJhdGlvbilcbiAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHZhbFxuICAgICAgICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZVNjcm9sbClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBjaGFuZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYW5pbWF0ZVNjcm9sbCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGNoYW5nZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gU3dpcGUgSW4gR2VzdHVyZVxuICBfc3dpcGVJbih0YXJnZXRFbCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCB7IEhhbW1lciB9ID0gd2luZG93XG4gICAgaWYgKHR5cGVvZiBIYW1tZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0YXJnZXRFbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFN3aXBlIG1lbnUgZ2VzdHVyZVxuICAgICAgY29uc3Qgc3dpcGVJbkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldEVsKVxuXG4gICAgICBpZiAoc3dpcGVJbkVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaGFtbWVySW5zdGFuY2UgPSBuZXcgSGFtbWVyKHN3aXBlSW5FbGVtZW50KVxuXG4gICAgICAgIGhhbW1lckluc3RhbmNlLm9uKCdwYW5yaWdodCcsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gU3dpcGUgT3V0IEdlc3R1cmVcbiAgX3N3aXBlT3V0KHRhcmdldEVsLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHsgSGFtbWVyIH0gPSB3aW5kb3dcbiAgICBpZiAodHlwZW9mIEhhbW1lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRhcmdldEVsID09PSAnc3RyaW5nJykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIFN3aXBlIG1lbnUgZ2VzdHVyZVxuICAgICAgICBjb25zdCBzd2lwZU91dEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldEVsKVxuXG4gICAgICAgIGlmIChzd2lwZU91dEVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBoYW1tZXJJbnN0YW5jZSA9IG5ldyBIYW1tZXIoc3dpcGVPdXRFbGVtZW50KVxuXG4gICAgICAgICAgaGFtbWVySW5zdGFuY2UuZ2V0KCdwYW4nKS5zZXQoeyBkaXJlY3Rpb246IEhhbW1lci5ESVJFQ1RJT05fQUxMLCB0aHJlc2hvbGQ6IDI1MCB9KVxuICAgICAgICAgIGhhbW1lckluc3RhbmNlLm9uKCdwYW5sZWZ0JywgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0sIDUwMClcbiAgICB9XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIFN3aXBlIE91dCBPbiBPdmVybGF5IFRhcFxuICBfb3ZlcmxheVRhcCh0YXJnZXRFbCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCB7IEhhbW1lciB9ID0gd2luZG93XG5cbiAgICBpZiAodHlwZW9mIEhhbW1lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRhcmdldEVsID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU3dpcGUgb3V0IG92ZXJsYXkgZWxlbWVudFxuICAgICAgY29uc3Qgc3dpcGVPdXRPdmVybGF5RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0RWwpXG5cbiAgICAgIGlmIChzd2lwZU91dE92ZXJsYXlFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGhhbW1lckluc3RhbmNlID0gbmV3IEhhbW1lcihzd2lwZU91dE92ZXJsYXlFbGVtZW50KVxuXG4gICAgICAgIGhhbW1lckluc3RhbmNlLm9uKCd0YXAnLCBjYWxsYmFjaylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIEFkZCBjbGFzc2VzXG4gIF9hZGRDbGFzcyhjbHMsIGVsID0gdGhpcy5ST09UX0VMKSB7XG4gICAgaWYgKGVsLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBZGQgY2xhc3NlcyB0byBtdWx0aXBsZSBlbGVtZW50c1xuICAgICAgZWwuZm9yRWFjaChlID0+IHtcbiAgICAgICAgY2xzLnNwbGl0KCcgJykuZm9yRWFjaChjID0+IGUuY2xhc3NMaXN0LmFkZChjKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCBjbGFzc2VzIHRvIHNpbmdsZSBlbGVtZW50XG4gICAgICBjbHMuc3BsaXQoJyAnKS5mb3JFYWNoKGMgPT4gZWwuY2xhc3NMaXN0LmFkZChjKSlcbiAgICB9XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIFJlbW92ZSBjbGFzc2VzXG4gIF9yZW1vdmVDbGFzcyhjbHMsIGVsID0gdGhpcy5ST09UX0VMKSB7XG4gICAgaWYgKGVsLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBSZW1vdmUgY2xhc3NlcyB0byBtdWx0aXBsZSBlbGVtZW50c1xuICAgICAgZWwuZm9yRWFjaChlID0+IHtcbiAgICAgICAgY2xzLnNwbGl0KCcgJykuZm9yRWFjaChjID0+IGUuY2xhc3NMaXN0LnJlbW92ZShjKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbW92ZSBjbGFzc2VzIHRvIHNpbmdsZSBlbGVtZW50XG4gICAgICBjbHMuc3BsaXQoJyAnKS5mb3JFYWNoKGMgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZShjKSlcbiAgICB9XG4gIH0sXG5cbiAgLy8gVG9nZ2xlIGNsYXNzZXNcbiAgX3RvZ2dsZUNsYXNzKGVsID0gdGhpcy5ST09UX0VMLCBjbHMxLCBjbHMyKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhjbHMxKSkge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlcGxhY2UoY2xzMSwgY2xzMilcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlcGxhY2UoY2xzMiwgY2xzMSlcbiAgICB9XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIEhhcyBjbGFzc1xuICBfaGFzQ2xhc3MoY2xzLCBlbCA9IHRoaXMuUk9PVF9FTCkge1xuICAgIGxldCByZXN1bHQgPSBmYWxzZVxuXG4gICAgY2xzLnNwbGl0KCcgJykuZm9yRWFjaChjID0+IHtcbiAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoYykpIHJlc3VsdCA9IHRydWVcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LFxuXG4gIF9maW5kUGFyZW50KGVsLCBjbHMpIHtcbiAgICBpZiAoKGVsICYmIGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB8fCBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdIVE1MJykgcmV0dXJuIG51bGxcbiAgICBlbCA9IGVsLnBhcmVudE5vZGVcbiAgICB3aGlsZSAoZWwgJiYgZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbHMpKSB7XG4gICAgICBlbCA9IGVsLnBhcmVudE5vZGVcbiAgICB9XG4gICAgZWwgPSBlbCAmJiBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJyA/IGVsIDogbnVsbFxuICAgIHJldHVybiBlbFxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBUcmlnZ2VyIHdpbmRvdyBldmVudFxuICBfdHJpZ2dlcldpbmRvd0V2ZW50KG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVyblxuXG4gICAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG4gICAgICBsZXQgZXZlbnRcblxuICAgICAgaWYgKHR5cGVvZiBFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBldmVudCA9IG5ldyBFdmVudChuYW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKVxuICAgICAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpXG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZmlyZUV2ZW50KGBvbiR7bmFtZX1gLCBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpKVxuICAgIH1cbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gVHJpZ2dlciBldmVudFxuICBfdHJpZ2dlckV2ZW50KG5hbWUpIHtcbiAgICB0aGlzLl90cmlnZ2VyV2luZG93RXZlbnQoYGxheW91dCR7bmFtZX1gKVxuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PT0gbmFtZSkuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lci5jYWxsYmFjay5jYWxsKG51bGwpKVxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBVcGRhdGUgc3R5bGVcbiAgX3VwZGF0ZUlubGluZVN0eWxlKG5hdmJhckhlaWdodCA9IDAsIGZvb3RlckhlaWdodCA9IDApIHtcbiAgICBpZiAoIXRoaXMuX3N0eWxlRWwpIHtcbiAgICAgIHRoaXMuX3N0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gICAgICB0aGlzLl9zdHlsZUVsLnR5cGUgPSAndGV4dC9jc3MnXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuX3N0eWxlRWwpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3U3R5bGUgPSBJTkxJTkVfU1RZTEVTLnJlcGxhY2UoL1xce25hdmJhckhlaWdodFxcfS9naSwgbmF2YmFySGVpZ2h0KS5yZXBsYWNlKFxuICAgICAgL1xce2Zvb3RlckhlaWdodFxcfS9naSxcbiAgICAgIGZvb3RlckhlaWdodFxuICAgIClcblxuICAgIGlmICh0aGlzLl9jdXJTdHlsZSAhPT0gbmV3U3R5bGUpIHtcbiAgICAgIHRoaXMuX2N1clN0eWxlID0gbmV3U3R5bGVcbiAgICAgIHRoaXMuX3N0eWxlRWwudGV4dENvbnRlbnQgPSBuZXdTdHlsZVxuICAgIH1cbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gUmVtb3ZlIHN0eWxlXG4gIF9yZW1vdmVJbmxpbmVTdHlsZSgpIHtcbiAgICBpZiAodGhpcy5fc3R5bGVFbCkgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZCh0aGlzLl9zdHlsZUVsKVxuICAgIHRoaXMuX3N0eWxlRWwgPSBudWxsXG4gICAgdGhpcy5fY3VyU3R5bGUgPSBudWxsXG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIFJlZHJhdyBsYXlvdXQgbWVudSAoU2FmYXJpIGJ1Z2ZpeClcbiAgX3JlZHJhd0xheW91dE1lbnUoKSB7XG4gICAgY29uc3QgbGF5b3V0TWVudSA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpXG5cbiAgICBpZiAobGF5b3V0TWVudSAmJiBsYXlvdXRNZW51LnF1ZXJ5U2VsZWN0b3IoJy5tZW51JykpIHtcbiAgICAgIGNvbnN0IGlubmVyID0gbGF5b3V0TWVudS5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCB9ID0gaW5uZXJcbiAgICAgIGNvbnN0IHBhZ2VTY3JvbGxUb3AgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgIGxheW91dE1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgLy8gbGF5b3V0TWVudS5vZmZzZXRIZWlnaHRcbiAgICAgIGxheW91dE1lbnUuc3R5bGUuZGlzcGxheSA9ICcnXG4gICAgICBpbm5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3BcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSBwYWdlU2Nyb2xsVG9wXG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIENoZWNrIGZvciB0cmFuc2l0aW9uIHN1cHBvcnRcbiAgX3N1cHBvcnRzVHJhbnNpdGlvbkVuZCgpIHtcbiAgICBpZiAod2luZG93LlFVbml0KSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcblxuICAgIGlmICghZWwpIHJldHVybiBmYWxzZVxuXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlXG4gICAgVFJBTlNfUFJPUEVSVElFUy5mb3JFYWNoKGV2bnQgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBlbC5zdHlsZVtldm50XSAhPT0gJ3VuZGVmaW5lZCcpIHJlc3VsdCA9IHRydWVcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBDYWxjdWxhdGUgY3VycmVudCBuYXZiYXIgaGVpZ2h0XG4gIF9nZXROYXZiYXJIZWlnaHQoKSB7XG4gICAgY29uc3QgbGF5b3V0TmF2YmFyID0gdGhpcy5nZXRMYXlvdXROYXZiYXIoKVxuXG4gICAgaWYgKCFsYXlvdXROYXZiYXIpIHJldHVybiAwXG4gICAgaWYgKCF0aGlzLmlzU21hbGxTY3JlZW4oKSkgcmV0dXJuIGxheW91dE5hdmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblxuICAgIC8vIE5lZWRzIHNvbWUgbG9naWMgdG8gZ2V0IG5hdmJhciBoZWlnaHQgb24gc21hbGwgc2NyZWVuc1xuXG4gICAgY29uc3QgY2xvbmVkRWwgPSBsYXlvdXROYXZiYXIuY2xvbmVOb2RlKHRydWUpXG4gICAgY2xvbmVkRWwuaWQgPSBudWxsXG4gICAgY2xvbmVkRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG4gICAgY2xvbmVkRWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG5cbiAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjbG9uZWRFbC5xdWVyeVNlbGVjdG9yQWxsKCcuY29sbGFwc2Uuc2hvdycpKS5mb3JFYWNoKGVsID0+IHRoaXMuX3JlbW92ZUNsYXNzKCdzaG93JywgZWwpKVxuXG4gICAgbGF5b3V0TmF2YmFyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNsb25lZEVsLCBsYXlvdXROYXZiYXIpXG5cbiAgICBjb25zdCBuYXZiYXJIZWlnaHQgPSBjbG9uZWRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblxuICAgIGNsb25lZEVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmVkRWwpXG5cbiAgICByZXR1cm4gbmF2YmFySGVpZ2h0XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIEdldCBjdXJyZW50IGZvb3RlciBoZWlnaHRcbiAgX2dldEZvb3RlckhlaWdodCgpIHtcbiAgICBjb25zdCBsYXlvdXRGb290ZXIgPSB0aGlzLmdldExheW91dEZvb3RlcigpXG5cbiAgICBpZiAoIWxheW91dEZvb3RlcikgcmV0dXJuIDBcblxuICAgIHJldHVybiBsYXlvdXRGb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIEdldCBhbmltYXRpb24gZHVyYXRpb24gb2YgZWxlbWVudFxuICBfZ2V0QW5pbWF0aW9uRHVyYXRpb24oZWwpIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS50cmFuc2l0aW9uRHVyYXRpb25cblxuICAgIHJldHVybiBwYXJzZUZsb2F0KGR1cmF0aW9uKSAqIChkdXJhdGlvbi5pbmRleE9mKCdtcycpICE9PSAtMSA/IDEgOiAxMDAwKVxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBTZXQgbWVudSBob3ZlciBzdGF0ZVxuICBfc2V0TWVudUhvdmVyU3RhdGUoaG92ZXJlZCkge1xuICAgIHRoaXNbaG92ZXJlZCA/ICdfYWRkQ2xhc3MnIDogJ19yZW1vdmVDbGFzcyddKCdsYXlvdXQtbWVudS1ob3ZlcicpXG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIFRvZ2dsZSBjb2xsYXBzZWRcbiAgX3NldENvbGxhcHNlZChjb2xsYXBzZWQpIHtcbiAgICBpZiAodGhpcy5pc1NtYWxsU2NyZWVuKCkpIHtcbiAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQ2xhc3MoJ2xheW91dC1tZW51LWV4cGFuZGVkJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3MoJ2xheW91dC1tZW51LWV4cGFuZGVkJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuX3JlZHJhd0xheW91dE1lbnUoKSA/IDUgOiAwXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tjb2xsYXBzZWQgPyAnX2FkZENsYXNzJyA6ICdfcmVtb3ZlQ2xhc3MnXSgnbGF5b3V0LW1lbnUtY29sbGFwc2VkJylcbiAgICB9XG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIEFkZCBsYXlvdXQgc2l2ZW5hdiB0b2dnbGUgYW5pbWF0aW9uRW5kIGV2ZW50XG4gIF9iaW5kTGF5b3V0QW5pbWF0aW9uRW5kRXZlbnQobW9kaWZpZXIsIGNiKSB7XG4gICAgY29uc3QgbWVudSA9IHRoaXMuZ2V0TWVudSgpXG4gICAgY29uc3QgZHVyYXRpb24gPSBtZW51ID8gdGhpcy5fZ2V0QW5pbWF0aW9uRHVyYXRpb24obWVudSkgKyA1MCA6IDBcblxuICAgIGlmICghZHVyYXRpb24pIHtcbiAgICAgIG1vZGlmaWVyLmNhbGwodGhpcylcbiAgICAgIGNiLmNhbGwodGhpcylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3RyYW5zaXRpb25DYWxsYmFjayA9IGUgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBtZW51KSByZXR1cm5cbiAgICAgIHRoaXMuX3VuYmluZExheW91dEFuaW1hdGlvbkVuZEV2ZW50KClcbiAgICAgIGNiLmNhbGwodGhpcylcbiAgICB9XG5cbiAgICBUUkFOU19FVkVOVFMuZm9yRWFjaChlID0+IHtcbiAgICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihlLCB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2ssIGZhbHNlKVxuICAgIH0pXG5cbiAgICBtb2RpZmllci5jYWxsKHRoaXMpXG5cbiAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2suY2FsbCh0aGlzLCB7IHRhcmdldDogbWVudSB9KVxuICAgIH0sIGR1cmF0aW9uKVxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBSZW1vdmUgbGF5b3V0IHNpdmVuYXYgdG9nZ2xlIGFuaW1hdGlvbkVuZCBldmVudFxuICBfdW5iaW5kTGF5b3V0QW5pbWF0aW9uRW5kRXZlbnQoKSB7XG4gICAgY29uc3QgbWVudSA9IHRoaXMuZ2V0TWVudSgpXG5cbiAgICBpZiAodGhpcy5fdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RyYW5zaXRpb25DYWxsYmFja1RpbWVvdXQpXG4gICAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2tUaW1lb3V0ID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChtZW51ICYmIHRoaXMuX3RyYW5zaXRpb25DYWxsYmFjaykge1xuICAgICAgVFJBTlNfRVZFTlRTLmZvckVhY2goZSA9PiB7XG4gICAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2ssIGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNpdGlvbkNhbGxiYWNrKSB7XG4gICAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2sgPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBCaW5kIGRlbGF5ZWQgd2luZG93IHJlc2l6ZSBldmVudFxuICBfYmluZFdpbmRvd1Jlc2l6ZUV2ZW50KCkge1xuICAgIHRoaXMuX3VuYmluZFdpbmRvd1Jlc2l6ZUV2ZW50KClcblxuICAgIGNvbnN0IGNiID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2l6ZVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVvdXQpXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVRpbWVvdXQgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ3Jlc2l6ZScpXG4gICAgfVxuXG4gICAgdGhpcy5fcmVzaXplQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzaXplVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVvdXQpXG4gICAgICB0aGlzLl9yZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dChjYiwgdGhpcy5SRVNJWkVfREVMQVkpXG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUNhbGxiYWNrLCBmYWxzZSlcbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gVW5iaW5kIGRlbGF5ZWQgd2luZG93IHJlc2l6ZSBldmVudFxuICBfdW5iaW5kV2luZG93UmVzaXplRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuX3Jlc2l6ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVUaW1lb3V0KVxuICAgICAgdGhpcy5fcmVzaXplVGltZW91dCA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVzaXplQ2FsbGJhY2spIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVDYWxsYmFjaywgZmFsc2UpXG4gICAgICB0aGlzLl9yZXNpemVDYWxsYmFjayA9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgX2JpbmRNZW51TW91c2VFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX21lbnVNb3VzZUVudGVyICYmIHRoaXMuX21lbnVNb3VzZUxlYXZlICYmIHRoaXMuX3dpbmRvd1RvdWNoU3RhcnQpIHJldHVyblxuXG4gICAgY29uc3QgbGF5b3V0TWVudSA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpXG4gICAgaWYgKCFsYXlvdXRNZW51KSByZXR1cm4gdGhpcy5fdW5iaW5kTWVudU1vdXNlRXZlbnRzKClcblxuICAgIGlmICghdGhpcy5fbWVudU1vdXNlRW50ZXIpIHtcbiAgICAgIHRoaXMuX21lbnVNb3VzZUVudGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pc1NtYWxsU2NyZWVuKCkgfHxcbiAgICAgICAgICAhdGhpcy5faGFzQ2xhc3MoJ2xheW91dC1tZW51LWNvbGxhcHNlZCcpIHx8XG4gICAgICAgICAgdGhpcy5pc09mZmNhbnZhcygpIHx8XG4gICAgICAgICAgdGhpcy5faGFzQ2xhc3MoJ2xheW91dC10cmFuc2l0aW9uaW5nJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NldE1lbnVIb3ZlclN0YXRlKGZhbHNlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldE1lbnVIb3ZlclN0YXRlKHRydWUpXG4gICAgICB9XG4gICAgICBsYXlvdXRNZW51LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLl9tZW51TW91c2VFbnRlciwgZmFsc2UpXG4gICAgICBsYXlvdXRNZW51LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9tZW51TW91c2VFbnRlciwgZmFsc2UpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9tZW51TW91c2VMZWF2ZSkge1xuICAgICAgdGhpcy5fbWVudU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldE1lbnVIb3ZlclN0YXRlKGZhbHNlKVxuICAgICAgfVxuICAgICAgbGF5b3V0TWVudS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbWVudU1vdXNlTGVhdmUsIGZhbHNlKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5fd2luZG93VG91Y2hTdGFydCkge1xuICAgICAgdGhpcy5fd2luZG93VG91Y2hTdGFydCA9IGUgPT4ge1xuICAgICAgICBpZiAoIWUgfHwgIWUudGFyZ2V0IHx8ICF0aGlzLl9maW5kUGFyZW50KGUudGFyZ2V0LCAnLmxheW91dC1tZW51JykpIHtcbiAgICAgICAgICB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl93aW5kb3dUb3VjaFN0YXJ0LCB0cnVlKVxuICAgIH1cbiAgfSxcblxuICBfdW5iaW5kTWVudU1vdXNlRXZlbnRzKCkge1xuICAgIGlmICghdGhpcy5fbWVudU1vdXNlRW50ZXIgJiYgIXRoaXMuX21lbnVNb3VzZUxlYXZlICYmICF0aGlzLl93aW5kb3dUb3VjaFN0YXJ0KSByZXR1cm5cblxuICAgIGNvbnN0IGxheW91dE1lbnUgPSB0aGlzLmdldExheW91dE1lbnUoKVxuXG4gICAgaWYgKHRoaXMuX21lbnVNb3VzZUVudGVyKSB7XG4gICAgICBpZiAobGF5b3V0TWVudSkge1xuICAgICAgICBsYXlvdXRNZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLl9tZW51TW91c2VFbnRlciwgZmFsc2UpXG4gICAgICAgIGxheW91dE1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX21lbnVNb3VzZUVudGVyLCBmYWxzZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuX21lbnVNb3VzZUVudGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9tZW51TW91c2VMZWF2ZSkge1xuICAgICAgaWYgKGxheW91dE1lbnUpIHtcbiAgICAgICAgbGF5b3V0TWVudS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbWVudU1vdXNlTGVhdmUsIGZhbHNlKVxuICAgICAgfVxuICAgICAgdGhpcy5fbWVudU1vdXNlTGVhdmUgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dpbmRvd1RvdWNoU3RhcnQpIHtcbiAgICAgIGlmIChsYXlvdXRNZW51KSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5fd2luZG93VG91Y2hTdGFydCwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuX3dpbmRvd1RvdWNoU3RhcnQgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0TWVudUhvdmVyU3RhdGUoZmFsc2UpXG4gIH0sXG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqIE1ldGhvZHNcblxuICBzY3JvbGxUb0FjdGl2ZShhbmltYXRlID0gZmFsc2UpIHtcbiAgICB0aGlzLl9zY3JvbGxUb0FjdGl2ZShhbmltYXRlKVxuICB9LFxuXG4gIHN3aXBlSW4oZWwsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fc3dpcGVJbihlbCwgY2FsbGJhY2spXG4gIH0sXG5cbiAgc3dpcGVPdXQoZWwsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fc3dpcGVPdXQoZWwsIGNhbGxiYWNrKVxuICB9LFxuXG4gIG92ZXJsYXlUYXAoZWwsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fb3ZlcmxheVRhcChlbCwgY2FsbGJhY2spXG4gIH0sXG5cbiAgc2Nyb2xsUGFnZVRvKHRvLCBkdXJhdGlvbiA9IDUwMCkge1xuICAgIC8vIHQgPSBjdXJyZW50IHRpbWVcbiAgICAvLyBiID0gc3RhcnQgdmFsdWVcbiAgICAvLyBjID0gY2hhbmdlIGluIHZhbHVlXG4gICAgLy8gZCA9IGR1cmF0aW9uXG4gICAgY29uc3QgZWFzZUluT3V0UXVhZCA9ICh0LCBiLCBjLCBkKSA9PiB7XG4gICAgICB0IC89IGQgLyAyXG4gICAgICBpZiAodCA8IDEpIHJldHVybiAoYyAvIDIpICogdCAqIHQgKyBiXG4gICAgICB0IC09IDFcbiAgICAgIHJldHVybiAoLWMgLyAyKSAqICh0ICogKHQgLSAyKSAtIDEpICsgYlxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50XG5cbiAgICBpZiAodHlwZW9mIHRvID09PSAnc3RyaW5nJykge1xuICAgICAgdG8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRvKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHRvICE9PSAnbnVtYmVyJykge1xuICAgICAgdG8gPSB0by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gZWxlbWVudC5zY3JvbGxUb3BcbiAgICBjb25zdCBjaGFuZ2UgPSB0byAtIHN0YXJ0XG4gICAgY29uc3Qgc3RhcnREYXRlID0gK25ldyBEYXRlKClcbiAgICAvLyBjb25zdCBpbmNyZW1lbnQgPSAyMFxuXG4gICAgY29uc3QgYW5pbWF0ZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gK25ldyBEYXRlKClcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gY3VycmVudERhdGUgLSBzdGFydERhdGVcbiAgICAgIGNvbnN0IHZhbCA9IGVhc2VJbk91dFF1YWQoY3VycmVudFRpbWUsIHN0YXJ0LCBjaGFuZ2UsIGR1cmF0aW9uKVxuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB2YWxcbiAgICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlU2Nyb2xsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICAgICAgfVxuICAgIH1cbiAgICBhbmltYXRlU2Nyb2xsKClcbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gQ29sbGFwc2UgLyBleHBhbmQgbGF5b3V0XG4gIHNldENvbGxhcHNlZChjb2xsYXBzZWQgPSByZXF1aXJlZFBhcmFtKCdjb2xsYXBzZWQnKSwgYW5pbWF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBsYXlvdXRNZW51ID0gdGhpcy5nZXRMYXlvdXRNZW51KClcblxuICAgIGlmICghbGF5b3V0TWVudSkgcmV0dXJuXG5cbiAgICB0aGlzLl91bmJpbmRMYXlvdXRBbmltYXRpb25FbmRFdmVudCgpXG5cbiAgICBpZiAoYW5pbWF0ZSAmJiB0aGlzLl9zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSkge1xuICAgICAgdGhpcy5fYWRkQ2xhc3MoJ2xheW91dC10cmFuc2l0aW9uaW5nJylcbiAgICAgIGlmIChjb2xsYXBzZWQpIHRoaXMuX3NldE1lbnVIb3ZlclN0YXRlKGZhbHNlKVxuXG4gICAgICB0aGlzLl9iaW5kTGF5b3V0QW5pbWF0aW9uRW5kRXZlbnQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAvLyBDb2xsYXBzZSAvIEV4cGFuZFxuICAgICAgICAgIHRoaXMuX3NldENvbGxhcHNlZChjb2xsYXBzZWQpXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVDbGFzcygnbGF5b3V0LXRyYW5zaXRpb25pbmcnKVxuICAgICAgICAgIHRoaXMuX3RyaWdnZXJXaW5kb3dFdmVudCgncmVzaXplJylcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ3RvZ2dsZScpXG4gICAgICAgICAgdGhpcy5fc2V0TWVudUhvdmVyU3RhdGUoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYWRkQ2xhc3MoJ2xheW91dC1uby10cmFuc2l0aW9uJylcbiAgICAgIGlmIChjb2xsYXBzZWQpIHRoaXMuX3NldE1lbnVIb3ZlclN0YXRlKGZhbHNlKVxuXG4gICAgICAvLyBDb2xsYXBzZSAvIEV4cGFuZFxuICAgICAgdGhpcy5fc2V0Q29sbGFwc2VkKGNvbGxhcHNlZClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUNsYXNzKCdsYXlvdXQtbm8tdHJhbnNpdGlvbicpXG4gICAgICAgIHRoaXMuX3RyaWdnZXJXaW5kb3dFdmVudCgncmVzaXplJylcbiAgICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCd0b2dnbGUnKVxuICAgICAgICB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcbiAgICAgIH0sIDEpXG4gICAgfVxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBUb2dnbGUgbGF5b3V0XG4gIHRvZ2dsZUNvbGxhcHNlZChhbmltYXRlID0gdHJ1ZSkge1xuICAgIHRoaXMuc2V0Q29sbGFwc2VkKCF0aGlzLmlzQ29sbGFwc2VkKCksIGFuaW1hdGUpXG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIFNldCBsYXlvdXQgcG9zaXRpb25pbmdcbiAgc2V0UG9zaXRpb24oZml4ZWQgPSByZXF1aXJlZFBhcmFtKCdmaXhlZCcpLCBvZmZjYW52YXMgPSByZXF1aXJlZFBhcmFtKCdvZmZjYW52YXMnKSkge1xuICAgIHRoaXMuX3JlbW92ZUNsYXNzKCdsYXlvdXQtbWVudS1vZmZjYW52YXMgbGF5b3V0LW1lbnUtZml4ZWQgbGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzJylcblxuICAgIGlmICghZml4ZWQgJiYgb2ZmY2FudmFzKSB7XG4gICAgICB0aGlzLl9hZGRDbGFzcygnbGF5b3V0LW1lbnUtb2ZmY2FudmFzJylcbiAgICB9IGVsc2UgaWYgKGZpeGVkICYmICFvZmZjYW52YXMpIHtcbiAgICAgIHRoaXMuX2FkZENsYXNzKCdsYXlvdXQtbWVudS1maXhlZCcpXG4gICAgICB0aGlzLl9yZWRyYXdMYXlvdXRNZW51KClcbiAgICB9IGVsc2UgaWYgKGZpeGVkICYmIG9mZmNhbnZhcykge1xuICAgICAgdGhpcy5fYWRkQ2xhc3MoJ2xheW91dC1tZW51LWZpeGVkLW9mZmNhbnZhcycpXG4gICAgICB0aGlzLl9yZWRyYXdMYXlvdXRNZW51KClcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH0sXG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqIEdldHRlcnNcblxuICBnZXRMYXlvdXRNZW51KCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW1lbnUnKVxuICB9LFxuXG4gIGdldE1lbnUoKSB7XG4gICAgY29uc3QgbGF5b3V0TWVudSA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpXG5cbiAgICBpZiAoIWxheW91dE1lbnUpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gIXRoaXMuX2hhc0NsYXNzKCdtZW51JywgbGF5b3V0TWVudSkgPyBsYXlvdXRNZW51LnF1ZXJ5U2VsZWN0b3IoJy5tZW51JykgOiBsYXlvdXRNZW51XG4gIH0sXG5cbiAgZ2V0TGF5b3V0TmF2YmFyKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW5hdmJhcicpXG4gIH0sXG5cbiAgZ2V0TGF5b3V0Rm9vdGVyKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGVudC1mb290ZXInKVxuICB9LFxuXG4gIGdldExheW91dENvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1wYWdlJylcbiAgfSxcblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICogU2V0dGVyc1xuXG4gIHNldE5hdmJhckZpeGVkKGZpeGVkID0gcmVxdWlyZWRQYXJhbSgnZml4ZWQnKSkge1xuICAgIHRoaXNbZml4ZWQgPyAnX2FkZENsYXNzJyA6ICdfcmVtb3ZlQ2xhc3MnXSgnbGF5b3V0LW5hdmJhci1maXhlZCcpXG4gICAgdGhpcy51cGRhdGUoKVxuICB9LFxuXG4gIHNldEZvb3RlckZpeGVkKGZpeGVkID0gcmVxdWlyZWRQYXJhbSgnZml4ZWQnKSkge1xuICAgIHRoaXNbZml4ZWQgPyAnX2FkZENsYXNzJyA6ICdfcmVtb3ZlQ2xhc3MnXSgnbGF5b3V0LWZvb3Rlci1maXhlZCcpXG4gICAgdGhpcy51cGRhdGUoKVxuICB9LFxuXG4gIHNldEZsaXBwZWQocmV2ZXJzZWQgPSByZXF1aXJlZFBhcmFtKCdyZXZlcnNlZCcpKSB7XG4gICAgdGhpc1tyZXZlcnNlZCA/ICdfYWRkQ2xhc3MnIDogJ19yZW1vdmVDbGFzcyddKCdsYXlvdXQtbWVudS1mbGlwcGVkJylcbiAgfSxcblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICogVXBkYXRlXG5cbiAgdXBkYXRlKCkge1xuICAgIGlmIChcbiAgICAgICh0aGlzLmdldExheW91dE5hdmJhcigpICYmXG4gICAgICAgICgoIXRoaXMuaXNTbWFsbFNjcmVlbigpICYmIHRoaXMuaXNMYXlvdXROYXZiYXJGdWxsKCkgJiYgdGhpcy5pc0ZpeGVkKCkpIHx8IHRoaXMuaXNOYXZiYXJGaXhlZCgpKSkgfHxcbiAgICAgICh0aGlzLmdldExheW91dEZvb3RlcigpICYmIHRoaXMuaXNGb290ZXJGaXhlZCgpKVxuICAgICkge1xuICAgICAgdGhpcy5fdXBkYXRlSW5saW5lU3R5bGUodGhpcy5fZ2V0TmF2YmFySGVpZ2h0KCksIHRoaXMuX2dldEZvb3RlckhlaWdodCgpKVxuICAgIH1cblxuICAgIHRoaXMuX2JpbmRNZW51TW91c2VFdmVudHMoKVxuICB9LFxuXG4gIHNldEF1dG9VcGRhdGUoZW5hYmxlID0gcmVxdWlyZWRQYXJhbSgnZW5hYmxlJykpIHtcbiAgICBpZiAoZW5hYmxlICYmICF0aGlzLl9hdXRvVXBkYXRlKSB7XG4gICAgICB0aGlzLm9uKCdyZXNpemUuSGVscGVyczphdXRvVXBkYXRlJywgKCkgPT4gdGhpcy51cGRhdGUoKSlcbiAgICAgIHRoaXMuX2F1dG9VcGRhdGUgPSB0cnVlXG4gICAgfSBlbHNlIGlmICghZW5hYmxlICYmIHRoaXMuX2F1dG9VcGRhdGUpIHtcbiAgICAgIHRoaXMub2ZmKCdyZXNpemUuSGVscGVyczphdXRvVXBkYXRlJylcbiAgICAgIHRoaXMuX2F1dG9VcGRhdGUgPSBmYWxzZVxuICAgIH1cbiAgfSxcblxuICAvLyBVcGRhdGUgY3VzdG9tIG9wdGlvbiBiYXNlZCBvbiBlbGVtZW50XG4gIHVwZGF0ZUN1c3RvbU9wdGlvbkNoZWNrKGVsKSB7XG4gICAgaWYgKGVsLmNoZWNrZWQpIHtcbiAgICAgIC8vIElmIGN1c3RvbSBvcHRpb24gZWxlbWVudCBpcyByYWRpbywgcmVtb3ZlIGNoZWNrZWQgZnJvbSB0aGUgc2libGluZ3MgKGNsb3Nlc3QgYC5yb3dgKVxuICAgICAgaWYgKGVsLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tUmFkaW9PcHRpb25MaXN0ID0gW10uc2xpY2UuY2FsbChlbC5jbG9zZXN0KCcucm93JykucXVlcnlTZWxlY3RvckFsbCgnLmN1c3RvbS1vcHRpb24nKSlcbiAgICAgICAgY3VzdG9tUmFkaW9PcHRpb25MaXN0Lm1hcChmdW5jdGlvbiAoY3VzdG9tUmFkaW9PcHRpb25FTCkge1xuICAgICAgICAgIGN1c3RvbVJhZGlvT3B0aW9uRUwuY2xvc2VzdCgnLmN1c3RvbS1vcHRpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdjaGVja2VkJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVsLmNsb3Nlc3QoJy5jdXN0b20tb3B0aW9uJykuY2xhc3NMaXN0LmFkZCgnY2hlY2tlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsb3Nlc3QoJy5jdXN0b20tb3B0aW9uJykuY2xhc3NMaXN0LnJlbW92ZSgnY2hlY2tlZCcpXG4gICAgfVxuICB9LFxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKiBUZXN0c1xuXG4gIGlzUnRsKCkge1xuICAgIHJldHVybiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuZ2V0QXR0cmlidXRlKCdkaXInKSA9PT0gJ3J0bCcgfHxcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5nZXRBdHRyaWJ1dGUoJ2RpcicpID09PSAncnRsJ1xuICAgIClcbiAgfSxcblxuICBpc01vYmlsZURldmljZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdJRU1vYmlsZScpICE9PSAtMVxuICB9LFxuXG4gIGlzU21hbGxTY3JlZW4oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCkgPCB0aGlzLkxBWU9VVF9CUkVBS1BPSU5UXG4gICAgKVxuICB9LFxuXG4gIGlzTGF5b3V0TmF2YmFyRnVsbCgpIHtcbiAgICByZXR1cm4gISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LXdyYXBwZXIubGF5b3V0LW5hdmJhci1mdWxsJylcbiAgfSxcblxuICBpc0NvbGxhcHNlZCgpIHtcbiAgICBpZiAodGhpcy5pc1NtYWxsU2NyZWVuKCkpIHtcbiAgICAgIHJldHVybiAhdGhpcy5faGFzQ2xhc3MoJ2xheW91dC1tZW51LWV4cGFuZGVkJylcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hhc0NsYXNzKCdsYXlvdXQtbWVudS1jb2xsYXBzZWQnKVxuICB9LFxuXG4gIGlzRml4ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0NsYXNzKCdsYXlvdXQtbWVudS1maXhlZCBsYXlvdXQtbWVudS1maXhlZC1vZmZjYW52YXMnKVxuICB9LFxuXG4gIGlzT2ZmY2FudmFzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNDbGFzcygnbGF5b3V0LW1lbnUtb2ZmY2FudmFzIGxheW91dC1tZW51LWZpeGVkLW9mZmNhbnZhcycpXG4gIH0sXG5cbiAgaXNOYXZiYXJGaXhlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5faGFzQ2xhc3MoJ2xheW91dC1uYXZiYXItZml4ZWQnKSB8fCAoIXRoaXMuaXNTbWFsbFNjcmVlbigpICYmIHRoaXMuaXNGaXhlZCgpICYmIHRoaXMuaXNMYXlvdXROYXZiYXJGdWxsKCkpXG4gICAgKVxuICB9LFxuXG4gIGlzRm9vdGVyRml4ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0NsYXNzKCdsYXlvdXQtZm9vdGVyLWZpeGVkJylcbiAgfSxcblxuICBpc0ZsaXBwZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0NsYXNzKCdsYXlvdXQtbWVudS1mbGlwcGVkJylcbiAgfSxcblxuICBpc0xpZ2h0U3R5bGUoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2xpZ2h0LXN0eWxlJylcbiAgfSxcblxuICBpc0RhcmtTdHlsZSgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZGFyay1zdHlsZScpXG4gIH0sXG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqIEV2ZW50c1xuXG4gIG9uKGV2ZW50ID0gcmVxdWlyZWRQYXJhbSgnZXZlbnQnKSwgY2FsbGJhY2sgPSByZXF1aXJlZFBhcmFtKCdjYWxsYmFjaycpKSB7XG4gICAgY29uc3QgW19ldmVudF0gPSBldmVudC5zcGxpdCgnLicpXG4gICAgbGV0IFssIC4uLm5hbWVzcGFjZV0gPSBldmVudC5zcGxpdCgnLicpXG4gICAgLy8gbGV0IFtfZXZlbnQsIC4uLm5hbWVzcGFjZV0gPSBldmVudC5zcGxpdCgnLicpXG4gICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlLmpvaW4oJy4nKSB8fCBudWxsXG5cbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaCh7IGV2ZW50OiBfZXZlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2sgfSlcbiAgfSxcblxuICBvZmYoZXZlbnQgPSByZXF1aXJlZFBhcmFtKCdldmVudCcpKSB7XG4gICAgY29uc3QgW19ldmVudF0gPSBldmVudC5zcGxpdCgnLicpXG4gICAgbGV0IFssIC4uLm5hbWVzcGFjZV0gPSBldmVudC5zcGxpdCgnLicpXG4gICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlLmpvaW4oJy4nKSB8fCBudWxsXG5cbiAgICB0aGlzLl9saXN0ZW5lcnNcbiAgICAgIC5maWx0ZXIobGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgPT09IF9ldmVudCAmJiBsaXN0ZW5lci5uYW1lc3BhY2UgPT09IG5hbWVzcGFjZSlcbiAgICAgIC5mb3JFYWNoKGxpc3RlbmVyID0+IHRoaXMuX2xpc3RlbmVycy5zcGxpY2UodGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpLCAxKSlcbiAgfSxcblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICogTGlmZSBjeWNsZVxuXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSByZXR1cm5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWVcblxuICAgIC8vIEluaXRpYWxpemUgYHN0eWxlYCBlbGVtZW50XG4gICAgdGhpcy5fdXBkYXRlSW5saW5lU3R5bGUoMClcblxuICAgIC8vIEJpbmQgd2luZG93IHJlc2l6ZSBldmVudFxuICAgIHRoaXMuX2JpbmRXaW5kb3dSZXNpemVFdmVudCgpXG5cbiAgICAvLyBCaW5kIGluaXQgZXZlbnRcbiAgICB0aGlzLm9mZignaW5pdC5fSGVscGVycycpXG4gICAgdGhpcy5vbignaW5pdC5fSGVscGVycycsICgpID0+IHtcbiAgICAgIHRoaXMub2ZmKCdyZXNpemUuX0hlbHBlcnM6cmVkcmF3TWVudScpXG4gICAgICB0aGlzLm9uKCdyZXNpemUuX0hlbHBlcnM6cmVkcmF3TWVudScsICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICB0aGlzLmlzU21hbGxTY3JlZW4oKSAmJiAhdGhpcy5pc0NvbGxhcHNlZCgpICYmIHRoaXMuX3JlZHJhd0xheW91dE1lbnUoKVxuICAgICAgfSlcblxuICAgICAgLy8gRm9yY2UgcmVwYWludCBpbiBJRSAxMFxuICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPT09ICdudW1iZXInICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDExKSB7XG4gICAgICAgIHRoaXMub2ZmKCdyZXNpemUuX0hlbHBlcnM6aWUxMFJlcGFpbnRCb2R5JylcbiAgICAgICAgdGhpcy5vbigncmVzaXplLl9IZWxwZXJzOmllMTBSZXBhaW50Qm9keScsICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc0ZpeGVkKCkpIHJldHVyblxuICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wIH0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgICAgICAvLyBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodFxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnaW5pdCcpXG4gIH0sXG5cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSByZXR1cm5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IGZhbHNlXG5cbiAgICB0aGlzLl9yZW1vdmVDbGFzcygnbGF5b3V0LXRyYW5zaXRpb25pbmcnKVxuICAgIHRoaXMuX3JlbW92ZUlubGluZVN0eWxlKClcbiAgICB0aGlzLl91bmJpbmRMYXlvdXRBbmltYXRpb25FbmRFdmVudCgpXG4gICAgdGhpcy5fdW5iaW5kV2luZG93UmVzaXplRXZlbnQoKVxuICAgIHRoaXMuX3VuYmluZE1lbnVNb3VzZUV2ZW50cygpXG4gICAgdGhpcy5zZXRBdXRvVXBkYXRlKGZhbHNlKVxuXG4gICAgdGhpcy5vZmYoJ2luaXQuX0hlbHBlcnMnKVxuXG4gICAgLy8gUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgZXhjZXB0IGBpbml0YFxuICAgIHRoaXMuX2xpc3RlbmVyc1xuICAgICAgLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCAhPT0gJ2luaXQnKVxuICAgICAgLmZvckVhY2gobGlzdGVuZXIgPT4gdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lciksIDEpKVxuICB9LFxuXG4gIC8vIC0tLVxuICAvLyBJbml0IFBhc3N3b3JkIFRvZ2dsZVxuICBpbml0UGFzc3dvcmRUb2dnbGUoKSB7XG4gICAgY29uc3QgdG9nZ2xlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtLXBhc3N3b3JkLXRvZ2dsZSBpJylcbiAgICBpZiAodHlwZW9mIHRvZ2dsZXIgIT09ICd1bmRlZmluZWQnICYmIHRvZ2dsZXIgIT09IG51bGwpIHtcbiAgICAgIHRvZ2dsZXIuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgY29uc3QgZm9ybVBhc3N3b3JkVG9nZ2xlID0gZWwuY2xvc2VzdCgnLmZvcm0tcGFzc3dvcmQtdG9nZ2xlJylcbiAgICAgICAgICBjb25zdCBmb3JtUGFzc3dvcmRUb2dnbGVJY29uID0gZm9ybVBhc3N3b3JkVG9nZ2xlLnF1ZXJ5U2VsZWN0b3IoJ2knKVxuICAgICAgICAgIGNvbnN0IGZvcm1QYXNzd29yZFRvZ2dsZUlucHV0ID0gZm9ybVBhc3N3b3JkVG9nZ2xlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcblxuICAgICAgICAgIGlmIChmb3JtUGFzc3dvcmRUb2dnbGVJbnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBmb3JtUGFzc3dvcmRUb2dnbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAncGFzc3dvcmQnKVxuICAgICAgICAgICAgZm9ybVBhc3N3b3JkVG9nZ2xlSWNvbi5jbGFzc0xpc3QucmVwbGFjZSgnbWRpLWV5ZS1vdXRsaW5lJywgJ21kaS1leWUtb2ZmLW91dGxpbmUnKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybVBhc3N3b3JkVG9nZ2xlSW5wdXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICAgIGZvcm1QYXNzd29yZFRvZ2dsZUlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0JylcbiAgICAgICAgICAgIGZvcm1QYXNzd29yZFRvZ2dsZUljb24uY2xhc3NMaXN0LnJlcGxhY2UoJ21kaS1leWUtb2ZmLW91dGxpbmUnLCAnbWRpLWV5ZS1vdXRsaW5lJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICAvLy0tXG4gIC8vIEluaXQgY3VzdG9tIG9wdGlvbiBjaGVja1xuICBpbml0Q3VzdG9tT3B0aW9uQ2hlY2soKSB7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzXG5cbiAgICBjb25zdCBjdXN0b3BPcHRpb25MaXN0ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3VzdG9tLW9wdGlvbiAuZm9ybS1jaGVjay1pbnB1dCcpKVxuICAgIGN1c3RvcE9wdGlvbkxpc3QubWFwKGZ1bmN0aW9uIChjdXN0b21PcHRpb25FTCkge1xuICAgICAgLy8gVXBkYXRlIGN1c3RvbSBvcHRpb25zIGNoZWNrIG9uIHBhZ2UgbG9hZFxuICAgICAgX3RoaXMudXBkYXRlQ3VzdG9tT3B0aW9uQ2hlY2soY3VzdG9tT3B0aW9uRUwpXG5cbiAgICAgIC8vIFVwZGF0ZSBjdXN0b20gb3B0aW9ucyBjaGVjayBvbiBjbGlja1xuICAgICAgY3VzdG9tT3B0aW9uRUwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICAgICAgX3RoaXMudXBkYXRlQ3VzdG9tT3B0aW9uQ2hlY2soY3VzdG9tT3B0aW9uRUwpXG4gICAgICB9KVxuICAgIH0pXG4gIH0sXG5cbiAgLy8gLS0tXG4gIC8vIEluaXQgU3BlZWNoIFRvIFRleHRcbiAgaW5pdFNwZWVjaFRvVGV4dCgpIHtcbiAgICBjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fCB3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb25cbiAgICBjb25zdCBzcGVlY2hUb1RleHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3BlZWNoLXRvLXRleHQnKVxuICAgIGlmIChTcGVlY2hSZWNvZ25pdGlvbiAhPT0gdW5kZWZpbmVkICYmIFNwZWVjaFJlY29nbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIHNwZWVjaFRvVGV4dCAhPT0gJ3VuZGVmaW5lZCcgJiYgc3BlZWNoVG9UZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlY29nbml0aW9uID0gbmV3IFNwZWVjaFJlY29nbml0aW9uKClcbiAgICAgICAgY29uc3QgdG9nZ2xlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zcGVlY2gtdG8tdGV4dCBpJylcbiAgICAgICAgdG9nZ2xlci5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICBsZXQgbGlzdGVuaW5nID0gZmFsc2VcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGVsLmNsb3Nlc3QoJy5pbnB1dC1ncm91cCcpLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRyb2wnKS5mb2N1cygpXG4gICAgICAgICAgICByZWNvZ25pdGlvbi5vbnNwZWVjaHN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5pbmcgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGlzdGVuaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZWNvZ25pdGlvbi5zdGFydCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWNvZ25pdGlvbi5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5pbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVjb2duaXRpb24ub25yZXN1bHQgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgIGVsLmNsb3Nlc3QoJy5pbnB1dC1ncm91cCcpLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRyb2wnKS52YWx1ZSA9IGV2ZW50LnJlc3VsdHNbMF1bMF0udHJhbnNjcmlwdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVjb2duaXRpb24ub25zcGVlY2hlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3RlbmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIHJlY29nbml0aW9uLnN0b3AoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFRhYnMgYW5pbWF0aW9uXG4gIG5hdlRhYnNBbmltYXRpb24oKSB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm5hdi10YWJzJykuZm9yRWFjaCh0YWIgPT4ge1xuICAgICAgbGV0IHNsaWRlciA9IHRhYi5xdWVyeVNlbGVjdG9yKCcudGFiLXNsaWRlcicpXG4gICAgICBpZiAoIXNsaWRlcikge1xuICAgICAgICBjb25zdCBzbGlkZXJFbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICAgICAgc2xpZGVyRWxlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGFiLXNsaWRlcicpXG5cbiAgICAgICAgc2xpZGVyID0gdGFiLmFwcGVuZENoaWxkKHNsaWRlckVsZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0YWIuY2xvc2VzdCgnLm5hdi1hbGlnbi1sZWZ0JykgfHwgdGFiLmNsb3Nlc3QoJy5uYXYtYWxpZ24tcmlnaHQnKVxuICAgICAgY29uc3Qgc2V0U2xpZGVyID0gYWN0aXZlVGFiID0+IHtcbiAgICAgICAgY29uc3QgdGFic0VsID0gYWN0aXZlVGFiLnBhcmVudEVsZW1lbnRcbiAgICAgICAgY29uc3QgdGFic1JlY3QgPSB0YWJzRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgY29uc3QgYWN0aXZlVGFiUmVjdCA9IGFjdGl2ZVRhYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBjb25zdCBzbGlkZXJTdGFydCA9IGFjdGl2ZVRhYlJlY3QueCAtIHRhYnNSZWN0LnhcbiAgICAgICAgY29uc3QgaXNCb3R0b20gPSB0YWIuY2xvc2VzdCgnLm5hdi1hbGlnbi1ib3R0b20nKVxuICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xuICAgICAgICAgIHNsaWRlci5zdHlsZS50b3AgPSBhY3RpdmVUYWJSZWN0LnkgLSB0YWJzUmVjdC55ICsgJ3B4J1xuICAgICAgICAgIHNsaWRlci5zdHlsZVt0YWIuY2xvc2VzdCgnLm5hdi1hbGlnbi1yaWdodCcpID8gJ2luc2V0LWlubGluZS1zdGFydCcgOiAnaW5zZXQtaW5saW5lLWVuZCddID0gMFxuICAgICAgICAgIHNsaWRlci5zdHlsZS5oZWlnaHQgPSBhY3RpdmVUYWJSZWN0LmhlaWdodCArICdweCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGlkZXIuc3R5bGUubGVmdCA9IHNsaWRlclN0YXJ0ICsgJ3B4J1xuICAgICAgICAgIHNsaWRlci5zdHlsZS53aWR0aCA9IGFjdGl2ZVRhYlJlY3Qud2lkdGggKyAncHgnXG4gICAgICAgICAgaWYgKCFpc0JvdHRvbSkge1xuICAgICAgICAgICAgc2xpZGVyLnN0eWxlLmJvdHRvbSA9IDBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE9uIGNsaWNrXG4gICAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgIC8vIFRvIGF2b2lkIGFjdGl2ZSBzdGF0ZSBmb3IgZGlzYWJsZWQgZWxlbWVudFxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5uYXYtaXRlbSAuYWN0aXZlJykpIHtcbiAgICAgICAgICBzZXRTbGlkZXIoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5uYXYtaXRlbScpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLy8gT24gTG9hZFxuICAgICAgc2V0U2xpZGVyKHRhYi5xdWVyeVNlbGVjdG9yKCcubmF2LWxpbmsuYWN0aXZlJykuY2xvc2VzdCgnLm5hdi1pdGVtJykpXG4gICAgfSlcbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gSW5pdCBOYXZiYXIgRHJvcGRvd24gKGkuZSBub3RpZmljYXRpb24pIFBlcmZlY3RTY3JvbGxiYXJcbiAgaW5pdE5hdmJhckRyb3Bkb3duU2Nyb2xsYmFyKCkge1xuICAgIGNvbnN0IHNjcm9sbGJhckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXZiYXItZHJvcGRvd24gLnNjcm9sbGFibGUtY29udGFpbmVyJylcbiAgICBjb25zdCB7IFBlcmZlY3RTY3JvbGxiYXIgfSA9IHdpbmRvd1xuXG4gICAgaWYgKFBlcmZlY3RTY3JvbGxiYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzY3JvbGxiYXJDb250YWluZXIgIT09ICd1bmRlZmluZWQnICYmIHNjcm9sbGJhckNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgICBzY3JvbGxiYXJDb250YWluZXIuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgICAgICAgIG5ldyBQZXJmZWN0U2Nyb2xsYmFyKGVsLCB7XG4gICAgICAgICAgICB3aGVlbFByb3BhZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIEFqYXggQ2FsbCBQcm9taXNlXG4gIGFqYXhDYWxsKHVybCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybClcbiAgICAgIHJlcS5vbmxvYWQgPSAoKSA9PiAocmVxLnN0YXR1cyA9PT0gMjAwID8gcmVzb2x2ZShyZXEucmVzcG9uc2UpIDogcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0KSkpXG4gICAgICByZXEub25lcnJvciA9IGUgPT4gcmVqZWN0KEVycm9yKGBOZXR3b3JrIEVycm9yOiAke2V9YCkpXG4gICAgICByZXEuc2VuZCgpXG4gICAgfSlcbiAgfSxcblxuICAvLyAtLS1cbiAgLy8gU2lkZWJhclRvZ2dsZSAoVXNlZCBpbiBBcHBzKVxuICBpbml0U2lkZWJhclRvZ2dsZSgpIHtcbiAgICBjb25zdCBzaWRlYmFyVG9nZ2xlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWJzLXRvZ2dsZT1cInNpZGViYXJcIl0nKVxuXG4gICAgc2lkZWJhclRvZ2dsZXIuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpXG4gICAgICAgIGNvbnN0IG92ZXJsYXkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3ZlcmxheScpXG4gICAgICAgIGNvbnN0IGFwcE92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXBwLW92ZXJsYXknKVxuICAgICAgICBjb25zdCB0YXJnZXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGFyZ2V0KVxuXG4gICAgICAgIHRhcmdldEVsLmZvckVhY2godGVsID0+IHtcbiAgICAgICAgICB0ZWwuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIG92ZXJsYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBvdmVybGF5ICE9PSBudWxsICYmXG4gICAgICAgICAgICBvdmVybGF5ICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGFwcE92ZXJsYXkgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGVsLmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpKSB7XG4gICAgICAgICAgICAgIGFwcE92ZXJsYXlbMF0uY2xhc3NMaXN0LmFkZCgnc2hvdycpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhcHBPdmVybGF5WzBdLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBwT3ZlcmxheVswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4ge1xuICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXG4gICAgICAgICAgICAgIHRlbC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vICogSW5pdGlhbGl6YXRpb25cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIEhlbHBlcnMuaW5pdCgpXG5cbiAgaWYgKEhlbHBlcnMuaXNNb2JpbGVEZXZpY2UoKSAmJiB3aW5kb3cuY2hyb21lKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xheW91dC1tZW51LTEwMHZoJylcbiAgfVxuXG4gIC8vIFVwZGF0ZSBsYXlvdXQgYWZ0ZXIgcGFnZSBsb2FkXG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSBIZWxwZXJzLnVwZGF0ZSgpXG4gIGVsc2VcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gb25Db250ZW50TG9hZGVkKCkge1xuICAgICAgSGVscGVycy51cGRhdGUoKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIG9uQ29udGVudExvYWRlZClcbiAgICB9KVxufVxuXG4vLyAtLS1cbmV4cG9ydCB7IEhlbHBlcnMgfVxuIl0sIm5hbWVzIjpbIlRSQU5TX0VWRU5UUyIsIlRSQU5TX1BST1BFUlRJRVMiLCJJTkxJTkVfU1RZTEVTIiwicmVxdWlyZWRQYXJhbSIsIm5hbWUiLCJFcnJvciIsIkhlbHBlcnMiLCJST09UX0VMIiwid2luZG93IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJMQVlPVVRfQlJFQUtQT0lOVCIsIlJFU0laRV9ERUxBWSIsIm1lbnVQc1Njcm9sbCIsIm1haW5NZW51IiwiX2N1clN0eWxlIiwiX3N0eWxlRWwiLCJfcmVzaXplVGltZW91dCIsIl9yZXNpemVDYWxsYmFjayIsIl90cmFuc2l0aW9uQ2FsbGJhY2siLCJfdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dCIsIl9saXN0ZW5lcnMiLCJfaW5pdGlhbGl6ZWQiLCJfYXV0b1VwZGF0ZSIsIl9sYXN0V2luZG93SGVpZ2h0IiwiX3Njcm9sbFRvQWN0aXZlIiwiYW5pbWF0ZSIsImR1cmF0aW9uIiwibGF5b3V0TWVudSIsImdldExheW91dE1lbnUiLCJhY3RpdmVFbCIsInF1ZXJ5U2VsZWN0b3IiLCJlYXNlSW5PdXRRdWFkIiwidCIsImIiLCJjIiwiZCIsImVsZW1lbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJzY3JvbGxUb3AiLCJwYXJzZUludCIsImNsaWVudEhlaWdodCIsInN0YXJ0IiwiY2hhbmdlIiwic3RhcnREYXRlIiwiRGF0ZSIsImFuaW1hdGVTY3JvbGwiLCJjdXJyZW50RGF0ZSIsImN1cnJlbnRUaW1lIiwidmFsIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3N3aXBlSW4iLCJ0YXJnZXRFbCIsImNhbGxiYWNrIiwiSGFtbWVyIiwic3dpcGVJbkVsZW1lbnQiLCJoYW1tZXJJbnN0YW5jZSIsIm9uIiwiX3N3aXBlT3V0Iiwic2V0VGltZW91dCIsInN3aXBlT3V0RWxlbWVudCIsImdldCIsInNldCIsImRpcmVjdGlvbiIsIkRJUkVDVElPTl9BTEwiLCJ0aHJlc2hvbGQiLCJfb3ZlcmxheVRhcCIsInN3aXBlT3V0T3ZlcmxheUVsZW1lbnQiLCJfYWRkQ2xhc3MiLCJjbHMiLCJlbCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJlIiwic3BsaXQiLCJjbGFzc0xpc3QiLCJhZGQiLCJfcmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJfdG9nZ2xlQ2xhc3MiLCJjbHMxIiwiY2xzMiIsImNvbnRhaW5zIiwicmVwbGFjZSIsIl9oYXNDbGFzcyIsInJlc3VsdCIsIl9maW5kUGFyZW50IiwidGFnTmFtZSIsInRvVXBwZXJDYXNlIiwicGFyZW50Tm9kZSIsIl90cmlnZ2VyV2luZG93RXZlbnQiLCJjcmVhdGVFdmVudCIsImV2ZW50IiwiRXZlbnQiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZmlyZUV2ZW50IiwiY3JlYXRlRXZlbnRPYmplY3QiLCJfdHJpZ2dlckV2ZW50IiwiZmlsdGVyIiwibGlzdGVuZXIiLCJjYWxsIiwiX3VwZGF0ZUlubGluZVN0eWxlIiwibmF2YmFySGVpZ2h0IiwiZm9vdGVySGVpZ2h0IiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJuZXdTdHlsZSIsInRleHRDb250ZW50IiwiX3JlbW92ZUlubGluZVN0eWxlIiwicmVtb3ZlQ2hpbGQiLCJfcmVkcmF3TGF5b3V0TWVudSIsImlubmVyIiwicGFnZVNjcm9sbFRvcCIsInN0eWxlIiwiZGlzcGxheSIsIl9zdXBwb3J0c1RyYW5zaXRpb25FbmQiLCJRVW5pdCIsImJvZHkiLCJldm50IiwiX2dldE5hdmJhckhlaWdodCIsImxheW91dE5hdmJhciIsImdldExheW91dE5hdmJhciIsImlzU21hbGxTY3JlZW4iLCJoZWlnaHQiLCJjbG9uZWRFbCIsImNsb25lTm9kZSIsImlkIiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbnNlcnRCZWZvcmUiLCJfZ2V0Rm9vdGVySGVpZ2h0IiwibGF5b3V0Rm9vdGVyIiwiZ2V0TGF5b3V0Rm9vdGVyIiwiX2dldEFuaW1hdGlvbkR1cmF0aW9uIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRyYW5zaXRpb25EdXJhdGlvbiIsInBhcnNlRmxvYXQiLCJpbmRleE9mIiwiX3NldE1lbnVIb3ZlclN0YXRlIiwiaG92ZXJlZCIsIl9zZXRDb2xsYXBzZWQiLCJjb2xsYXBzZWQiLCJfYmluZExheW91dEFuaW1hdGlvbkVuZEV2ZW50IiwibW9kaWZpZXIiLCJjYiIsIm1lbnUiLCJnZXRNZW51IiwidGFyZ2V0IiwiX3VuYmluZExheW91dEFuaW1hdGlvbkVuZEV2ZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsZWFyVGltZW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfYmluZFdpbmRvd1Jlc2l6ZUV2ZW50IiwiX3VuYmluZFdpbmRvd1Jlc2l6ZUV2ZW50IiwiX2JpbmRNZW51TW91c2VFdmVudHMiLCJfbWVudU1vdXNlRW50ZXIiLCJfbWVudU1vdXNlTGVhdmUiLCJfd2luZG93VG91Y2hTdGFydCIsIl91bmJpbmRNZW51TW91c2VFdmVudHMiLCJpc09mZmNhbnZhcyIsInNjcm9sbFRvQWN0aXZlIiwic3dpcGVJbiIsInN3aXBlT3V0Iiwib3ZlcmxheVRhcCIsInNjcm9sbFBhZ2VUbyIsInRvIiwic2Nyb2xsaW5nRWxlbWVudCIsInNldENvbGxhcHNlZCIsInRvZ2dsZUNvbGxhcHNlZCIsImlzQ29sbGFwc2VkIiwic2V0UG9zaXRpb24iLCJmaXhlZCIsIm9mZmNhbnZhcyIsInVwZGF0ZSIsImdldExheW91dENvbnRhaW5lciIsInNldE5hdmJhckZpeGVkIiwic2V0Rm9vdGVyRml4ZWQiLCJzZXRGbGlwcGVkIiwicmV2ZXJzZWQiLCJpc0xheW91dE5hdmJhckZ1bGwiLCJpc0ZpeGVkIiwiaXNOYXZiYXJGaXhlZCIsImlzRm9vdGVyRml4ZWQiLCJzZXRBdXRvVXBkYXRlIiwiZW5hYmxlIiwib2ZmIiwidXBkYXRlQ3VzdG9tT3B0aW9uQ2hlY2siLCJjaGVja2VkIiwiY3VzdG9tUmFkaW9PcHRpb25MaXN0IiwiY2xvc2VzdCIsIm1hcCIsImN1c3RvbVJhZGlvT3B0aW9uRUwiLCJpc1J0bCIsImdldEF0dHJpYnV0ZSIsImlzTW9iaWxlRGV2aWNlIiwib3JpZW50YXRpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJpc0ZsaXBwZWQiLCJpc0xpZ2h0U3R5bGUiLCJpc0RhcmtTdHlsZSIsIl9ldmVudCIsIm5hbWVzcGFjZSIsImpvaW4iLCJwdXNoIiwic3BsaWNlIiwiaW5pdCIsImRvY3VtZW50TW9kZSIsImRlc3Ryb3kiLCJpbml0UGFzc3dvcmRUb2dnbGUiLCJ0b2dnbGVyIiwicHJldmVudERlZmF1bHQiLCJmb3JtUGFzc3dvcmRUb2dnbGUiLCJmb3JtUGFzc3dvcmRUb2dnbGVJY29uIiwiZm9ybVBhc3N3b3JkVG9nZ2xlSW5wdXQiLCJzZXRBdHRyaWJ1dGUiLCJpbml0Q3VzdG9tT3B0aW9uQ2hlY2siLCJfdGhpcyIsImN1c3RvcE9wdGlvbkxpc3QiLCJjdXN0b21PcHRpb25FTCIsImluaXRTcGVlY2hUb1RleHQiLCJTcGVlY2hSZWNvZ25pdGlvbiIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwic3BlZWNoVG9UZXh0IiwicmVjb2duaXRpb24iLCJsaXN0ZW5pbmciLCJmb2N1cyIsIm9uc3BlZWNoc3RhcnQiLCJvbmVycm9yIiwib25yZXN1bHQiLCJ2YWx1ZSIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0Iiwib25zcGVlY2hlbmQiLCJzdG9wIiwibmF2VGFic0FuaW1hdGlvbiIsInRhYiIsInNsaWRlciIsInNsaWRlckVsZSIsImlzVmVydGljYWwiLCJzZXRTbGlkZXIiLCJhY3RpdmVUYWIiLCJ0YWJzRWwiLCJwYXJlbnRFbGVtZW50IiwidGFic1JlY3QiLCJhY3RpdmVUYWJSZWN0Iiwic2xpZGVyU3RhcnQiLCJ4IiwiaXNCb3R0b20iLCJ5IiwibGVmdCIsIndpZHRoIiwiYm90dG9tIiwiaW5pdE5hdmJhckRyb3Bkb3duU2Nyb2xsYmFyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiUGVyZmVjdFNjcm9sbGJhciIsIndoZWVsUHJvcGFnYXRpb24iLCJzdXBwcmVzc1Njcm9sbFgiLCJhamF4Q2FsbCIsInVybCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25sb2FkIiwic3RhdHVzIiwicmVzcG9uc2UiLCJzdGF0dXNUZXh0Iiwic2VuZCIsImluaXRTaWRlYmFyVG9nZ2xlIiwic2lkZWJhclRvZ2dsZXIiLCJvdmVybGF5IiwiYXBwT3ZlcmxheSIsInRlbCIsInRvZ2dsZSIsImN1cnJlbnRUYXJnZXQiLCJjaHJvbWUiLCJyZWFkeVN0YXRlIiwib25Db250ZW50TG9hZGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./js/helpers.js\n"); /***/ }) /******/ }); /************************************************************************/ /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ var __webpack_exports__ = {}; /******/ __webpack_modules__["./js/helpers.js"](0, __webpack_exports__, __webpack_require__); /******/ /******/ return __webpack_exports__; /******/ })() ; });
SIMPAN PERUBAHAN