\\n
\\n \\n \".concat(error, \"\\n
\\n
\\n \"));\n }\n }]);\n\n return FlexPages;\n}();\nvar b64_encode_unicode = function b64_encode_unicode(str) {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n};\nvar b64_decode_unicode = function b64_decode_unicode(str) {\n return decodeURIComponent(atob(str).split('').map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n};\n\nvar updatePosition = function updatePosition(scrollingColumn, pageColumns) {\n var group = document.querySelector('#pages-columns .button-group.open');\n\n if (group) {\n var button = group.querySelector('[data-toggle=\"dropdown\"]');\n var dropdown = group.querySelector('.dropdown-menu');\n var buttonInView = isInViewport(button);\n\n if (button && dropdown) {\n if (!buttonInView) {\n external_jQuery_default()(dropdown).css({\n display: 'none'\n });\n } else {\n external_jQuery_default()(dropdown).css({\n display: 'inherit'\n });\n var buttonClientRect = button.getBoundingClientRect();\n var dropdownClientRect = dropdown.getBoundingClientRect();\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n var top = buttonClientRect.height + buttonClientRect.top + scrollTop;\n var left = buttonClientRect.left + scrollLeft; // - dropdownClientRect.width\n\n if (left + dropdownClientRect.width > window.innerWidth) {\n left = window.innerWidth - dropdownClientRect.width - 5;\n }\n\n external_jQuery_default()(dropdown).css({\n top: top,\n left: left\n });\n\n if (scrollingColumn) {\n var targetClientRect = event.target.getBoundingClientRect();\n\n if (top < targetClientRect.top + scrollTop || top > targetClientRect.top + scrollTop + targetClientRect.height) {\n external_jQuery_default()(dropdown).css({\n display: 'none'\n });\n }\n }\n\n if (pageColumns) {\n var _targetClientRect = event.target.getBoundingClientRect();\n\n if (left < _targetClientRect.left + scrollLeft || left > _targetClientRect.left + scrollLeft + _targetClientRect.width) {\n external_jQuery_default()(dropdown).css({\n display: 'none'\n });\n }\n }\n }\n }\n }\n};\n\nvar closeGhostDropdowns = function closeGhostDropdowns() {\n var opened = document.querySelectorAll('#pages-columns .button-group:not(.open) .dropdown-menu') || [];\n opened.forEach(function (item) {\n item.style.display = 'none';\n });\n};\n\ndocument.addEventListener('scroll', function (event) {\n if (event.target && !event.target.classList) {\n return true;\n }\n\n var scrollingDocument = event.target.classList.contains('gm-scroll-view') || event.target.classList.contains('content-wrapper');\n var scrollingColumn = event.target.classList.contains('fjs-col');\n var pageColumns = event.target.id === 'pages-columns';\n\n if (scrollingDocument || scrollingColumn || pageColumns) {\n closeGhostDropdowns();\n updatePosition(scrollingColumn, pageColumns);\n }\n}, true);\ndocument.addEventListener('click', function (event) {\n closeGhostDropdowns();\n\n if (event.target.dataset.toggle || event.target.closest('[data-toggle=\"dropdown\"]')) {\n var containerScroller = document.querySelectorAll('.gm-scroll-view');\n ((containerScroller.length ? containerScroller : document.querySelectorAll('.content-wrapper')) || []).forEach(function (scroll) {\n var scrollEvent = new Event('scroll');\n scroll.dispatchEvent(scrollEvent);\n });\n }\n\n if (event.target.classList && event.target.classList.contains('dropdown-menu') || event.target.closest('.dropdown-menu')) {\n if (!external_jQuery_default()(event.target).closest('.dropdown-menu').find(event.target).length) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n}); // Prevent dropdowns from closing when clicking within\n\nexternal_jQuery_default()(document).on('click.bs.dropdown.data-api', '.fjs-item-wrapper .dropdown-menu', function (event) {\n event.stopPropagation();\n});\n;// CONCATENATED MODULE: ./node_modules/tiny-cookie/es/util.js\nfunction util_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { util_typeof = function _typeof(obj) { return typeof obj; }; } else { util_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return util_typeof(obj); }\n\nfunction util_hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n} // Escape special characters.\n\n\nfunction escapeRe(str) {\n return str.replace(/[.*+?^$|[\\](){}\\\\-]/g, '\\\\$&');\n} // Return a future date by the given string.\n\n\nfunction computeExpires(str) {\n var lastCh = str.charAt(str.length - 1);\n var value = parseInt(str, 10);\n var expires = new Date();\n\n switch (lastCh) {\n case 'Y':\n expires.setFullYear(expires.getFullYear() + value);\n break;\n\n case 'M':\n expires.setMonth(expires.getMonth() + value);\n break;\n\n case 'D':\n expires.setDate(expires.getDate() + value);\n break;\n\n case 'h':\n expires.setHours(expires.getHours() + value);\n break;\n\n case 'm':\n expires.setMinutes(expires.getMinutes() + value);\n break;\n\n case 's':\n expires.setSeconds(expires.getSeconds() + value);\n break;\n\n default:\n expires = new Date(str);\n }\n\n return expires;\n} // Convert an object to a cookie option string.\n\n\nfunction convert(opts) {\n var res = ''; // eslint-disable-next-line\n\n for (var key in opts) {\n if (util_hasOwn(opts, key)) {\n if (/^expires$/i.test(key)) {\n var expires = opts[key];\n\n if (util_typeof(expires) !== 'object') {\n expires += typeof expires === 'number' ? 'D' : '';\n expires = computeExpires(expires);\n }\n\n res += \";\" + key + \"=\" + expires.toUTCString();\n } else if (/^secure$/.test(key)) {\n if (opts[key]) {\n res += \";\" + key;\n }\n } else {\n res += \";\" + key + \"=\" + opts[key];\n }\n }\n }\n\n if (!util_hasOwn(opts, 'path')) {\n res += ';path=/';\n }\n\n return res;\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/tiny-cookie/es/index.js\nfunction es_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { es_typeof = function _typeof(obj) { return typeof obj; }; } else { es_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return es_typeof(obj); }\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n // Check if the browser cookie is enabled.\n\nfunction isEnabled() {\n var key = '@key@';\n var value = '1';\n var re = new RegExp(\"(?:^|; )\" + key + \"=\" + value + \"(?:;|$)\");\n document.cookie = key + \"=\" + value + \";path=/\";\n var enabled = re.test(document.cookie);\n\n if (enabled) {\n // eslint-disable-next-line\n es_remove(key);\n }\n\n return enabled;\n} // Get the cookie value by key.\n\n\nfunction get(key, decoder) {\n if (decoder === void 0) {\n decoder = decodeURIComponent;\n }\n\n if (typeof key !== 'string' || !key) {\n return null;\n }\n\n var reKey = new RegExp(\"(?:^|; )\" + escapeRe(key) + \"(?:=([^;]*))?(?:;|$)\");\n var match = reKey.exec(document.cookie);\n\n if (match === null) {\n return null;\n }\n\n return typeof decoder === 'function' ? decoder(match[1]) : match[1];\n} // The all cookies\n\n\nfunction getAll(decoder) {\n if (decoder === void 0) {\n decoder = decodeURIComponent;\n }\n\n var reKey = /(?:^|; )([^=]+?)(?:=([^;]*))?(?:;|$)/g;\n var cookies = {};\n var match;\n /* eslint-disable no-cond-assign */\n\n while (match = reKey.exec(document.cookie)) {\n reKey.lastIndex = match.index + match.length - 1;\n cookies[match[1]] = typeof decoder === 'function' ? decoder(match[2]) : match[2];\n }\n\n return cookies;\n} // Set a cookie.\n\n\nfunction es_set(key, value, encoder, options) {\n if (encoder === void 0) {\n encoder = encodeURIComponent;\n }\n\n if (es_typeof(encoder) === 'object' && encoder !== null) {\n /* eslint-disable no-param-reassign */\n options = encoder;\n encoder = encodeURIComponent;\n /* eslint-enable no-param-reassign */\n }\n\n var attrsStr = convert(options || {});\n var valueStr = typeof encoder === 'function' ? encoder(value) : value;\n var newCookie = key + \"=\" + valueStr + attrsStr;\n document.cookie = newCookie;\n} // Remove a cookie by the specified key.\n\n\nfunction es_remove(key, options) {\n var opts = {\n expires: -1\n };\n\n if (options) {\n opts = _extends({}, options, opts);\n }\n\n return es_set(key, 'a', opts);\n} // Get the cookie's value without decoding.\n\n\nfunction getRaw(key) {\n return get(key, null);\n} // Set a cookie without encoding the value.\n\n\nfunction setRaw(key, value, options) {\n return es_set(key, value, null, options);\n}\n\n\n;// CONCATENATED MODULE: ./app/utils/get-filters.js\n/* harmony default export */ const get_filters = (function () {\n var inputs = document.querySelectorAll('#pages-filters input[name]');\n var filters = {};\n var trackMulti = [];\n inputs.forEach(function (filter) {\n if (filter.type === 'checkbox') {\n if (filter.indeterminate || filter.checked) {\n if (filter.name.match(/\\[]$/)) {\n var name = filter.name.replace(/\\[]$/, '');\n\n if (!filters[name]) {\n filters[name] = [];\n }\n\n if (!trackMulti.includes(name)) {\n trackMulti.push(name);\n }\n\n filters[name].push(filter.value);\n } else {\n filters[filter.name] = filter.value;\n }\n }\n } else if (filter.value) {\n filters[filter.name] = filter.value;\n }\n });\n trackMulti.forEach(function (multi) {\n filters[multi] = filters[multi].join(',');\n });\n return filters;\n});\n;// CONCATENATED MODULE: ./app/columns/index.js\nfunction columns_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction columns_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { columns_ownKeys(Object(source), true).forEach(function (key) { columns_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { columns_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction columns_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nvar container = document.querySelector('#pages-content-wrapper');\nvar getStore = function getStore() {\n if (!isEnabled) {\n return '';\n }\n\n return JSON.parse(b64_decode_unicode(get('grav-admin-flexpages') || 'e30='));\n};\nvar setStore = function setStore() {\n var store = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n expires: '1Y',\n samesite: 'Lax'\n };\n\n if (!isEnabled) {\n return '';\n }\n\n return es_set('grav-admin-flexpages', b64_encode_unicode(JSON.stringify(store)), options);\n};\nvar getInitialRoute = function getInitialRoute() {\n var parsed = getStore();\n return parsed.route || '';\n};\nvar setInitialRoute = function setInitialRoute() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$route = _ref.route,\n route = _ref$route === void 0 ? '' : _ref$route,\n _ref$filters = _ref.filters,\n filters = _ref$filters === void 0 ? getStore().filters || {} : _ref$filters,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {\n expires: '1Y'\n } : _ref$options;\n\n return setStore({\n route: route,\n filters: filters\n }, options);\n};\nvar FlexPagesInstance = null;\nvar ReLoad = function ReLoad() {\n var fresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var search = document.querySelector('#pages-filters [name=\"filters[search]\"]');\n var loader = container.querySelector('.grav-loading');\n var content = container.querySelector('#pages-columns');\n var gravConfig = typeof __webpack_require__.g.GravConfig !== 'undefined' ? __webpack_require__.g.GravConfig : __webpack_require__.g.GravAdmin.config;\n\n if (fresh && search) {\n search.focus();\n }\n\n if (loader && content) {\n loader.style.display = 'block';\n content.innerHTML = '';\n var filters = fresh ? getStore().filters || {} : get_filters();\n var withFilters = Object.keys(filters).length ? columns_objectSpread(columns_objectSpread({}, filters), {}, {\n initial: true\n }) : {};\n var store = getStore();\n store.filters = filters;\n setStore(store);\n var isSearchFocused = false;\n\n if (search) {\n isSearchFocused = search === document.activeElement;\n }\n\n var contentWrapper = document.querySelector('.content-wrapper .gm-scroll-view');\n var scrollPosition = {\n top: contentWrapper ? contentWrapper.scrollTop : 0,\n left: contentWrapper ? contentWrapper.scrollLeft : 0\n };\n external_jQuery_default().ajax({\n url: \"\".concat(gravConfig.current_url),\n method: 'post',\n data: Object.assign({}, {\n route: b64_encode_unicode(getInitialRoute()),\n initial: true,\n action: 'listLevel'\n }, withFilters),\n success: function success(response) {\n loader.style.display = 'none';\n\n if (response.status === 'error') {\n content.innerHTML = response.message;\n return true;\n }\n\n FlexPagesInstance = null;\n FlexPagesInstance = new FlexPages(content, response.data);\n\n if (search && isSearchFocused) {\n search.focus();\n }\n\n if (contentWrapper) {\n contentWrapper.scrollTo(scrollPosition);\n }\n\n return FlexPagesInstance;\n }\n });\n }\n};\n\nif (container) {\n ReLoad(true);\n}\n// EXTERNAL MODULE: ./app/utils/indeterminate.js\nvar indeterminate = __webpack_require__(2850);\n// EXTERNAL MODULE: ./app/filters/panel.js\nvar panel = __webpack_require__(3897);\n// EXTERNAL MODULE: ./node_modules/lodash/throttle.js\nvar throttle = __webpack_require__(4970);\nvar throttle_default = /*#__PURE__*/__webpack_require__.n(throttle);\n;// CONCATENATED MODULE: ./app/filters/index.js\n\n\n\n\ndocument.addEventListener('click', function (event) {\n var filterType = event.target && event.target.dataset.filters;\n\n if (filterType === 'reset') {\n var filters = event.target.closest('#pages-filters');\n (filters.querySelectorAll('input[type=\"text\"]') || []).forEach(function (input) {\n input.value = '';\n });\n (filters.querySelectorAll('input[type=\"checkbox\"]') || []).forEach(function (input) {\n var wrapper = input.closest('.checkboxes');\n\n if (wrapper) {\n wrapper.classList.remove('status-checked', 'status-unchecked', 'status-indeterminate');\n wrapper.dataset._checkStatus = '0';\n wrapper.classList.add('status-unchecked');\n }\n\n input.indeterminate = false;\n input.checked = false;\n input.value = '';\n });\n return false;\n }\n\n if (filterType === 'apply') {\n ReLoad();\n return false;\n }\n});\nvar throttledReload = throttle_default()(function () {\n ReLoad();\n}, 350, {\n leading: false\n});\ndocument.addEventListener('input', function (event) {\n if (event.target.getAttribute && event.target.getAttribute('name') === 'filters[search]') {\n throttledReload.cancel();\n throttledReload();\n }\n});\n;// CONCATENATED MODULE: ./app/main.js\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuZXNtLmpzPzJiMGUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvQXBwLnZ1ZT8wMzEwIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvVGFibGUudnVlPzY0NDkiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGUudnVlPzg3M2IiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZT8zNTlkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZT9hMTE2Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanM/Mjg3NyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZS52dWU/ZWIwYyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb24udnVlPzNmYWQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT8zYWFmIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT8zNTYzIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT80YjY5Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb24udnVlP2IxMTgiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT81M2QxIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWU/ZDkzZiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZT8xMmFkIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvTWl4aW4udnVlP2NmZjMiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZT80ZmRhIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm9NaXhpbi52dWU/MDAyZiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/NTRjMCIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZT9jY2Y2Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlPzE4ODgiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvVnVldGFibGVDc3NDb25maWcuanM/YzU2MiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvYXBwL2xpc3QvY29tcG9uZW50cy9UYWJsZS52dWU/NTcxMSIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9jb21wb25lbnRzL1RhYmxlLnZ1ZT80OTZlIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvVGFibGUudnVlPzNhZmIiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvY29tcG9uZW50cy9GaWx0ZXJCYXIudnVlPzIzYmUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT8xMmQ3Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT85MzI2Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZT83MTllIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L2NvbXBvbmVudHMvQ29udGVudExvYWRlci52dWU/MmRiMyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9ub2RlX21vZHVsZXMvdnVlLWNvbnRlbnQtbG9hZGVyL2Rpc3QvdnVlLWNvbnRlbnQtbG9hZGVyLmVzLmpzP2UzMzAiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzL2FwcC9saXN0L2NvbXBvbmVudHMvQ29udGVudExvYWRlci52dWU/OWI2YiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9jb21wb25lbnRzL0NvbnRlbnRMb2FkZXIudnVlPzc0OTUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvY29tcG9uZW50cy9Db250ZW50TG9hZGVyLnZ1ZT8yMmM1Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9hcHAvbGlzdC9BcHAudnVlPzIwMWQiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2xpc3QvQXBwLnZ1ZT9kMTYzIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9saXN0L0FwcC52dWU/NTQ1MyIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvbGlzdC9pbmRleC5qcz8wZWNlIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy9leHRlcm5hbCBcImpRdWVyeVwiP2NkMGMiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL3V0aWxzL2ZpbmRlci5qcz8xMjIwIiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9jb2x1bW5zL2ZpbmRlci5qcz80OWU2Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL25vZGVfbW9kdWxlcy90aW55LWNvb2tpZS9lcy91dGlsLmpzPzFlYWMiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vbm9kZV9tb2R1bGVzL3RpbnktY29va2llL2VzL2luZGV4LmpzPzE5ZDUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL3V0aWxzL2dldC1maWx0ZXJzLmpzP2I4NDUiLCJ3ZWJwYWNrOi8vZmxleC1vYmplY3RzLy4vYXBwL2NvbHVtbnMvaW5kZXguanM/OWMzMiIsIndlYnBhY2s6Ly9mbGV4LW9iamVjdHMvLi9hcHAvZmlsdGVycy9pbmRleC5qcz80ZGY0Iiwid2VicGFjazovL2ZsZXgtb2JqZWN0cy8uL2FwcC9tYWluLmpzP2YxNjEiXSwibmFtZXMiOlsiZW1wdHlPYmplY3QiLCJPYmplY3QiLCJmcmVlemUiLCJpc1VuZGVmIiwidiIsInVuZGVmaW5lZCIsImlzRGVmIiwiaXNUcnVlIiwiaXNGYWxzZSIsImlzUHJpbWl0aXZlIiwidmFsdWUiLCJpc09iamVjdCIsIm9iaiIsIl90b1N0cmluZyIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwidG9SYXdUeXBlIiwiY2FsbCIsInNsaWNlIiwiaXNQbGFpbk9iamVjdCIsImlzUmVnRXhwIiwiaXNWYWxpZEFycmF5SW5kZXgiLCJ2YWwiLCJuIiwicGFyc2VGbG9hdCIsIlN0cmluZyIsIk1hdGgiLCJmbG9vciIsImlzRmluaXRlIiwiaXNQcm9taXNlIiwidGhlbiIsImNhdGNoIiwiQXJyYXkiLCJpc0FycmF5IiwiSlNPTiIsInN0cmluZ2lmeSIsInRvTnVtYmVyIiwiaXNOYU4iLCJtYWtlTWFwIiwic3RyIiwiZXhwZWN0c0xvd2VyQ2FzZSIsIm1hcCIsImNyZWF0ZSIsImxpc3QiLCJzcGxpdCIsImkiLCJsZW5ndGgiLCJ0b0xvd2VyQ2FzZSIsImlzQnVpbHRJblRhZyIsImlzUmVzZXJ2ZWRBdHRyaWJ1dGUiLCJyZW1vdmUiLCJhcnIiLCJpdGVtIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwiaGFzT3duUHJvcGVydHkiLCJoYXNPd24iLCJrZXkiLCJjYWNoZWQiLCJmbiIsImNhY2hlIiwiY2FjaGVkRm4iLCJoaXQiLCJjYW1lbGl6ZVJFIiwiY2FtZWxpemUiLCJyZXBsYWNlIiwiXyIsImMiLCJ0b1VwcGVyQ2FzZSIsImNhcGl0YWxpemUiLCJjaGFyQXQiLCJoeXBoZW5hdGVSRSIsImh5cGhlbmF0ZSIsInBvbHlmaWxsQmluZCIsImN0eCIsImJvdW5kRm4iLCJhIiwibCIsImFyZ3VtZW50cyIsImFwcGx5IiwiX2xlbmd0aCIsIm5hdGl2ZUJpbmQiLCJiaW5kIiwiRnVuY3Rpb24iLCJ0b0FycmF5Iiwic3RhcnQiLCJyZXQiLCJleHRlbmQiLCJ0byIsIl9mcm9tIiwidG9PYmplY3QiLCJyZXMiLCJub29wIiwiYiIsIm5vIiwiaWRlbnRpdHkiLCJsb29zZUVxdWFsIiwiaXNPYmplY3RBIiwiaXNPYmplY3RCIiwiaXNBcnJheUEiLCJpc0FycmF5QiIsImV2ZXJ5IiwiZSIsIkRhdGUiLCJnZXRUaW1lIiwia2V5c0EiLCJrZXlzIiwia2V5c0IiLCJsb29zZUluZGV4T2YiLCJvbmNlIiwiY2FsbGVkIiwiU1NSX0FUVFIiLCJBU1NFVF9UWVBFUyIsIkxJRkVDWUNMRV9IT09LUyIsImNvbmZpZyIsIm9wdGlvbk1lcmdlU3RyYXRlZ2llcyIsInNpbGVudCIsInByb2R1Y3Rpb25UaXAiLCJwcm9jZXNzIiwiZGV2dG9vbHMiLCJwZXJmb3JtYW5jZSIsImVycm9ySGFuZGxlciIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1lbnRzIiwia2V5Q29kZXMiLCJpc1Jlc2VydmVkVGFnIiwiaXNSZXNlcnZlZEF0dHIiLCJpc1Vua25vd25FbGVtZW50IiwiZ2V0VGFnTmFtZXNwYWNlIiwicGFyc2VQbGF0Zm9ybVRhZ05hbWUiLCJtdXN0VXNlUHJvcCIsImFzeW5jIiwiX2xpZmVjeWNsZUhvb2tzIiwidW5pY29kZVJlZ0V4cCIsImlzUmVzZXJ2ZWQiLCJjaGFyQ29kZUF0IiwiZGVmIiwiZW51bWVyYWJsZSIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJiYWlsUkUiLCJSZWdFeHAiLCJzb3VyY2UiLCJwYXJzZVBhdGgiLCJwYXRoIiwidGVzdCIsInNlZ21lbnRzIiwiaGFzUHJvdG8iLCJpbkJyb3dzZXIiLCJ3aW5kb3ciLCJpbldlZXgiLCJXWEVudmlyb25tZW50IiwicGxhdGZvcm0iLCJ3ZWV4UGxhdGZvcm0iLCJVQSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImlzSUUiLCJpc0lFOSIsImlzRWRnZSIsImlzQW5kcm9pZCIsImlzSU9TIiwiaXNDaHJvbWUiLCJpc1BoYW50b21KUyIsImlzRkYiLCJtYXRjaCIsIm5hdGl2ZVdhdGNoIiwid2F0Y2giLCJzdXBwb3J0c1Bhc3NpdmUiLCJvcHRzIiwiZ2V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9pc1NlcnZlciIsImlzU2VydmVyUmVuZGVyaW5nIiwiZ2xvYmFsIiwiZW52IiwiVlVFX0VOViIsIl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJpc05hdGl2ZSIsIkN0b3IiLCJoYXNTeW1ib2wiLCJTeW1ib2wiLCJSZWZsZWN0Iiwib3duS2V5cyIsIl9TZXQiLCJTZXQiLCJzZXQiLCJoYXMiLCJhZGQiLCJjbGVhciIsIndhcm4iLCJ0aXAiLCJnZW5lcmF0ZUNvbXBvbmVudFRyYWNlIiwiZm9ybWF0Q29tcG9uZW50TmFtZSIsInVpZCIsIkRlcCIsImlkIiwic3VicyIsImFkZFN1YiIsInN1YiIsInB1c2giLCJyZW1vdmVTdWIiLCJkZXBlbmQiLCJ0YXJnZXQiLCJhZGREZXAiLCJub3RpZnkiLCJ1cGRhdGUiLCJ0YXJnZXRTdGFjayIsInB1c2hUYXJnZXQiLCJwb3BUYXJnZXQiLCJwb3AiLCJWTm9kZSIsInRhZyIsImRhdGEiLCJjaGlsZHJlbiIsInRleHQiLCJlbG0iLCJjb250ZXh0IiwiY29tcG9uZW50T3B0aW9ucyIsImFzeW5jRmFjdG9yeSIsIm5zIiwiZm5Db250ZXh0IiwiZm5PcHRpb25zIiwiZm5TY29wZUlkIiwiY29tcG9uZW50SW5zdGFuY2UiLCJwYXJlbnQiLCJyYXciLCJpc1N0YXRpYyIsImlzUm9vdEluc2VydCIsImlzQ29tbWVudCIsImlzQ2xvbmVkIiwiaXNPbmNlIiwiYXN5bmNNZXRhIiwiaXNBc3luY1BsYWNlaG9sZGVyIiwicHJvdG90eXBlQWNjZXNzb3JzIiwiY2hpbGQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY3JlYXRlRW1wdHlWTm9kZSIsIm5vZGUiLCJjcmVhdGVUZXh0Vk5vZGUiLCJjbG9uZVZOb2RlIiwidm5vZGUiLCJjbG9uZWQiLCJhcnJheVByb3RvIiwiYXJyYXlNZXRob2RzIiwibWV0aG9kc1RvUGF0Y2giLCJmb3JFYWNoIiwibWV0aG9kIiwib3JpZ2luYWwiLCJtdXRhdG9yIiwiYXJncyIsImxlbiIsInJlc3VsdCIsIm9iIiwiX19vYl9fIiwiaW5zZXJ0ZWQiLCJvYnNlcnZlQXJyYXkiLCJkZXAiLCJhcnJheUtleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwic2hvdWxkT2JzZXJ2ZSIsInRvZ2dsZU9ic2VydmluZyIsIk9ic2VydmVyIiwidm1Db3VudCIsInByb3RvQXVnbWVudCIsImNvcHlBdWdtZW50Iiwid2FsayIsImRlZmluZVJlYWN0aXZlJCQxIiwiaXRlbXMiLCJvYnNlcnZlIiwic3JjIiwiX19wcm90b19fIiwiYXNSb290RGF0YSIsImlzRXh0ZW5zaWJsZSIsIl9pc1Z1ZSIsImN1c3RvbVNldHRlciIsInNoYWxsb3ciLCJwcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldHRlciIsInNldHRlciIsImNoaWxkT2IiLCJyZWFjdGl2ZUdldHRlciIsImRlcGVuZEFycmF5IiwicmVhY3RpdmVTZXR0ZXIiLCJuZXdWYWwiLCJtYXgiLCJkZWwiLCJzdHJhdHMiLCJtZXJnZURhdGEiLCJmcm9tIiwidG9WYWwiLCJmcm9tVmFsIiwibWVyZ2VEYXRhT3JGbiIsInBhcmVudFZhbCIsImNoaWxkVmFsIiwidm0iLCJtZXJnZWREYXRhRm4iLCJtZXJnZWRJbnN0YW5jZURhdGFGbiIsImluc3RhbmNlRGF0YSIsImRlZmF1bHREYXRhIiwibWVyZ2VIb29rIiwiY29uY2F0IiwiZGVkdXBlSG9va3MiLCJob29rcyIsImhvb2siLCJtZXJnZUFzc2V0cyIsImFzc2VydE9iamVjdFR5cGUiLCJ0eXBlIiwia2V5JDEiLCJwcm9wcyIsIm1ldGhvZHMiLCJpbmplY3QiLCJjb21wdXRlZCIsInByb3ZpZGUiLCJkZWZhdWx0U3RyYXQiLCJjaGVja0NvbXBvbmVudHMiLCJvcHRpb25zIiwiY29tcG9uZW50cyIsInZhbGlkYXRlQ29tcG9uZW50TmFtZSIsIm5hbWUiLCJub3JtYWxpemVQcm9wcyIsIm5vcm1hbGl6ZUluamVjdCIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemVEaXJlY3RpdmVzIiwiZGlycyIsImRpcmVjdGl2ZXMiLCJkZWYkJDEiLCJtZXJnZU9wdGlvbnMiLCJfYmFzZSIsImV4dGVuZHMiLCJtaXhpbnMiLCJtZXJnZUZpZWxkIiwic3RyYXQiLCJyZXNvbHZlQXNzZXQiLCJ3YXJuTWlzc2luZyIsImFzc2V0cyIsImNhbWVsaXplZElkIiwiUGFzY2FsQ2FzZUlkIiwidmFsaWRhdGVQcm9wIiwicHJvcE9wdGlvbnMiLCJwcm9wc0RhdGEiLCJwcm9wIiwiYWJzZW50IiwiYm9vbGVhbkluZGV4IiwiZ2V0VHlwZUluZGV4IiwiQm9vbGVhbiIsInN0cmluZ0luZGV4IiwiZ2V0UHJvcERlZmF1bHRWYWx1ZSIsInByZXZTaG91bGRPYnNlcnZlIiwiZGVmYXVsdCIsIiRvcHRpb25zIiwiX3Byb3BzIiwiZ2V0VHlwZSIsImFzc2VydFByb3AiLCJyZXF1aXJlZCIsInZhbGlkIiwiZXhwZWN0ZWRUeXBlcyIsImFzc2VydGVkVHlwZSIsImFzc2VydFR5cGUiLCJleHBlY3RlZFR5cGUiLCJnZXRJbnZhbGlkVHlwZU1lc3NhZ2UiLCJ2YWxpZGF0b3IiLCJzaW1wbGVDaGVja1JFIiwidCIsImlzU2FtZVR5cGUiLCJtZXNzYWdlIiwiam9pbiIsInJlY2VpdmVkVHlwZSIsImV4cGVjdGVkVmFsdWUiLCJzdHlsZVZhbHVlIiwicmVjZWl2ZWRWYWx1ZSIsImlzRXhwbGljYWJsZSIsImlzQm9vbGVhbiIsIk51bWJlciIsImV4cGxpY2l0VHlwZXMiLCJzb21lIiwiZWxlbSIsImhhbmRsZUVycm9yIiwiZXJyIiwiaW5mbyIsImN1ciIsIiRwYXJlbnQiLCJlcnJvckNhcHR1cmVkIiwiY2FwdHVyZSIsImdsb2JhbEhhbmRsZUVycm9yIiwiaW52b2tlV2l0aEVycm9ySGFuZGxpbmciLCJoYW5kbGVyIiwiX2hhbmRsZWQiLCJsb2dFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsImlzVXNpbmdNaWNyb1Rhc2siLCJjYWxsYmFja3MiLCJwZW5kaW5nIiwiZmx1c2hDYWxsYmFja3MiLCJjb3BpZXMiLCJ0aW1lckZ1bmMiLCJQcm9taXNlIiwicCIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiTXV0YXRpb25PYnNlcnZlciIsImNvdW50ZXIiLCJvYnNlcnZlciIsInRleHROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNoYXJhY3RlckRhdGEiLCJzZXRJbW1lZGlhdGUiLCJuZXh0VGljayIsImNiIiwiX3Jlc29sdmUiLCJpbml0UHJveHkiLCJzZWVuT2JqZWN0cyIsInRyYXZlcnNlIiwiX3RyYXZlcnNlIiwic2VlbiIsImlzQSIsImlzRnJvemVuIiwiZGVwSWQiLCJtYXJrIiwibWVhc3VyZSIsIm5vcm1hbGl6ZUV2ZW50IiwicGFzc2l2ZSIsIm9uY2UkJDEiLCJjcmVhdGVGbkludm9rZXIiLCJmbnMiLCJpbnZva2VyIiwiYXJndW1lbnRzJDEiLCJ1cGRhdGVMaXN0ZW5lcnMiLCJvbiIsIm9sZE9uIiwicmVtb3ZlJCQxIiwiY3JlYXRlT25jZUhhbmRsZXIiLCJvbGQiLCJldmVudCIsInBhcmFtcyIsIm1lcmdlVk5vZGVIb29rIiwiaG9va0tleSIsIm9sZEhvb2siLCJ3cmFwcGVkSG9vayIsIm1lcmdlZCIsImV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEiLCJhdHRycyIsImFsdEtleSIsImNoZWNrUHJvcCIsImhhc2giLCJwcmVzZXJ2ZSIsInNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIiwibm9ybWFsaXplQ2hpbGRyZW4iLCJub3JtYWxpemVBcnJheUNoaWxkcmVuIiwiaXNUZXh0Tm9kZSIsIm5lc3RlZEluZGV4IiwibGFzdEluZGV4IiwibGFzdCIsInNoaWZ0IiwiX2lzVkxpc3QiLCJpbml0UHJvdmlkZSIsIl9wcm92aWRlZCIsImluaXRJbmplY3Rpb25zIiwicmVzb2x2ZUluamVjdCIsInByb3ZpZGVLZXkiLCJwcm92aWRlRGVmYXVsdCIsInJlc29sdmVTbG90cyIsInNsb3RzIiwic2xvdCIsIm5hbWUkMSIsImlzV2hpdGVzcGFjZSIsIm5vcm1hbGl6ZVNjb3BlZFNsb3RzIiwibm9ybWFsU2xvdHMiLCJwcmV2U2xvdHMiLCJoYXNOb3JtYWxTbG90cyIsImlzU3RhYmxlIiwiJHN0YWJsZSIsIiRrZXkiLCJfbm9ybWFsaXplZCIsIiRoYXNOb3JtYWwiLCJub3JtYWxpemVTY29wZWRTbG90Iiwia2V5JDIiLCJwcm94eU5vcm1hbFNsb3QiLCJwcm94eSIsInJlbmRlckxpc3QiLCJyZW5kZXIiLCJpdGVyYXRvciIsIm5leHQiLCJkb25lIiwicmVuZGVyU2xvdCIsImZhbGxiYWNrIiwiYmluZE9iamVjdCIsInNjb3BlZFNsb3RGbiIsIiRzY29wZWRTbG90cyIsIm5vZGVzIiwiJHNsb3RzIiwiJGNyZWF0ZUVsZW1lbnQiLCJyZXNvbHZlRmlsdGVyIiwiaXNLZXlOb3RNYXRjaCIsImV4cGVjdCIsImFjdHVhbCIsImNoZWNrS2V5Q29kZXMiLCJldmVudEtleUNvZGUiLCJidWlsdEluS2V5Q29kZSIsImV2ZW50S2V5TmFtZSIsImJ1aWx0SW5LZXlOYW1lIiwibWFwcGVkS2V5Q29kZSIsImJpbmRPYmplY3RQcm9wcyIsImFzUHJvcCIsImlzU3luYyIsImxvb3AiLCJkb21Qcm9wcyIsImNhbWVsaXplZEtleSIsImh5cGhlbmF0ZWRLZXkiLCIkZXZlbnQiLCJyZW5kZXJTdGF0aWMiLCJpc0luRm9yIiwiX3N0YXRpY1RyZWVzIiwidHJlZSIsInN0YXRpY1JlbmRlckZucyIsIl9yZW5kZXJQcm94eSIsIm1hcmtTdGF0aWMiLCJtYXJrT25jZSIsIm1hcmtTdGF0aWNOb2RlIiwiYmluZE9iamVjdExpc3RlbmVycyIsImV4aXN0aW5nIiwib3VycyIsInJlc29sdmVTY29wZWRTbG90cyIsImhhc0R5bmFtaWNLZXlzIiwiY29udGVudEhhc2hLZXkiLCJiaW5kRHluYW1pY0tleXMiLCJiYXNlT2JqIiwidmFsdWVzIiwicHJlcGVuZE1vZGlmaWVyIiwic3ltYm9sIiwiaW5zdGFsbFJlbmRlckhlbHBlcnMiLCJfbyIsIl9uIiwiX3MiLCJfbCIsIl90IiwiX3EiLCJfaSIsIl9tIiwiX2YiLCJfayIsIl9iIiwiX3YiLCJfZSIsIl91IiwiX2ciLCJfZCIsIl9wIiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLCJ0aGlzJDEiLCJjb250ZXh0Vm0iLCJfb3JpZ2luYWwiLCJpc0NvbXBpbGVkIiwiX2NvbXBpbGVkIiwibmVlZE5vcm1hbGl6YXRpb24iLCJsaXN0ZW5lcnMiLCJpbmplY3Rpb25zIiwic2NvcGVkU2xvdHMiLCJfc2NvcGVJZCIsIl9jIiwiZCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50IiwibWVyZ2VQcm9wcyIsInJlbmRlckNvbnRleHQiLCJjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0Iiwidm5vZGVzIiwiY2xvbmUiLCJjb21wb25lbnRWTm9kZUhvb2tzIiwiaW5pdCIsImh5ZHJhdGluZyIsIl9pc0Rlc3Ryb3llZCIsImtlZXBBbGl2ZSIsIm1vdW50ZWROb2RlIiwicHJlcGF0Y2giLCJjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIiwiYWN0aXZlSW5zdGFuY2UiLCIkbW91bnQiLCJvbGRWbm9kZSIsInVwZGF0ZUNoaWxkQ29tcG9uZW50IiwiaW5zZXJ0IiwiX2lzTW91bnRlZCIsImNhbGxIb29rIiwicXVldWVBY3RpdmF0ZWRDb21wb25lbnQiLCJhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiZGVzdHJveSIsIiRkZXN0cm95IiwiZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiaG9va3NUb01lcmdlIiwiY3JlYXRlQ29tcG9uZW50IiwiYmFzZUN0b3IiLCJjaWQiLCJyZXNvbHZlQXN5bmNDb21wb25lbnQiLCJjcmVhdGVBc3luY1BsYWNlaG9sZGVyIiwicmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyIsIm1vZGVsIiwidHJhbnNmb3JtTW9kZWwiLCJmdW5jdGlvbmFsIiwibmF0aXZlT24iLCJhYnN0cmFjdCIsImluc3RhbGxDb21wb25lbnRIb29rcyIsIl9pc0NvbXBvbmVudCIsIl9wYXJlbnRWbm9kZSIsImlubGluZVRlbXBsYXRlIiwidG9NZXJnZSIsIl9tZXJnZWQiLCJtZXJnZUhvb2skMSIsImYxIiwiZjIiLCJjYWxsYmFjayIsIlNJTVBMRV9OT1JNQUxJWkUiLCJBTFdBWVNfTk9STUFMSVpFIiwibm9ybWFsaXphdGlvblR5cGUiLCJhbHdheXNOb3JtYWxpemUiLCJfY3JlYXRlRWxlbWVudCIsImlzIiwiJHZub2RlIiwicHJlIiwiYXBwbHlOUyIsInJlZ2lzdGVyRGVlcEJpbmRpbmdzIiwiZm9yY2UiLCJzdHlsZSIsImNsYXNzIiwiaW5pdFJlbmRlciIsIl92bm9kZSIsInBhcmVudFZub2RlIiwiX3JlbmRlckNoaWxkcmVuIiwicGFyZW50RGF0YSIsIl9wYXJlbnRMaXN0ZW5lcnMiLCJjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UiLCJyZW5kZXJNaXhpbiIsIlZ1ZSIsIiRuZXh0VGljayIsIl9yZW5kZXIiLCJyZWYiLCJlbnN1cmVDdG9yIiwiY29tcCIsImJhc2UiLCJfX2VzTW9kdWxlIiwidG9TdHJpbmdUYWciLCJmYWN0b3J5IiwiZXJyb3JDb21wIiwicmVzb2x2ZWQiLCJvd25lciIsIm93bmVycyIsImxvYWRpbmciLCJsb2FkaW5nQ29tcCIsInN5bmMiLCJ0aW1lckxvYWRpbmciLCJ0aW1lclRpbWVvdXQiLCIkb24iLCJmb3JjZVJlbmRlciIsInJlbmRlckNvbXBsZXRlZCIsIiRmb3JjZVVwZGF0ZSIsImNsZWFyVGltZW91dCIsInJlamVjdCIsInJlYXNvbiIsImNvbXBvbmVudCIsImRlbGF5IiwidGltZW91dCIsImdldEZpcnN0Q29tcG9uZW50Q2hpbGQiLCJpbml0RXZlbnRzIiwiX2V2ZW50cyIsIl9oYXNIb29rRXZlbnQiLCJ1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMiLCJyZW1vdmUkMSIsIiRvZmYiLCJfdGFyZ2V0Iiwib25jZUhhbmRsZXIiLCJvbGRMaXN0ZW5lcnMiLCJldmVudHNNaXhpbiIsImhvb2tSRSIsIiRvbmNlIiwiaSQxIiwiY2JzIiwiJGVtaXQiLCJpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQiLCJzZXRBY3RpdmVJbnN0YW5jZSIsInByZXZBY3RpdmVJbnN0YW5jZSIsImluaXRMaWZlY3ljbGUiLCIkY2hpbGRyZW4iLCIkcm9vdCIsIiRyZWZzIiwiX3dhdGNoZXIiLCJfaW5hY3RpdmUiLCJfZGlyZWN0SW5hY3RpdmUiLCJfaXNCZWluZ0Rlc3Ryb3llZCIsImxpZmVjeWNsZU1peGluIiwiX3VwZGF0ZSIsInByZXZFbCIsIiRlbCIsInByZXZWbm9kZSIsInJlc3RvcmVBY3RpdmVJbnN0YW5jZSIsIl9fcGF0Y2hfXyIsIl9fdnVlX18iLCJ0ZWFyZG93biIsIl93YXRjaGVycyIsIl9kYXRhIiwibW91bnRDb21wb25lbnQiLCJlbCIsInVwZGF0ZUNvbXBvbmVudCIsIldhdGNoZXIiLCJiZWZvcmUiLCJyZW5kZXJDaGlsZHJlbiIsIm5ld1Njb3BlZFNsb3RzIiwib2xkU2NvcGVkU2xvdHMiLCJoYXNEeW5hbWljU2NvcGVkU2xvdCIsIm5lZWRzRm9yY2VVcGRhdGUiLCIkYXR0cnMiLCIkbGlzdGVuZXJzIiwicHJvcEtleXMiLCJfcHJvcEtleXMiLCJpc0luSW5hY3RpdmVUcmVlIiwiZGlyZWN0IiwiaGFuZGxlcnMiLCJqIiwiTUFYX1VQREFURV9DT1VOVCIsInF1ZXVlIiwiYWN0aXZhdGVkQ2hpbGRyZW4iLCJjaXJjdWxhciIsIndhaXRpbmciLCJmbHVzaGluZyIsInJlc2V0U2NoZWR1bGVyU3RhdGUiLCJjdXJyZW50Rmx1c2hUaW1lc3RhbXAiLCJnZXROb3ciLCJub3ciLCJjcmVhdGVFdmVudCIsInRpbWVTdGFtcCIsImZsdXNoU2NoZWR1bGVyUXVldWUiLCJ3YXRjaGVyIiwic29ydCIsInJ1biIsImFjdGl2YXRlZFF1ZXVlIiwidXBkYXRlZFF1ZXVlIiwiY2FsbEFjdGl2YXRlZEhvb2tzIiwiY2FsbFVwZGF0ZWRIb29rcyIsImVtaXQiLCJxdWV1ZVdhdGNoZXIiLCJ1aWQkMiIsImV4cE9yRm4iLCJpc1JlbmRlcldhdGNoZXIiLCJkZWVwIiwidXNlciIsImxhenkiLCJhY3RpdmUiLCJkaXJ0eSIsImRlcHMiLCJuZXdEZXBzIiwiZGVwSWRzIiwibmV3RGVwSWRzIiwiZXhwcmVzc2lvbiIsImNsZWFudXBEZXBzIiwidG1wIiwib2xkVmFsdWUiLCJldmFsdWF0ZSIsInNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiIsInNvdXJjZUtleSIsInByb3h5R2V0dGVyIiwicHJveHlTZXR0ZXIiLCJpbml0U3RhdGUiLCJpbml0UHJvcHMiLCJpbml0TWV0aG9kcyIsImluaXREYXRhIiwiaW5pdENvbXB1dGVkIiwiaW5pdFdhdGNoIiwicHJvcHNPcHRpb25zIiwiaXNSb290IiwiZ2V0RGF0YSIsImNvbXB1dGVkV2F0Y2hlck9wdGlvbnMiLCJ3YXRjaGVycyIsIl9jb21wdXRlZFdhdGNoZXJzIiwiaXNTU1IiLCJ1c2VyRGVmIiwiZGVmaW5lQ29tcHV0ZWQiLCJzaG91bGRDYWNoZSIsImNyZWF0ZUNvbXB1dGVkR2V0dGVyIiwiY3JlYXRlR2V0dGVySW52b2tlciIsImNvbXB1dGVkR2V0dGVyIiwiY3JlYXRlV2F0Y2hlciIsIiR3YXRjaCIsInN0YXRlTWl4aW4iLCJkYXRhRGVmIiwicHJvcHNEZWYiLCIkc2V0IiwiJGRlbGV0ZSIsImltbWVkaWF0ZSIsInVud2F0Y2hGbiIsInVpZCQzIiwiaW5pdE1peGluIiwiX2luaXQiLCJfdWlkIiwic3RhcnRUYWciLCJlbmRUYWciLCJpbml0SW50ZXJuYWxDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9zZWxmIiwidm5vZGVDb21wb25lbnRPcHRpb25zIiwiX2NvbXBvbmVudFRhZyIsInN1cGVyIiwic3VwZXJPcHRpb25zIiwiY2FjaGVkU3VwZXJPcHRpb25zIiwibW9kaWZpZWRPcHRpb25zIiwicmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyIsImV4dGVuZE9wdGlvbnMiLCJtb2RpZmllZCIsImxhdGVzdCIsInNlYWxlZCIsInNlYWxlZE9wdGlvbnMiLCJpbml0VXNlIiwidXNlIiwicGx1Z2luIiwiaW5zdGFsbGVkUGx1Z2lucyIsIl9pbnN0YWxsZWRQbHVnaW5zIiwidW5zaGlmdCIsImluc3RhbGwiLCJpbml0TWl4aW4kMSIsIm1peGluIiwiaW5pdEV4dGVuZCIsIlN1cGVyIiwiU3VwZXJJZCIsImNhY2hlZEN0b3JzIiwiX0N0b3IiLCJTdWIiLCJWdWVDb21wb25lbnQiLCJpbml0UHJvcHMkMSIsImluaXRDb21wdXRlZCQxIiwiQ29tcCIsImluaXRBc3NldFJlZ2lzdGVycyIsImRlZmluaXRpb24iLCJnZXRDb21wb25lbnROYW1lIiwibWF0Y2hlcyIsInBhdHRlcm4iLCJwcnVuZUNhY2hlIiwia2VlcEFsaXZlSW5zdGFuY2UiLCJmaWx0ZXIiLCJjYWNoZWROb2RlIiwicHJ1bmVDYWNoZUVudHJ5IiwiY3VycmVudCIsImNhY2hlZCQkMSIsInBhdHRlcm5UeXBlcyIsIktlZXBBbGl2ZSIsImluY2x1ZGUiLCJleGNsdWRlIiwiY3JlYXRlZCIsImRlc3Ryb3llZCIsIm1vdW50ZWQiLCJyZWYkMSIsInBhcnNlSW50IiwiYnVpbHRJbkNvbXBvbmVudHMiLCJpbml0R2xvYmFsQVBJIiwiY29uZmlnRGVmIiwidXRpbCIsImRlZmluZVJlYWN0aXZlIiwiZGVsZXRlIiwib2JzZXJ2YWJsZSIsInNzckNvbnRleHQiLCJ2ZXJzaW9uIiwiYWNjZXB0VmFsdWUiLCJhdHRyIiwiaXNFbnVtZXJhdGVkQXR0ciIsImlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSIsImNvbnZlcnRFbnVtZXJhdGVkVmFsdWUiLCJpc0ZhbHN5QXR0clZhbHVlIiwiaXNCb29sZWFuQXR0ciIsInhsaW5rTlMiLCJpc1hsaW5rIiwiZ2V0WGxpbmtQcm9wIiwiZ2VuQ2xhc3NGb3JWbm9kZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGUiLCJtZXJnZUNsYXNzRGF0YSIsInJlbmRlckNsYXNzIiwic3RhdGljQ2xhc3MiLCJkeW5hbWljQ2xhc3MiLCJzdHJpbmdpZnlDbGFzcyIsInN0cmluZ2lmeUFycmF5Iiwic3RyaW5naWZ5T2JqZWN0Iiwic3RyaW5naWZpZWQiLCJuYW1lc3BhY2VNYXAiLCJzdmciLCJtYXRoIiwiaXNIVE1MVGFnIiwiaXNTVkciLCJ1bmtub3duRWxlbWVudENhY2hlIiwiSFRNTFVua25vd25FbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJpc1RleHRJbnB1dFR5cGUiLCJxdWVyeSIsInNlbGVjdGVkIiwicXVlcnlTZWxlY3RvciIsImNyZWF0ZUVsZW1lbnQkMSIsInRhZ05hbWUiLCJtdWx0aXBsZSIsInNldEF0dHJpYnV0ZSIsImNyZWF0ZUVsZW1lbnROUyIsIm5hbWVzcGFjZSIsImNyZWF0ZUNvbW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJuZXdOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJuZXh0U2libGluZyIsInNldFRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJzZXRTdHlsZVNjb3BlIiwic2NvcGVJZCIsIm5vZGVPcHMiLCJyZWdpc3RlclJlZiIsImlzUmVtb3ZhbCIsInJlZnMiLCJyZWZJbkZvciIsImVtcHR5Tm9kZSIsInNhbWVWbm9kZSIsInNhbWVJbnB1dFR5cGUiLCJ0eXBlQSIsInR5cGVCIiwiY3JlYXRlS2V5VG9PbGRJZHgiLCJiZWdpbklkeCIsImVuZElkeCIsImNyZWF0ZVBhdGNoRnVuY3Rpb24iLCJiYWNrZW5kIiwibW9kdWxlcyIsImVtcHR5Tm9kZUF0IiwiY3JlYXRlUm1DYiIsImNoaWxkRWxtIiwicmVtb3ZlTm9kZSIsImlzVW5rbm93bkVsZW1lbnQkJDEiLCJpblZQcmUiLCJpZ25vcmUiLCJjcmVhdGluZ0VsbUluVlByZSIsImNyZWF0ZUVsbSIsImluc2VydGVkVm5vZGVRdWV1ZSIsInBhcmVudEVsbSIsInJlZkVsbSIsIm5lc3RlZCIsIm93bmVyQXJyYXkiLCJzZXRTY29wZSIsImNyZWF0ZUNoaWxkcmVuIiwiaW52b2tlQ3JlYXRlSG9va3MiLCJpc1JlYWN0aXZhdGVkIiwiaW5pdENvbXBvbmVudCIsInJlYWN0aXZhdGVDb21wb25lbnQiLCJwZW5kaW5nSW5zZXJ0IiwiaXNQYXRjaGFibGUiLCJpbm5lck5vZGUiLCJ0cmFuc2l0aW9uIiwiYWN0aXZhdGUiLCJyZWYkJDEiLCJhbmNlc3RvciIsImFkZFZub2RlcyIsInN0YXJ0SWR4IiwiaW52b2tlRGVzdHJveUhvb2siLCJyZW1vdmVWbm9kZXMiLCJjaCIsInJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2siLCJybSIsInVwZGF0ZUNoaWxkcmVuIiwib2xkQ2giLCJuZXdDaCIsInJlbW92ZU9ubHkiLCJvbGRTdGFydElkeCIsIm5ld1N0YXJ0SWR4Iiwib2xkRW5kSWR4Iiwib2xkU3RhcnRWbm9kZSIsIm9sZEVuZFZub2RlIiwibmV3RW5kSWR4IiwibmV3U3RhcnRWbm9kZSIsIm5ld0VuZFZub2RlIiwib2xkS2V5VG9JZHgiLCJpZHhJbk9sZCIsInZub2RlVG9Nb3ZlIiwiY2FuTW92ZSIsInBhdGNoVm5vZGUiLCJmaW5kSWR4SW5PbGQiLCJjaGVja0R1cGxpY2F0ZUtleXMiLCJzZWVuS2V5cyIsImVuZCIsImh5ZHJhdGUiLCJwb3N0cGF0Y2giLCJpbnZva2VJbnNlcnRIb29rIiwiaW5pdGlhbCIsImh5ZHJhdGlvbkJhaWxlZCIsImlzUmVuZGVyZWRNb2R1bGUiLCJoYXNDaGlsZE5vZGVzIiwiaW5uZXJIVE1MIiwiY2hpbGRyZW5NYXRjaCIsImZpcnN0Q2hpbGQiLCJmdWxsSW52b2tlIiwiYXNzZXJ0Tm9kZU1hdGNoIiwibm9kZVR5cGUiLCJwYXRjaCIsImlzSW5pdGlhbFBhdGNoIiwiaXNSZWFsRWxlbWVudCIsImhhc0F0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIm9sZEVsbSIsIl9sZWF2ZUNiIiwicGF0Y2hhYmxlIiwiaSQyIiwidXBkYXRlRGlyZWN0aXZlcyIsInVuYmluZERpcmVjdGl2ZXMiLCJpc0NyZWF0ZSIsImlzRGVzdHJveSIsIm9sZERpcnMiLCJub3JtYWxpemVEaXJlY3RpdmVzJDEiLCJuZXdEaXJzIiwiZGlyc1dpdGhJbnNlcnQiLCJkaXJzV2l0aFBvc3RwYXRjaCIsIm9sZERpciIsImRpciIsImNhbGxIb29rJDEiLCJvbGRBcmciLCJhcmciLCJjb21wb25lbnRVcGRhdGVkIiwiY2FsbEluc2VydCIsImVtcHR5TW9kaWZpZXJzIiwibW9kaWZpZXJzIiwiZ2V0UmF3RGlyTmFtZSIsInJhd05hbWUiLCJiYXNlTW9kdWxlcyIsInVwZGF0ZUF0dHJzIiwiaW5oZXJpdEF0dHJzIiwib2xkQXR0cnMiLCJzZXRBdHRyIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJiYXNlU2V0QXR0ciIsInNldEF0dHJpYnV0ZU5TIiwiX19pZXBoIiwiYmxvY2tlciIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVDbGFzcyIsIm9sZERhdGEiLCJjbHMiLCJ0cmFuc2l0aW9uQ2xhc3MiLCJfdHJhbnNpdGlvbkNsYXNzZXMiLCJfcHJldkNsYXNzIiwia2xhc3MiLCJSQU5HRV9UT0tFTiIsIkNIRUNLQk9YX1JBRElPX1RPS0VOIiwibm9ybWFsaXplRXZlbnRzIiwiY2hhbmdlIiwidGFyZ2V0JDEiLCJjcmVhdGVPbmNlSGFuZGxlciQxIiwicmVtb3ZlJDIiLCJ1c2VNaWNyb3Rhc2tGaXgiLCJhZGQkMSIsImF0dGFjaGVkVGltZXN0YW1wIiwiX3dyYXBwZXIiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJEb2N1bWVudCIsInVwZGF0ZURPTUxpc3RlbmVycyIsImV2ZW50cyIsInN2Z0NvbnRhaW5lciIsInVwZGF0ZURPTVByb3BzIiwib2xkUHJvcHMiLCJjaGlsZE5vZGVzIiwiX3ZhbHVlIiwic3RyQ3VyIiwic2hvdWxkVXBkYXRlVmFsdWUiLCJjaGVja1ZhbCIsImNvbXBvc2luZyIsImlzTm90SW5Gb2N1c0FuZERpcnR5IiwiaXNEaXJ0eVdpdGhNb2RpZmllcnMiLCJub3RJbkZvY3VzIiwiYWN0aXZlRWxlbWVudCIsIl92TW9kaWZpZXJzIiwibnVtYmVyIiwidHJpbSIsInBhcnNlU3R5bGVUZXh0IiwiY3NzVGV4dCIsImxpc3REZWxpbWl0ZXIiLCJwcm9wZXJ0eURlbGltaXRlciIsIm5vcm1hbGl6ZVN0eWxlRGF0YSIsIm5vcm1hbGl6ZVN0eWxlQmluZGluZyIsInN0YXRpY1N0eWxlIiwiYmluZGluZ1N0eWxlIiwiZ2V0U3R5bGUiLCJjaGVja0NoaWxkIiwic3R5bGVEYXRhIiwiY3NzVmFyUkUiLCJpbXBvcnRhbnRSRSIsInNldFByb3AiLCJzZXRQcm9wZXJ0eSIsIm5vcm1hbGl6ZWROYW1lIiwibm9ybWFsaXplIiwidmVuZG9yTmFtZXMiLCJlbXB0eVN0eWxlIiwiY2FwTmFtZSIsInVwZGF0ZVN0eWxlIiwib2xkU3RhdGljU3R5bGUiLCJvbGRTdHlsZUJpbmRpbmciLCJub3JtYWxpemVkU3R5bGUiLCJvbGRTdHlsZSIsIm5ld1N0eWxlIiwid2hpdGVzcGFjZVJFIiwiYWRkQ2xhc3MiLCJjbGFzc0xpc3QiLCJnZXRBdHRyaWJ1dGUiLCJyZW1vdmVDbGFzcyIsInRhciIsInJlc29sdmVUcmFuc2l0aW9uIiwiY3NzIiwiYXV0b0Nzc1RyYW5zaXRpb24iLCJlbnRlckNsYXNzIiwiZW50ZXJUb0NsYXNzIiwiZW50ZXJBY3RpdmVDbGFzcyIsImxlYXZlQ2xhc3MiLCJsZWF2ZVRvQ2xhc3MiLCJsZWF2ZUFjdGl2ZUNsYXNzIiwiaGFzVHJhbnNpdGlvbiIsIlRSQU5TSVRJT04iLCJBTklNQVRJT04iLCJ0cmFuc2l0aW9uUHJvcCIsInRyYW5zaXRpb25FbmRFdmVudCIsImFuaW1hdGlvblByb3AiLCJhbmltYXRpb25FbmRFdmVudCIsIm9udHJhbnNpdGlvbmVuZCIsIm9ud2Via2l0dHJhbnNpdGlvbmVuZCIsIm9uYW5pbWF0aW9uZW5kIiwib253ZWJraXRhbmltYXRpb25lbmQiLCJyYWYiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJuZXh0RnJhbWUiLCJhZGRUcmFuc2l0aW9uQ2xhc3MiLCJ0cmFuc2l0aW9uQ2xhc3NlcyIsInJlbW92ZVRyYW5zaXRpb25DbGFzcyIsIndoZW5UcmFuc2l0aW9uRW5kcyIsImdldFRyYW5zaXRpb25JbmZvIiwicHJvcENvdW50IiwiZW5kZWQiLCJvbkVuZCIsInRyYW5zZm9ybVJFIiwic3R5bGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRyYW5zaXRpb25EZWxheXMiLCJ0cmFuc2l0aW9uRHVyYXRpb25zIiwidHJhbnNpdGlvblRpbWVvdXQiLCJnZXRUaW1lb3V0IiwiYW5pbWF0aW9uRGVsYXlzIiwiYW5pbWF0aW9uRHVyYXRpb25zIiwiYW5pbWF0aW9uVGltZW91dCIsImhhc1RyYW5zZm9ybSIsImRlbGF5cyIsImR1cmF0aW9ucyIsInRvTXMiLCJzIiwiZW50ZXIiLCJ0b2dnbGVEaXNwbGF5IiwiY2FuY2VsbGVkIiwiX2VudGVyQ2IiLCJhcHBlYXJDbGFzcyIsImFwcGVhclRvQ2xhc3MiLCJhcHBlYXJBY3RpdmVDbGFzcyIsImJlZm9yZUVudGVyIiwiYWZ0ZXJFbnRlciIsImVudGVyQ2FuY2VsbGVkIiwiYmVmb3JlQXBwZWFyIiwiYXBwZWFyIiwiYWZ0ZXJBcHBlYXIiLCJhcHBlYXJDYW5jZWxsZWQiLCJkdXJhdGlvbiIsInRyYW5zaXRpb25Ob2RlIiwiaXNBcHBlYXIiLCJzdGFydENsYXNzIiwiYWN0aXZlQ2xhc3MiLCJ0b0NsYXNzIiwiYmVmb3JlRW50ZXJIb29rIiwiZW50ZXJIb29rIiwiYWZ0ZXJFbnRlckhvb2siLCJlbnRlckNhbmNlbGxlZEhvb2siLCJleHBsaWNpdEVudGVyRHVyYXRpb24iLCJleHBlY3RzQ1NTIiwidXNlcldhbnRzQ29udHJvbCIsImdldEhvb2tBcmd1bWVudHNMZW5ndGgiLCJzaG93IiwicGVuZGluZ05vZGUiLCJfcGVuZGluZyIsImlzVmFsaWREdXJhdGlvbiIsImxlYXZlIiwiYmVmb3JlTGVhdmUiLCJhZnRlckxlYXZlIiwibGVhdmVDYW5jZWxsZWQiLCJkZWxheUxlYXZlIiwiZXhwbGljaXRMZWF2ZUR1cmF0aW9uIiwicGVyZm9ybUxlYXZlIiwiY2hlY2tEdXJhdGlvbiIsImludm9rZXJGbnMiLCJfZW50ZXIiLCJwbGF0Zm9ybU1vZHVsZXMiLCJ2bW9kZWwiLCJ0cmlnZ2VyIiwiZGlyZWN0aXZlIiwiYmluZGluZyIsIl92T3B0aW9ucyIsInNldFNlbGVjdGVkIiwiZ2V0VmFsdWUiLCJvbkNvbXBvc2l0aW9uU3RhcnQiLCJvbkNvbXBvc2l0aW9uRW5kIiwicHJldk9wdGlvbnMiLCJjdXJPcHRpb25zIiwibyIsIm5lZWRSZXNldCIsImhhc05vTWF0Y2hpbmdPcHRpb24iLCJhY3R1YWxseVNldFNlbGVjdGVkIiwiaXNNdWx0aXBsZSIsIm9wdGlvbiIsInNlbGVjdGVkSW5kZXgiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwibG9jYXRlTm9kZSIsInRyYW5zaXRpb24kJDEiLCJvcmlnaW5hbERpc3BsYXkiLCJfX3ZPcmlnaW5hbERpc3BsYXkiLCJkaXNwbGF5IiwidW5iaW5kIiwicGxhdGZvcm1EaXJlY3RpdmVzIiwidHJhbnNpdGlvblByb3BzIiwibW9kZSIsImdldFJlYWxDaGlsZCIsImNvbXBPcHRpb25zIiwiZXh0cmFjdFRyYW5zaXRpb25EYXRhIiwicGxhY2Vob2xkZXIiLCJoIiwicmF3Q2hpbGQiLCJoYXNQYXJlbnRUcmFuc2l0aW9uIiwiaXNTYW1lQ2hpbGQiLCJvbGRDaGlsZCIsImlzTm90VGV4dE5vZGUiLCJpc1ZTaG93RGlyZWN0aXZlIiwiVHJhbnNpdGlvbiIsIl9sZWF2aW5nIiwib2xkUmF3Q2hpbGQiLCJkZWxheWVkTGVhdmUiLCJtb3ZlQ2xhc3MiLCJUcmFuc2l0aW9uR3JvdXAiLCJiZWZvcmVNb3VudCIsImtlcHQiLCJwcmV2Q2hpbGRyZW4iLCJyYXdDaGlsZHJlbiIsInRyYW5zaXRpb25EYXRhIiwicmVtb3ZlZCIsImMkMSIsInBvcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInVwZGF0ZWQiLCJoYXNNb3ZlIiwiY2FsbFBlbmRpbmdDYnMiLCJyZWNvcmRQb3NpdGlvbiIsImFwcGx5VHJhbnNsYXRpb24iLCJfcmVmbG93IiwiYm9keSIsIm9mZnNldEhlaWdodCIsIm1vdmVkIiwidHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiX21vdmVDYiIsInByb3BlcnR5TmFtZSIsIl9oYXNNb3ZlIiwiY2xvbmVOb2RlIiwibmV3UG9zIiwib2xkUG9zIiwiZHgiLCJsZWZ0IiwiZHkiLCJ0b3AiLCJwbGF0Zm9ybUNvbXBvbmVudHMiLCJ0YWJsZSIsInRhYmxlQ2xhc3MiLCJsb2FkaW5nQ2xhc3MiLCJzb3J0YWJsZUljb24iLCJhc2NlbmRpbmdJY29uIiwiZGVzY2VuZGluZ0ljb24iLCJhc2NlbmRpbmdDbGFzcyIsImRlc2NlbmRpbmdDbGFzcyIsImhhbmRsZUljb24iLCJyZW5kZXJJY29uIiwiY2xhc3NlcyIsInBhZ2luYXRpb24iLCJ3cmFwcGVyQ2xhc3MiLCJkaXNhYmxlZENsYXNzIiwicGFnZUNsYXNzIiwibGlua0NsYXNzIiwiaWNvbnMiLCJmaXJzdCIsInByZXYiLCJwYWdpbmF0aW9uSW5mbyIsImluZm9DbGFzcyIsInJhbmRvbSIsInN1YnN0cmluZyIsIkNvbnRlbnRMb2FkZXIiLCJ3aWR0aCIsImhlaWdodCIsInNwZWVkIiwicHJlc2VydmVBc3BlY3RSYXRpbyIsImJhc2VVcmwiLCJwcmltYXJ5Q29sb3IiLCJzZWNvbmRhcnlDb2xvciIsInByaW1hcnlPcGFjaXR5Iiwic2Vjb25kYXJ5T3BhY2l0eSIsInVuaXF1ZUtleSIsImFuaW1hdGUiLCJfcmVmIiwiaWRDbGlwIiwiaWRHcmFkaWVudCIsIl9tZXJnZUpTWFByb3BzIiwidmlld0JveCIsImZpbGwiLCJ4IiwieSIsInJ4IiwicnkiLCJvZmZzZXQiLCJhdHRyaWJ1dGVOYW1lIiwiZHVyIiwicmVwZWF0Q291bnQiLCJCdWxsZXRMaXN0TG9hZGVyIiwiY3giLCJjeSIsInIiLCJDb2RlTG9hZGVyIiwiRmFjZWJvb2tMb2FkZXIiLCJMaXN0TG9hZGVyIiwiSW5zdGFncmFtTG9hZGVyIiwiVnVlRXZlbnRzIiwiSUQiLCJlbGVtZW50IiwiaW5pdGlhbFN0b3JlIiwiZGF0YXNldCIsIkFwcCIsIkRFRkFVTFRTIiwibGFiZWxLZXkiLCJ2YWx1ZUtleSIsImNoaWxkS2V5IiwiaWNvbktleSIsIml0ZW1LZXkiLCJpdGVtVHJpZ2dlciIsInBhdGhCYXIiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJjb2wiLCJ1cmwiLCJpdGVtUHJlcGVuZCIsIml0ZW1Db250ZW50IiwiaXRlbUFwcGVuZCIsIkZpbmRlciIsIiRlbWl0dGVyIiwiRXZlbnRFbWl0dGVyIiwiJCIsIm9mZiIsImNsaWNrRXZlbnQiLCJrZXlkb3duRXZlbnQiLCJpdGVtU2VsZWN0ZWQiLCJhZGRDb2x1bW4iLCJuYXZpZ2F0ZSIsImdvVG8iLCJjcmVhdGVDb2x1bW4iLCJjcmVhdGVQYXRoQmFyIiwicHJldmVudERlZmF1bHQiLCJsb2NhdGlvbiIsImRlZmF1bHRQYXRoIiwiY3JlYXRlTGlzdCIsImRpdiIsImFwcGVuZCIsIkVycm9yIiwic2libGluZ3MiLCJpbnNlcnRBZnRlciIsImNvbHVtbiIsImNsb3Nlc3QiLCJwcmV2ZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29kZXMiLCJrZXlDb2RlIiwiZGlyZWN0aW9uIiwiX2l0ZW0iLCJmaW5kIiwibmV4dEFsbCIsImZvY3VzIiwic2Nyb2xsVG8iLCJwYWdlWE9mZnNldCIsInBhZ2VZT2Zmc2V0IiwidXBkYXRlUGF0aEJhciIsIm5ld0NvbHVtbiIsImZpbmRMYXN0QWN0aXZlIiwiaHJlZiIsImlzSW5WaWV3Iiwic2Nyb2xsVG9WaWV3IiwiYml0Iiwic2VsZWN0UGF0aCIsImNyZWF0ZUl0ZW0iLCJmcmFnbWVudHMiLCJyZWR1Y2UiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJsaXN0SXRlbSIsImxpc3RJdGVtQ2xhc3NlcyIsImxpbmsiLCJjcmVhdGVJdGVtQ29udGVudCIsImFjdGl2ZUl0ZW1zIiwiaXRlbUtleXMiLCJlbXB0eSIsImVhY2giLCJhY3RpdmVJdGVtIiwiaXNMYXN0IiwiaWNvbiIsImNoaWxkX2NvdW50IiwiaHRtbCIsInBhcnRpYWwiLCJjb250YWluZXJIZWlnaHQiLCJlbGVtZW50VG9wIiwiZWxlbWVudEJvdHRvbSIsImlzVG90YWwiLCJpc1BhcnRpYWwiLCJib3QiLCJib3R0b20iLCJub3dfdG9wIiwibm93X2JvdCIsInNjcm9sbF9ieSIsInNjcm9sbFRvcCIsIlhIUlVVSUQiLCJHUkFWX0NPTkZJRyIsIkdyYXZDb25maWciLCJHcmF2QWRtaW4iLCJJbnN0YW5jZXMiLCJpc0luVmlld3BvcnQiLCJib3VuZGluZyIsInRpdGxlYmFyIiwiaW5uZXJIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRIZWlnaHQiLCJyaWdodCIsImlubmVyV2lkdGgiLCJjbGllbnRXaWR0aCIsIkZsZXhQYWdlcyIsImRhdGFMb2FkIiwiZmluZGVyIiwiZ2V0SW5pdGlhbFJvdXRlIiwic2V0SW5pdGlhbFJvdXRlIiwicm91dGUiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsV2lkdGgiLCJmaWx0ZXJzIiwiZ2V0U3RvcmUiLCJVVUlEIiwic3RhcnRMb2FkZXIiLCJ3aXRoRmlsdGVycyIsImN1cnJlbnRfdXJsIiwiYXNzaWduIiwiYjY0X2VuY29kZV91bmljb2RlIiwiYWN0aW9uIiwic3VjY2VzcyIsInJlc3BvbnNlIiwic3RvcExvYWRlciIsInN0YXR1cyIsImNyZWF0ZUVycm9yQ29sdW1uIiwibG9hZGluZ0luZGljYXRvciIsImNyZWF0ZUxvYWRpbmdDb2x1bW4iLCJmaWx0ZXJzX2hpdCIsImZyYWciLCJ0aXRsZSIsImV4dHJhcyIsInB1Ymxpc2hlZCIsImxhbmciLCJ0cmFuc2xhdGVkIiwiYXBwZW5kVG8iLCJwdWJsaXNoZWRfZGF0ZSIsInVucHVibGlzaGVkX2RhdGUiLCJjbG9jayIsImFjdGlvbnMiLCJkb3Rkb3Rkb3QiLCJMQU5HX1VSTCIsInRhZ3MiLCJsYW5ncyIsInRyYW5zbGF0aW9ucyIsImNhblByZXZpZXciLCJpbmNsdWRlcyIsImNhbkVkaXQiLCJjYW5Db3B5IiwiY2FuRGVsZXRlIiwidWwiLCJhZG1pbl9ub25jZSIsInRlbXBsYXRlIiwiYnV0dG9uIiwiY291bnQiLCJhcnJvdyIsImJ0b2EiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0b1NvbGlkQnl0ZXMiLCJwMSIsImZyb21DaGFyQ29kZSIsImI2NF9kZWNvZGVfdW5pY29kZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImF0b2IiLCJ1cGRhdGVQb3NpdGlvbiIsInNjcm9sbGluZ0NvbHVtbiIsInBhZ2VDb2x1bW5zIiwiZ3JvdXAiLCJkcm9wZG93biIsImJ1dHRvbkluVmlldyIsImJ1dHRvbkNsaWVudFJlY3QiLCJkcm9wZG93bkNsaWVudFJlY3QiLCJ0YXJnZXRDbGllbnRSZWN0IiwiY2xvc2VHaG9zdERyb3Bkb3ducyIsIm9wZW5lZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzY3JvbGxpbmdEb2N1bWVudCIsImNvbnRhaW5zIiwidG9nZ2xlIiwiY29udGFpbmVyU2Nyb2xsZXIiLCJzY3JvbGwiLCJzY3JvbGxFdmVudCIsIkV2ZW50IiwiZXNjYXBlUmUiLCJjb21wdXRlRXhwaXJlcyIsImxhc3RDaCIsImV4cGlyZXMiLCJzZXRGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwic2V0TW9udGgiLCJnZXRNb250aCIsInNldERhdGUiLCJnZXREYXRlIiwic2V0SG91cnMiLCJnZXRIb3VycyIsInNldE1pbnV0ZXMiLCJnZXRNaW51dGVzIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJjb252ZXJ0IiwidG9VVENTdHJpbmciLCJfZXh0ZW5kcyIsImlzRW5hYmxlZCIsInJlIiwiY29va2llIiwiZW5hYmxlZCIsImRlY29kZXIiLCJyZUtleSIsImV4ZWMiLCJnZXRBbGwiLCJjb29raWVzIiwiZW5jb2RlciIsImF0dHJzU3RyIiwidmFsdWVTdHIiLCJuZXdDb29raWUiLCJnZXRSYXciLCJzZXRSYXciLCJpbnB1dHMiLCJ0cmFja011bHRpIiwiaW5kZXRlcm1pbmF0ZSIsImNoZWNrZWQiLCJtdWx0aSIsInBhcnNlIiwiZ2V0Q29va2llIiwic2V0U3RvcmUiLCJzdG9yZSIsInNhbWVzaXRlIiwic2V0Q29va2llIiwicGFyc2VkIiwiRmxleFBhZ2VzSW5zdGFuY2UiLCJSZUxvYWQiLCJmcmVzaCIsInNlYXJjaCIsImxvYWRlciIsImNvbnRlbnQiLCJncmF2Q29uZmlnIiwiZ2V0RmlsdGVycyIsImlzU2VhcmNoRm9jdXNlZCIsImNvbnRlbnRXcmFwcGVyIiwic2Nyb2xsUG9zaXRpb24iLCJmaWx0ZXJUeXBlIiwiaW5wdXQiLCJ3cmFwcGVyIiwiX2NoZWNrU3RhdHVzIiwi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YixDQUEwQixNQUExQixNQUFzQyxpQkFBdkUsRUFBMEY7QUFDdEY0ZCxtQkFBZSxDQUFDRyxNQUFoQjtBQUNBSCxtQkFBZTtBQUNsQjtBQUNKLENBTEQsRTs7QUN4Q0E7QUFDQSIsImZpbGUiOiI3NTEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBWdWUuanMgdjIuNi4xMlxuICogKGMpIDIwMTQtMjAyMCBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxudmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZy5cbmZ1bmN0aW9uIGlzVW5kZWYgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVmICh2KSB7XG4gIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc1RydWUgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHRydWVcbn1cblxuZnVuY3Rpb24gaXNGYWxzZSAodikge1xuICByZXR1cm4gdiA9PT0gZmFsc2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSwgZS5nLiwgW29iamVjdCBPYmplY3RdLlxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gdG9SYXdUeXBlICh2YWx1ZSkge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpXG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSAodmFsKSB7XG4gIHJldHVybiAoXG4gICAgaXNEZWYodmFsKSAmJlxuICAgIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWwuY2F0Y2ggPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiB0b1N0cmluZyAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbFxuICAgID8gJydcbiAgICA6IEFycmF5LmlzQXJyYXkodmFsKSB8fCAoaXNQbGFpbk9iamVjdCh2YWwpICYmIHZhbC50b1N0cmluZyA9PT0gX3RvU3RyaW5nKVxuICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICA6IFN0cmluZyh2YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dlckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhbiBhcnJheS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQgKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAoZnVuY3Rpb24gY2FjaGVkRm4gKHN0cikge1xuICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKVxuICB9KVxufVxuXG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbnZhciBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG59KTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICovXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbn0pO1xuXG4vKipcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gKi9cbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnLSQxJykudG9Mb3dlckNhc2UoKVxufSk7XG5cbi8qKlxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxuICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cbiAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuXG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxuZnVuY3Rpb24gbmF0aXZlQmluZCAoZm4sIGN0eCkge1xuICByZXR1cm4gZm4uYmluZChjdHgpXG59XG5cbnZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgPyBuYXRpdmVCaW5kXG4gIDogcG9seWZpbGxCaW5kO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF5LlxuICovXG5mdW5jdGlvbiB0b0FycmF5IChsaXN0LCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIHZhciBpID0gbGlzdC5sZW5ndGggLSBzdGFydDtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkge1xuICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQgKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdCAoYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyW2ldKSB7XG4gICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAqL1xuZnVuY3Rpb24gbm9vcCAoYSwgYiwgYykge31cblxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCcsXG4gICdzZXJ2ZXJQcmVmZXRjaCdcbl07XG5cbi8qICAqL1xuXG5cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICovXG4gIGRldnRvb2xzOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAqL1xuICBwZXJmb3JtYW5jZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAqL1xuICBlcnJvckhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgKi9cbiAgd2FybkhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgKi9cbiAgaWdub3JlZEVsZW1lbnRzOiBbXSxcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAqL1xuICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAqL1xuICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIG11c3RVc2VQcm9wOiBubyxcblxuICAvKipcbiAgICogUGVyZm9ybSB1cGRhdGVzIGFzeW5jaHJvbm91c2x5LiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFZ1ZSBUZXN0IFV0aWxzXG4gICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAqL1xuICBhc3luYzogdHJ1ZSxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICovXG4gIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG59KTtcblxuLyogICovXG5cbi8qKlxuICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICogdXNpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1My9zZW1hbnRpY3Mtc2NyaXB0aW5nLmh0bWwjcG90ZW50aWFsY3VzdG9tZWxlbWVudG5hbWVcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAqL1xudmFyIHVuaWNvZGVSZWdFeHAgPSAvYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICB2YXIgYyA9IChzdHIgKyAnJykuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1RlxufVxuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYgKG9iaiwga2V5LCB2YWwsIGVudW1lcmFibGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgdmFsdWU6IHZhbCxcbiAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNpbXBsZSBwYXRoLlxuICovXG52YXIgYmFpbFJFID0gbmV3IFJlZ0V4cCgoXCJbXlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiLiRfXFxcXGRdXCIpKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFvYmopIHsgcmV0dXJuIH1cbiAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG52YXIgaGFzUHJvdG8gPSAnX19wcm90b19fJyBpbiB7fTtcblxuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIGluV2VleCA9IHR5cGVvZiBXWEVudmlyb25tZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIVdYRW52aXJvbm1lbnQucGxhdGZvcm07XG52YXIgd2VleFBsYXRmb3JtID0gaW5XZWV4ICYmIFdYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKTtcbnZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzSUUgPSBVQSAmJiAvbXNpZXx0cmlkZW50Ly50ZXN0KFVBKTtcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xudmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xudmFyIGlzQW5kcm9pZCA9IChVQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwKSB8fCAod2VleFBsYXRmb3JtID09PSAnYW5kcm9pZCcpO1xudmFyIGlzSU9TID0gKFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSkpIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdpb3MnKTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xudmFyIGlzUGhhbnRvbUpTID0gVUEgJiYgL3BoYW50b21qcy8udGVzdChVQSk7XG52YXIgaXNGRiA9IFVBICYmIFVBLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLyk7XG5cbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbnZhciBuYXRpdmVXYXRjaCA9ICh7fSkud2F0Y2g7XG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSkpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbi8vIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgY2FuIHNldCBWVUVfRU5WXG52YXIgX2lzU2VydmVyO1xudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBfaXNTZXJ2ZXJcbn07XG5cbi8vIGRldGVjdCBkZXZ0b29sc1xudmFyIGRldnRvb2xzID0gaW5Ccm93c2VyICYmIHdpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUgKEN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTeW1ib2wpICYmXG4gIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbmlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxuICBfU2V0ID0gU2V0O1xufSBlbHNlIHtcbiAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICBfU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIHRyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm07XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkID0gMDtcblxuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKi9cbnZhciBEZXAgPSBmdW5jdGlvbiBEZXAgKCkge1xuICB0aGlzLmlkID0gdWlkKys7XG4gIHRoaXMuc3VicyA9IFtdO1xufTtcblxuRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiBhZGRTdWIgKHN1Yikge1xuICB0aGlzLnN1YnMucHVzaChzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiByZW1vdmVTdWIgKHN1Yikge1xuICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICBpZiAoRGVwLnRhcmdldCkge1xuICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICB9XG59O1xuXG5EZXAucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSAoKSB7XG4gIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXG4gICAgLy8gd2UgbmVlZCB0byBzb3J0IHRoZW0gbm93IHRvIG1ha2Ugc3VyZSB0aGV5IGZpcmUgaW4gY29ycmVjdFxuICAgIC8vIG9yZGVyXG4gICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIFRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIFRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2Ugb25seSBvbmUgd2F0Y2hlclxuLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG5EZXAudGFyZ2V0ID0gbnVsbDtcbnZhciB0YXJnZXRTdGFjayA9IFtdO1xuXG5mdW5jdGlvbiBwdXNoVGFyZ2V0ICh0YXJnZXQpIHtcbiAgdGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICB0YXJnZXRTdGFjay5wb3AoKTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xufVxuXG4vKiAgKi9cblxudmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBlbG0sXG4gIGNvbnRleHQsXG4gIGNvbXBvbmVudE9wdGlvbnMsXG4gIGFzeW5jRmFjdG9yeVxuKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZWxtID0gZWxtO1xuICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLmZuQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mbk9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5TY29wZUlkID0gdW5kZWZpbmVkO1xuICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4gIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICB0aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XG4gIHRoaXMuaXNSb290SW5zZXJ0ID0gdHJ1ZTtcbiAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc0Nsb25lZCA9IGZhbHNlO1xuICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XG4gIHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjaGlsZDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4vLyBERVBSRUNBVEVEOiBhbGlhcyBmb3IgY29tcG9uZW50SW5zdGFuY2UgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvdG90eXBlQWNjZXNzb3JzLmNoaWxkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2Vcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWTm9kZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gIG5vZGUudGV4dCA9IHRleHQ7XG4gIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgcmV0dXJuIG5vZGVcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gIHJldHVybiBuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpXG59XG5cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlICh2bm9kZSkge1xuICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKFxuICAgIHZub2RlLnRhZyxcbiAgICB2bm9kZS5kYXRhLFxuICAgIC8vICM3OTc1XG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgLy8gYSBjaGlsZC5cbiAgICB2bm9kZS5jaGlsZHJlbiAmJiB2bm9kZS5jaGlsZHJlbi5zbGljZSgpLFxuICAgIHZub2RlLnRleHQsXG4gICAgdm5vZGUuZWxtLFxuICAgIHZub2RlLmNvbnRleHQsXG4gICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICB2bm9kZS5hc3luY0ZhY3RvcnlcbiAgKTtcbiAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gIGNsb25lZC5pc1N0YXRpYyA9IHZub2RlLmlzU3RhdGljO1xuICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICBjbG9uZWQuZm5Db250ZXh0ID0gdm5vZGUuZm5Db250ZXh0O1xuICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICBjbG9uZWQuYXN5bmNNZXRhID0gdm5vZGUuYXN5bmNNZXRhO1xuICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICByZXR1cm4gY2xvbmVkXG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7XG5cbnZhciBtZXRob2RzVG9QYXRjaCA9IFtcbiAgJ3B1c2gnLFxuICAncG9wJyxcbiAgJ3NoaWZ0JyxcbiAgJ3Vuc2hpZnQnLFxuICAnc3BsaWNlJyxcbiAgJ3NvcnQnLFxuICAncmV2ZXJzZSdcbl07XG5cbi8qKlxuICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gKi9cbm1ldGhvZHNUb1BhdGNoLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2QsIGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEluIHNvbWUgY2FzZXMgd2UgbWF5IHdhbnQgdG8gZGlzYWJsZSBvYnNlcnZhdGlvbiBpbnNpZGUgYSBjb21wb25lbnQnc1xuICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICovXG52YXIgc2hvdWxkT2JzZXJ2ZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyAodmFsdWUpIHtcbiAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLmRlcCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmIChoYXNQcm90bykge1xuICAgICAgcHJvdG9BdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5QXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvXG4gKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAqIHZhbHVlIHR5cGUgaXMgT2JqZWN0LlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iaiwga2V5c1tpXSk7XG4gIH1cbn07XG5cbi8qKlxuICogT2JzZXJ2ZSBhIGxpc3Qgb2YgQXJyYXkgaXRlbXMuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiBvYnNlcnZlQXJyYXkgKGl0ZW1zKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2JzZXJ2ZShpdGVtc1tpXSk7XG4gIH1cbn07XG5cbi8vIGhlbHBlcnNcblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBpbnRlcmNlcHRpbmdcbiAqIHRoZSBwcm90b3R5cGUgY2hhaW4gdXNpbmcgX19wcm90b19fXG4gKi9cbmZ1bmN0aW9uIHByb3RvQXVnbWVudCAodGFyZ2V0LCBzcmMpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbiAgdGFyZ2V0Ll9fcHJvdG9fXyA9IHNyYztcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xufVxuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYjtcbiAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgb2IgPSB2YWx1ZS5fX29iX187XG4gIH0gZWxzZSBpZiAoXG4gICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBvYi52bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVhY3RpdmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZSQkMSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxvd1xuKSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgaWYgKCghZ2V0dGVyIHx8IHNldHRlcikgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhbCA9IG9ialtrZXldO1xuICB9XG5cbiAgdmFyIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKHZhbCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIgKCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLidcbiAgICApO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoIW9iKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gIG9iLmRlcC5ub3RpZnkoKTtcbiAgcmV0dXJuIHZhbFxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb3BlcnR5IGFuZCB0cmlnZ2VyIGNoYW5nZSBpZiBuZWNlc3NhcnkuXG4gKi9cbmZ1bmN0aW9uIGRlbCAodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLidcbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XTtcbiAgaWYgKCFvYikge1xuICAgIHJldHVyblxuICB9XG4gIG9iLmRlcC5ub3RpZnkoKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICBmb3IgKHZhciBlID0gKHZvaWQgMCksIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IHZhbHVlW2ldO1xuICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBkZXBlbmRBcnJheShlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICdjcmVhdGlvbiB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0U3RyYXQocGFyZW50LCBjaGlsZClcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhICh0bywgZnJvbSkge1xuICBpZiAoIWZyb20pIHsgcmV0dXJuIHRvIH1cbiAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICA/IFJlZmxlY3Qub3duS2V5cyhmcm9tKVxuICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgIGlmIChrZXkgPT09ICdfX29iX18nKSB7IGNvbnRpbnVlIH1cbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0b1ZhbCAhPT0gZnJvbVZhbCAmJlxuICAgICAgaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICApIHtcbiAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIC8vIGluIGEgVnVlLmV4dGVuZCBtZXJnZSwgYm90aCBzaG91bGQgYmUgZnVuY3Rpb25zXG4gICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgfVxuICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAvLyBtZXJnZWQgcmVzdWx0IG9mIGJvdGggZnVuY3Rpb25zLi4uIG5vIG5lZWQgdG9cbiAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuICgpIHtcbiAgICAgIHJldHVybiBtZXJnZURhdGEoXG4gICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbiAoKSB7XG4gICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICB2bVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pXG59O1xuXG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbFxuKSB7XG4gIHZhciByZXMgPSBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWw7XG4gIHJldHVybiByZXNcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICA6IHJlc1xufVxuXG5mdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICBpZiAoY2hpbGRWYWwpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSB7fTtcbiAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGRWYWwpIHtcbiAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXkkMV07XG4gICAgaWYgKHBhcmVudCAmJiAhQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICB9XG4gICAgcmV0W2tleSQxXSA9IHBhcmVudFxuICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5qZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgaWYgKCFpbmplY3QpIHsgcmV0dXJuIH1cbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gIH1cblxuICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG5cbiAgLy8gQXBwbHkgZXh0ZW5kcyBhbmQgbWl4aW5zIG9uIHRoZSBjaGlsZCBvcHRpb25zLFxuICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgLy8gT25seSBtZXJnZWQgb3B0aW9ucyBoYXMgdGhlIF9iYXNlIHByb3BlcnR5LlxuICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcbiAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gIHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAvLyBza2lwIHZhbGlkYXRpb24gZm9yIHdlZXggcmVjeWNsZS1saXN0IGNoaWxkIGNvbXBvbmVudCBwcm9wc1xuICAgICEoZmFsc2UpXG4gICkge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICsga2V5ICsgJ1wiOiAnICtcbiAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgaWYgKHZtICYmIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB2bS5fcHJvcHNba2V5XVxuICB9XG4gIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgPyBkZWYuY2FsbCh2bSlcbiAgICA6IGRlZlxufVxuXG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcCAoXG4gIHByb3AsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICB2bSxcbiAgYWJzZW50XG4pIHtcbiAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XG4gICAgd2FybihcbiAgICAgICdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlID0gW3R5cGVdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoICYmICF2YWxpZDsgaSsrKSB7XG4gICAgICB2YXIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICB9XG4gIH1cblxuICBpZiAoIXZhbGlkKSB7XG4gICAgd2FybihcbiAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgdmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUgKGZuKSB7XG4gIHZhciBtYXRjaCA9IGZuICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbn1cblxuZnVuY3Rpb24gaXNTYW1lVHlwZSAoYSwgYikge1xuICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlSW5kZXggKHR5cGUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgcmV0dXJuIGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlcywgdHlwZSkgPyAwIDogLTFcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXNbaV0sIHR5cGUpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlIChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICB2YXIgbWVzc2FnZSA9IFwiSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLlwiICtcbiAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgfVxuICBtZXNzYWdlICs9IFwiLCBnb3QgXCIgKyByZWNlaXZlZFR5cGUgKyBcIiBcIjtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCJ3aXRoIHZhbHVlIFwiICsgcmVjZWl2ZWRWYWx1ZSArIFwiLlwiO1xuICB9XG4gIHJldHVybiBtZXNzYWdlXG59XG5cbmZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIHJldHVybiAoXCJcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIChcIlwiICsgKE51bWJlcih2YWx1ZSkpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgdmFyIGV4cGxpY2l0VHlwZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xuICByZXR1cm4gZXhwbGljaXRUeXBlcy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KVxufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4gKCkge1xuICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybiBhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nOyB9KVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIGlmICh2bSkge1xuICAgICAgdmFyIGN1ciA9IHZtO1xuICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgIGlmIChob29rcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gaG9va3NbaV0uY2FsbChjdXIsIGVyciwgdm0sIGluZm8pID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHsgcmV0dXJuIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZSwgY3VyLCAnZXJyb3JDYXB0dXJlZCBob29rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgaGFuZGxlcixcbiAgY29udGV4dCxcbiAgYXJncyxcbiAgdm0sXG4gIGluZm9cbikge1xuICB2YXIgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xuICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgLy8gYXZvaWQgY2F0Y2ggdHJpZ2dlcmluZyBtdWx0aXBsZSB0aW1lcyB3aGVuIG5lc3RlZCBjYWxsc1xuICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAoY29uZmlnLmVycm9ySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgaWYgKGUgIT09IGVycikge1xuICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgLy8gVGVjaG5pY2FsbHkgaXQgbGV2ZXJhZ2VzIHRoZSAobWFjcm8pIHRhc2sgcXVldWUsXG4gIC8vIGJ1dCBpdCBpcyBzdGlsbCBhIGJldHRlciBjaG9pY2UgdGhhbiBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KGZsdXNoQ2FsbGJhY2tzLCAwKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV4dFRpY2sgKGNiLCBjdHgpIHtcbiAgdmFyIF9yZXNvbHZlO1xuICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKGN0eCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoIXBlbmRpbmcpIHtcbiAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICB0aW1lckZ1bmMoKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUHJveHkgKi9cblxudmFyIGluaXRQcm94eTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGFsbG93ZWRHbG9iYWxzID0gbWFrZU1hcChcbiAgICAnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTiwnICtcbiAgICAncGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsJyArXG4gICAgJ01hdGgsTnVtYmVyLERhdGUsQXJyYXksT2JqZWN0LEJvb2xlYW4sU3RyaW5nLFJlZ0V4cCxNYXAsU2V0LEpTT04sSW50bCwnICtcbiAgICAncmVxdWlyZScgLy8gZm9yIFdlYnBhY2svQnJvd3NlcmlmeVxuICApO1xuXG4gIHZhciB3YXJuTm9uUHJlc2VudCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHdhcm4oXG4gICAgICBcIlByb3BlcnR5IG9yIG1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgb24gdGhlIGluc3RhbmNlIGJ1dCBcIiArXG4gICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcbiAgICAgICdlaXRoZXIgaW4gdGhlIGRhdGEgb3B0aW9uLCBvciBmb3IgY2xhc3MtYmFzZWQgY29tcG9uZW50cywgYnkgJyArXG4gICAgICAnaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eS4gJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIHdhcm5SZXNlcnZlZFByZWZpeCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHdhcm4oXG4gICAgICBcIlByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggXFxcIiRkYXRhLlwiICsga2V5ICsgXCJcXFwiIGJlY2F1c2UgXCIgK1xuICAgICAgJ3Byb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCBcIiRcIiBvciBcIl9cIiBhcmUgbm90IHByb3hpZWQgaW4gdGhlIFZ1ZSBpbnN0YW5jZSB0byAnICtcbiAgICAgICdwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIFZ1ZSBpbnRlcm5hbHMuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb3h5KTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZpZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fFxuICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgaWYgKCFoYXMgJiYgIWlzQWxsb3dlZCkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxsb3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG4gICAgfVxuICB9O1xuXG4gIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSAodm0pIHtcbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIC8vIGRldGVybWluZSB3aGljaCBwcm94eSBoYW5kbGVyIHRvIHVzZVxuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgPyBnZXRIYW5kbGVyXG4gICAgICAgIDogaGFzSGFuZGxlcjtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gKiBnZXR0ZXJzLCBzbyB0aGF0IGV2ZXJ5IG5lc3RlZCBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdFxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2UgKHZhbCkge1xuICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG4gIHNlZW5PYmplY3RzLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIF90cmF2ZXJzZSAodmFsLCBzZWVuKSB7XG4gIHZhciBpLCBrZXlzO1xuICB2YXIgaXNBID0gQXJyYXkuaXNBcnJheSh2YWwpO1xuICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8IE9iamVjdC5pc0Zyb3plbih2YWwpIHx8IHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZhbC5fX29iX18pIHtcbiAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2Vlbi5hZGQoZGVwSWQpO1xuICB9XG4gIGlmIChpc0EpIHtcbiAgICBpID0gdmFsLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pOyB9XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgaSA9IGtleXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgfVxufVxuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gIH0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5uYXRpdmVPbikpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJUaGUgLm5hdGl2ZSBtb2RpZmllciBmb3Igdi1vbiBpcyBvbmx5IHZhbGlkIG9uIGNvbXBvbmVudHMgYnV0IGl0IHdhcyB1c2VkIG9uIDxcIiArIHRhZyArIFwiPi5cIiksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVzZSBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHtcbiAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXG4gIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIGNhbGxIb29rKHZtLCAnbW91bnRlZCcpO1xuICB9XG4gIHJldHVybiB2bVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gIHZtLFxuICBwcm9wc0RhdGEsXG4gIGxpc3RlbmVycyxcbiAgcGFyZW50Vm5vZGUsXG4gIHJlbmRlckNoaWxkcmVuXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiXFxcIlwiICsgaHlwaGVuYXRlZEtleSArIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjEyJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxudmFyIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICA/ICdmYWxzZSdcbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlIGZvciBjb250ZW50ZWRpdGFibGVcbiAgICA6IGtleSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScgJiYgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiAndHJ1ZSdcbn07XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgKyB0YWcgKyAnPiAtIGRpZCB5b3UgJyArXG4gICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAnbWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlIFwibmFtZVwiIG9wdGlvbi4nLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGFuY2VzdG9yLmNvbnRleHQpICYmIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkge1xuICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVudEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAodm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgdmFyIGNoID0gdm5vZGVzW3N0YXJ0SWR4XTtcbiAgICAgIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGNoKTtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgIH0gZWxzZSB7IC8vIFRleHQgbm9kZVxuICAgICAgICAgIHJlbW92ZU5vZGUoY2guZWxtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sgKHZub2RlLCBybSkge1xuICAgIGlmIChpc0RlZihybSkgfHwgaXNEZWYodm5vZGUuZGF0YSkpIHtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHJlY3Vyc2l2ZWx5IHBhc3NlZCBkb3duIHJtIGNhbGxiYWNrXG4gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgIHJtID0gY3JlYXRlUm1DYih2bm9kZS5lbG0sIGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgICAvLyByZWN1cnNpdmVseSBpbnZva2UgaG9va3Mgb24gY2hpbGQgY29tcG9uZW50IHJvb3Qgbm9kZVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaXNEZWYoaSA9IGkuX3Zub2RlKSAmJiBpc0RlZihpLmRhdGEpKSB7XG4gICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soaSwgcm0pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5yZW1vdmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2JzLnJlbW92ZVtpXSh2bm9kZSwgcm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5kYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnJlbW92ZSkpIHtcbiAgICAgICAgaSh2bm9kZSwgcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlTm9kZSh2bm9kZS5lbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuIChwYXJlbnRFbG0sIG9sZENoLCBuZXdDaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgdmFyIG9sZFN0YXJ0SWR4ID0gMDtcbiAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgIHZhciBvbGRFbmRJZHggPSBvbGRDaC5sZW5ndGggLSAxO1xuICAgIHZhciBvbGRTdGFydFZub2RlID0gb2xkQ2hbMF07XG4gICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICB2YXIgbmV3RW5kSWR4ID0gbmV3Q2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWzBdO1xuICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgdmFyIG9sZEtleVRvSWR4LCBpZHhJbk9sZCwgdm5vZGVUb01vdmUsIHJlZkVsbTtcblxuICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxuICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAvLyBkdXJpbmcgbGVhdmluZyB0cmFuc2l0aW9uc1xuICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKG5ld0NoKTtcbiAgICB9XG5cbiAgICB3aGlsZSAob2xkU3RhcnRJZHggPD0gb2xkRW5kSWR4ICYmIG5ld1N0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgaWYgKGlzVW5kZWYob2xkU3RhcnRWbm9kZSkpIHtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkRW5kVm5vZGUpKSB7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCBsZWZ0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkS2V5VG9JZHgpKSB7IG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpOyB9XG4gICAgICAgIGlkeEluT2xkID0gaXNEZWYobmV3U3RhcnRWbm9kZS5rZXkpXG4gICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkgeyAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICBwYXRjaFZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyAoY2hpbGRyZW4pIHtcbiAgICB2YXIgc2VlbktleXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdm5vZGUgPSBjaGlsZHJlbltpXTtcbiAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XG4gICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICBpZiAoc2VlbktleXNba2V5XSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAoXCJEdXBsaWNhdGUga2V5cyBkZXRlY3RlZDogJ1wiICsga2V5ICsgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VlbktleXNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQgKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHZhciBjID0gb2xkQ2hbaV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKSB7IHJldHVybiBpIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaFZub2RlIChcbiAgICBvbGRWbm9kZSxcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleCxcbiAgICByZW1vdmVPbmx5XG4gICkge1xuICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcbiAgICAgIHZub2RlID0gb3duZXJBcnJheVtpbmRleF0gPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVkIGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxuICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIGlzVHJ1ZShvbGRWbm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSlcbiAgICApIHtcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSB7IGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAob2xkQ2ggIT09IGNoKSB7IHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpOyB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7IG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7IH1cbiAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRvIHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXShhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICBpZiAoaW5zZXJ0Lm1lcmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgaW5zZXJ0LmZuc1tpJDJdKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgcmVtb3ZlVm5vZGVzKFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRhZykpIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICByZXR1cm4gdm5vZGUuZWxtXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgZGVzdHJveTogZnVuY3Rpb24gdW5iaW5kRGlyZWN0aXZlcyAodm5vZGUpIHtcbiAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBpc0Rlc3Ryb3kgPSB2bm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgb2xkRGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMShvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMsIG9sZFZub2RlLmNvbnRleHQpO1xuICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZub2RlLmNvbnRleHQpO1xuXG4gIHZhciBkaXJzV2l0aEluc2VydCA9IFtdO1xuICB2YXIgZGlyc1dpdGhQb3N0cGF0Y2ggPSBbXTtcblxuICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgZm9yIChrZXkgaW4gbmV3RGlycykge1xuICAgIG9sZERpciA9IG9sZERpcnNba2V5XTtcbiAgICBkaXIgPSBuZXdEaXJzW2tleV07XG4gICAgaWYgKCFvbGREaXIpIHtcbiAgICAgIC8vIG5ldyBkaXJlY3RpdmUsIGJpbmRcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgIGRpcnNXaXRoSW5zZXJ0LnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgZGlyZWN0aXZlLCB1cGRhdGVcbiAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgIGRpci5vbGRBcmcgPSBvbGREaXIuYXJnO1xuICAgICAgY2FsbEhvb2skMShkaXIsICd1cGRhdGUnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XG4gICAgICAgIGRpcnNXaXRoUG9zdHBhdGNoLnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGlyc1dpdGhJbnNlcnQubGVuZ3RoKSB7XG4gICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyc1dpdGhJbnNlcnRbaV0sICdpbnNlcnRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoaXNDcmVhdGUpIHtcbiAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxJbnNlcnQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoKSB7XG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyc1dpdGhQb3N0cGF0Y2hbaV0sICdjb21wb25lbnRVcGRhdGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICghaXNDcmVhdGUpIHtcbiAgICBmb3IgKGtleSBpbiBvbGREaXJzKSB7XG4gICAgICBpZiAoIW5ld0RpcnNba2V5XSkge1xuICAgICAgICAvLyBubyBsb25nZXIgcHJlc2VudCwgdW5iaW5kXG4gICAgICAgIGNhbGxIb29rJDEob2xkRGlyc1trZXldLCAndW5iaW5kJywgb2xkVm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzJDEgKFxuICBkaXJzLFxuICB2bVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIWRpcnMpIHtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAgdmFyIGksIGRpcjtcbiAgZm9yIChpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHtcbiAgICBkaXIgPSBkaXJzW2ldO1xuICAgIGlmICghZGlyLm1vZGlmaWVycykge1xuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICBkaXIubW9kaWZpZXJzID0gZW1wdHlNb2RpZmllcnM7XG4gICAgfVxuICAgIHJlc1tnZXRSYXdEaXJOYW1lKGRpcildID0gZGlyO1xuICAgIGRpci5kZWYgPSByZXNvbHZlQXNzZXQodm0uJG9wdGlvbnMsICdkaXJlY3RpdmVzJywgZGlyLm5hbWUsIHRydWUpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdldFJhd0Rpck5hbWUgKGRpcikge1xuICByZXR1cm4gZGlyLnJhd05hbWUgfHwgKChkaXIubmFtZSkgKyBcIi5cIiArIChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykpKVxufVxuXG5mdW5jdGlvbiBjYWxsSG9vayQxIChkaXIsIGhvb2ssIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KSB7XG4gIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm5vZGUuY29udGV4dCwgKFwiZGlyZWN0aXZlIFwiICsgKGRpci5uYW1lKSArIFwiIFwiICsgaG9vayArIFwiIGhvb2tcIikpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgYmFzZU1vZHVsZXMgPSBbXG4gIHJlZixcbiAgZGlyZWN0aXZlc1xuXTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoaXNEZWYob3B0cykgJiYgb3B0cy5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuYXR0cnMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5hdHRycykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXIsIG9sZDtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgdmFyIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihhdHRycy5fX29iX18pKSB7XG4gICAgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhdHRycyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBhdHRycykge1xuICAgIGN1ciA9IGF0dHJzW2tleV07XG4gICAgb2xkID0gb2xkQXR0cnNba2V5XTtcbiAgICBpZiAob2xkICE9PSBjdXIpIHtcbiAgICAgIHNldEF0dHIoZWxtLCBrZXksIGN1cik7XG4gICAgfVxuICB9XG4gIC8vICM0MzkxOiBpbiBJRTksIHNldHRpbmcgdHlwZSBjYW4gcmVzZXQgdmFsdWUgZm9yIGlucHV0W3R5cGU9cmFkaW9dXG4gIC8vICM2NjY2OiBJRS9FZGdlIGZvcmNlcyBwcm9ncmVzcyB2YWx1ZSBkb3duIHRvIDEgYmVmb3JlIHNldHRpbmcgYSBtYXhcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICgoaXNJRSB8fCBpc0VkZ2UpICYmIGF0dHJzLnZhbHVlICE9PSBvbGRBdHRycy52YWx1ZSkge1xuICAgIHNldEF0dHIoZWxtLCAndmFsdWUnLCBhdHRycy52YWx1ZSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICBpZiAoaXNVbmRlZihhdHRyc1trZXldKSkge1xuICAgICAgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgfSBlbHNlIGlmICghaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGVsLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxhbmsgdmFsdWVcbiAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9uPlxuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRlY2huaWNhbGx5IGFsbG93ZnVsbHNjcmVlbiBpcyBhIGJvb2xlYW4gYXR0cmlidXRlIGZvciA8aWZyYW1lPixcbiAgICAgIC8vIGJ1dCBGbGFzaCBleHBlY3RzIGEgdmFsdWUgb2YgXCJ0cnVlXCIgd2hlbiB1c2VkIG9uIDxlbWJlZD4gdGFnXG4gICAgICB2YWx1ZSA9IGtleSA9PT0gJ2FsbG93ZnVsbHNjcmVlbicgJiYgZWwudGFnTmFtZSA9PT0gJ0VNQkVEJ1xuICAgICAgICA/ICd0cnVlJ1xuICAgICAgICA6IGtleTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgY29udmVydEVudW1lcmF0ZWRWYWx1ZShrZXksIHZhbHVlKSk7XG4gIH0gZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZVNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICB9IGVsc2Uge1xuICAgIC8vICM3MTM4OiBJRTEwICYgMTEgZmlyZXMgaW5wdXQgZXZlbnQgd2hlbiBzZXR0aW5nIHBsYWNlaG9sZGVyIG9uXG4gICAgLy8gPHRleHRhcmVhPi4uLiBibG9jayB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYW5kIHJlbW92ZSB0aGUgYmxvY2tlclxuICAgIC8vIGltbWVkaWF0ZWx5LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChcbiAgICAgIGlzSUUgJiYgIWlzSUU5ICYmXG4gICAgICBlbC50YWdOYW1lID09PSAnVEVYVEFSRUEnICYmXG4gICAgICBrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgdmFsdWUgIT09ICcnICYmICFlbC5fX2llcGhcbiAgICApIHtcbiAgICAgIHZhciBibG9ja2VyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgIH07XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICBlbC5fX2llcGggPSB0cnVlOyAvKiBJRSBwbGFjZWhvbGRlciBwYXRjaGVkICovXG4gICAgfVxuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgfVxufVxuXG52YXIgYXR0cnMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQXR0cnMsXG4gIHVwZGF0ZTogdXBkYXRlQXR0cnNcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVDbGFzcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG4gIGlmIChcbiAgICBpc1VuZGVmKGRhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgaXNVbmRlZihkYXRhLmNsYXNzKSAmJiAoXG4gICAgICBpc1VuZGVmKG9sZERhdGEpIHx8IChcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuY2xhc3MpXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjbHMgPSBnZW5DbGFzc0ZvclZub2RlKHZub2RlKTtcblxuICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXG4gIHZhciB0cmFuc2l0aW9uQ2xhc3MgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXM7XG4gIGlmIChpc0RlZih0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgY2xzID0gY29uY2F0KGNscywgc3RyaW5naWZ5Q2xhc3ModHJhbnNpdGlvbkNsYXNzKSk7XG4gIH1cblxuICAvLyBzZXQgdGhlIGNsYXNzXG4gIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY2xzKTtcbiAgICBlbC5fcHJldkNsYXNzID0gY2xzO1xuICB9XG59XG5cbnZhciBrbGFzcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgdXBkYXRlOiB1cGRhdGVDbGFzc1xufTtcblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8vIGluIHNvbWUgY2FzZXMsIHRoZSBldmVudCB1c2VkIGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbnZhciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xuXG4vKiAgKi9cblxuLy8gbm9ybWFsaXplIHYtbW9kZWwgZXZlbnQgdG9rZW5zIHRoYXQgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lLlxuLy8gaXQncyBpbXBvcnRhbnQgdG8gcGxhY2UgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBpbiB0aGUgYXJyYXkgYmVjYXVzZVxuLy8gdGhlIHdob2xlIHBvaW50IGlzIGVuc3VyaW5nIHRoZSB2LW1vZGVsIGNhbGxiYWNrIGdldHMgY2FsbGVkIGJlZm9yZVxuLy8gdXNlci1hdHRhY2hlZCBoYW5kbGVycy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50cyAob24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihvbltSQU5HRV9UT0tFTl0pKSB7XG4gICAgLy8gSUUgaW5wdXRbdHlwZT1yYW5nZV0gb25seSBzdXBwb3J0cyBgY2hhbmdlYCBldmVudFxuICAgIHZhciBldmVudCA9IGlzSUUgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gICAgb25bZXZlbnRdID0gW10uY29uY2F0KG9uW1JBTkdFX1RPS0VOXSwgb25bZXZlbnRdIHx8IFtdKTtcbiAgICBkZWxldGUgb25bUkFOR0VfVE9LRU5dO1xuICB9XG4gIC8vIFRoaXMgd2FzIG9yaWdpbmFsbHkgaW50ZW5kZWQgdG8gZml4ICM0NTIxIGJ1dCBubyBsb25nZXIgbmVjZXNzYXJ5XG4gIC8vIGFmdGVyIDIuNS4gS2VlcGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdCB3aXRoIGdlbmVyYXRlZCBjb2RlIGZyb20gPCAyLjRcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihvbltDSEVDS0JPWF9SQURJT19UT0tFTl0pKSB7XG4gICAgb24uY2hhbmdlID0gW10uY29uY2F0KG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSwgb24uY2hhbmdlIHx8IFtdKTtcbiAgICBkZWxldGUgb25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dO1xuICB9XG59XG5cbnZhciB0YXJnZXQkMTtcblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIkMSAoZXZlbnQsIGhhbmRsZXIsIGNhcHR1cmUpIHtcbiAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gaGFuZGxlci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIHJlbW92ZSQyKGV2ZW50LCBvbmNlSGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCk7XG4gICAgfVxuICB9XG59XG5cbi8vICM5NDQ2OiBGaXJlZm94IDw9IDUzIChpbiBwYXJ0aWN1bGFyLCBFU1IgNTIpIGhhcyBpbmNvcnJlY3QgRXZlbnQudGltZVN0YW1wXG4vLyBpbXBsZW1lbnRhdGlvbiBhbmQgZG9lcyBub3QgZmlyZSBtaWNyb3Rhc2tzIGluIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24sIHNvXG4vLyBzYWZlIHRvIGV4Y2x1ZGUuXG52YXIgdXNlTWljcm90YXNrRml4ID0gaXNVc2luZ01pY3JvVGFzayAmJiAhKGlzRkYgJiYgTnVtYmVyKGlzRkZbMV0pIDw9IDUzKTtcblxuZnVuY3Rpb24gYWRkJDEgKFxuICBuYW1lLFxuICBoYW5kbGVyLFxuICBjYXB0dXJlLFxuICBwYXNzaXZlXG4pIHtcbiAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxuICAvLyBhdHRhY2hlZCB0byBvdXRlciBlbGVtZW50IGR1cmluZyBwYXRjaCwgYW5kIHRyaWdnZXJlZCBhZ2Fpbi4gVGhpc1xuICAvLyBoYXBwZW5zIGJlY2F1c2UgYnJvd3NlcnMgZmlyZSBtaWNyb3Rhc2sgdGlja3MgYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbi5cbiAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxuICAvLyBhbmQgdGhlIGhhbmRsZXIgd291bGQgb25seSBmaXJlIGlmIHRoZSBldmVudCBwYXNzZWQgdG8gaXQgd2FzIGZpcmVkXG4gIC8vIEFGVEVSIGl0IHdhcyBhdHRhY2hlZC5cbiAgaWYgKHVzZU1pY3JvdGFza0ZpeCkge1xuICAgIHZhciBhdHRhY2hlZFRpbWVzdGFtcCA9IGN1cnJlbnRGbHVzaFRpbWVzdGFtcDtcbiAgICB2YXIgb3JpZ2luYWwgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBvcmlnaW5hbC5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIC8vIG5vIGJ1YmJsaW5nLCBzaG91bGQgYWx3YXlzIGZpcmUuXG4gICAgICAgIC8vIHRoaXMgaXMganVzdCBhIHNhZmV0eSBuZXQgaW4gY2FzZSBldmVudC50aW1lU3RhbXAgaXMgdW5yZWxpYWJsZSBpblxuICAgICAgICAvLyBjZXJ0YWluIHdlaXJkIGVudmlyb25tZW50cy4uLlxuICAgICAgICBlLnRhcmdldCA9PT0gZS5jdXJyZW50VGFyZ2V0IHx8XG4gICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxuICAgICAgICBlLnRpbWVTdGFtcCA+PSBhdHRhY2hlZFRpbWVzdGFtcCB8fFxuICAgICAgICAvLyBiYWlsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBoYXZlIGJ1Z2d5IGV2ZW50LnRpbWVTdGFtcCBpbXBsZW1lbnRhdGlvbnNcbiAgICAgICAgLy8gIzk0NjIgaU9TIDkgYnVnOiBldmVudC50aW1lU3RhbXAgaXMgMCBhZnRlciBoaXN0b3J5LnB1c2hTdGF0ZVxuICAgICAgICAvLyAjOTY4MSBRdFdlYkVuZ2luZSBldmVudC50aW1lU3RhbXAgaXMgbmVnYXRpdmUgdmFsdWVcbiAgICAgICAgZS50aW1lU3RhbXAgPD0gMCB8fFxuICAgICAgICAvLyAjOTQ0OCBiYWlsIGlmIGV2ZW50IGlzIGZpcmVkIGluIGFub3RoZXIgZG9jdW1lbnQgaW4gYSBtdWx0aS1wYWdlXG4gICAgICAgIC8vIGVsZWN0cm9uL253LmpzIGFwcCwgc2luY2UgZXZlbnQudGltZVN0YW1wIHdpbGwgYmUgdXNpbmcgYSBkaWZmZXJlbnRcbiAgICAgICAgLy8gc3RhcnRpbmcgcmVmZXJlbmNlXG4gICAgICAgIGUudGFyZ2V0Lm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHRhcmdldCQxLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLFxuICAgIHN1cHBvcnRzUGFzc2l2ZVxuICAgICAgPyB7IGNhcHR1cmU6IGNhcHR1cmUsIHBhc3NpdmU6IHBhc3NpdmUgfVxuICAgICAgOiBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQyIChcbiAgbmFtZSxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgX3RhcmdldFxuKSB7XG4gIChfdGFyZ2V0IHx8IHRhcmdldCQxKS5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlci5fd3JhcHBlciB8fCBoYW5kbGVyLFxuICAgIGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NTGlzdGVuZXJzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5vbikgJiYgaXNVbmRlZih2bm9kZS5kYXRhLm9uKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvbiA9IHZub2RlLmRhdGEub24gfHwge307XG4gIHZhciBvbGRPbiA9IG9sZFZub2RlLmRhdGEub24gfHwge307XG4gIHRhcmdldCQxID0gdm5vZGUuZWxtO1xuICBub3JtYWxpemVFdmVudHMob24pO1xuICB1cGRhdGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQkMSwgcmVtb3ZlJDIsIGNyZWF0ZU9uY2VIYW5kbGVyJDEsIHZub2RlLmNvbnRleHQpO1xuICB0YXJnZXQkMSA9IHVuZGVmaW5lZDtcbn1cblxudmFyIGV2ZW50cyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzXG59O1xuXG4vKiAgKi9cblxudmFyIHN2Z0NvbnRhaW5lcjtcblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcHMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmRvbVByb3BzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuZG9tUHJvcHMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkUHJvcHMgPSBvbGRWbm9kZS5kYXRhLmRvbVByb3BzIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzIHx8IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKHByb3BzLl9fb2JfXykpIHtcbiAgICBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgPSBleHRlbmQoe30sIHByb3BzKTtcbiAgfVxuXG4gIGZvciAoa2V5IGluIG9sZFByb3BzKSB7XG4gICAgaWYgKCEoa2V5IGluIHByb3BzKSkge1xuICAgICAgZWxtW2tleV0gPSAnJztcbiAgICB9XG4gIH1cblxuICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgIGN1ciA9IHByb3BzW2tleV07XG4gICAgLy8gaWdub3JlIGNoaWxkcmVuIGlmIHRoZSBub2RlIGhhcyB0ZXh0Q29udGVudCBvciBpbm5lckhUTUwsXG4gICAgLy8gYXMgdGhlc2Ugd2lsbCB0aHJvdyBhd2F5IGV4aXN0aW5nIERPTSBub2RlcyBhbmQgY2F1c2UgcmVtb3ZhbCBlcnJvcnNcbiAgICAvLyBvbiBzdWJzZXF1ZW50IHBhdGNoZXMgKCMzMzYwKVxuICAgIGlmIChrZXkgPT09ICd0ZXh0Q29udGVudCcgfHwga2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKSB7IHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7IH1cbiAgICAgIGlmIChjdXIgPT09IG9sZFByb3BzW2tleV0pIHsgY29udGludWUgfVxuICAgICAgLy8gIzY2MDEgd29yayBhcm91bmQgQ2hyb21lIHZlcnNpb24gPD0gNTUgYnVnIHdoZXJlIHNpbmdsZSB0ZXh0Tm9kZVxuICAgICAgLy8gcmVwbGFjZWQgYnkgaW5uZXJIVE1ML3RleHRDb250ZW50IHJldGFpbnMgaXRzIHBhcmVudE5vZGUgcHJvcGVydHlcbiAgICAgIGlmIChlbG0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAndmFsdWUnICYmIGVsbS50YWdOYW1lICE9PSAnUFJPR1JFU1MnKSB7XG4gICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxuICAgICAgZWxtLl92YWx1ZSA9IGN1cjtcbiAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgdmFyIHN0ckN1ciA9IGlzVW5kZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBzdHJDdXIpKSB7XG4gICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgJiYgaXNTVkcoZWxtLnRhZ05hbWUpICYmIGlzVW5kZWYoZWxtLmlubmVySFRNTCkpIHtcbiAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lckhUTUwgZm9yIFNWRyBlbGVtZW50c1xuICAgICAgc3ZnQ29udGFpbmVyID0gc3ZnQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgc3ZnQ29udGFpbmVyLmlubmVySFRNTCA9IFwiPHN2Zz5cIiArIGN1ciArIFwiPC9zdmc+XCI7XG4gICAgICB2YXIgc3ZnID0gc3ZnQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICB3aGlsZSAoZWxtLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzdmcuZmlyc3RDaGlsZCkge1xuICAgICAgICBlbG0uYXBwZW5kQ2hpbGQoc3ZnLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBza2lwIHRoZSB1cGRhdGUgaWYgb2xkIGFuZCBuZXcgVkRPTSBzdGF0ZSBpcyB0aGUgc2FtZS5cbiAgICAgIC8vIGB2YWx1ZWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgdGhlIERPTSB2YWx1ZSBtYXkgYmUgdGVtcG9yYXJpbHlcbiAgICAgIC8vIG91dCBvZiBzeW5jIHdpdGggVkRPTSBzdGF0ZSBkdWUgdG8gZm9jdXMsIGNvbXBvc2l0aW9uIGFuZCBtb2RpZmllcnMuXG4gICAgICAvLyBUaGlzICAjNDUyMSBieSBza2lwcGluZyB0aGUgdW5uZWNlc3NhcnkgYGNoZWNrZWRgIHVwZGF0ZS5cbiAgICAgIGN1ciAhPT0gb2xkUHJvcHNba2V5XVxuICAgICkge1xuICAgICAgLy8gc29tZSBwcm9wZXJ0eSB1cGRhdGVzIGNhbiB0aHJvd1xuICAgICAgLy8gZS5nLiBgdmFsdWVgIG9uIDxwcm9ncmVzcz4gdy8gbm9uLWZpbml0ZSB2YWx1ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgZWxtW2tleV0gPSBjdXI7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgfVxufVxuXG4vLyBjaGVjayBwbGF0Zm9ybXMvd2ViL3V0aWwvYXR0cnMuanMgYWNjZXB0VmFsdWVcblxuXG5mdW5jdGlvbiBzaG91bGRVcGRhdGVWYWx1ZSAoZWxtLCBjaGVja1ZhbCkge1xuICByZXR1cm4gKCFlbG0uY29tcG9zaW5nICYmIChcbiAgICBlbG0udGFnTmFtZSA9PT0gJ09QVElPTicgfHxcbiAgICBpc05vdEluRm9jdXNBbmREaXJ0eShlbG0sIGNoZWNrVmFsKSB8fFxuICAgIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgY2hlY2tWYWwpXG4gICkpXG59XG5cbmZ1bmN0aW9uIGlzTm90SW5Gb2N1c0FuZERpcnR5IChlbG0sIGNoZWNrVmFsKSB7XG4gIC8vIHJldHVybiB0cnVlIHdoZW4gdGV4dGJveCAoLm51bWJlciBhbmQgLnRyaW0pIGxvc2VzIGZvY3VzIGFuZCBpdHMgdmFsdWUgaXNcbiAgLy8gbm90IGVxdWFsIHRvIHRoZSB1cGRhdGVkIHZhbHVlXG4gIHZhciBub3RJbkZvY3VzID0gdHJ1ZTtcbiAgLy8gIzYxNTdcbiAgLy8gd29yayBhcm91bmQgSUUgYnVnIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gYW4gaWZyYW1lXG4gIHRyeSB7IG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbG07IH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBub3RJbkZvY3VzICYmIGVsbS52YWx1ZSAhPT0gY2hlY2tWYWxcbn1cblxuZnVuY3Rpb24gaXNEaXJ0eVdpdGhNb2RpZmllcnMgKGVsbSwgbmV3VmFsKSB7XG4gIHZhciB2YWx1ZSA9IGVsbS52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGVsbS5fdk1vZGlmaWVyczsgLy8gaW5qZWN0ZWQgYnkgdi1tb2RlbCBydW50aW1lXG4gIGlmIChpc0RlZihtb2RpZmllcnMpKSB7XG4gICAgaWYgKG1vZGlmaWVycy5udW1iZXIpIHtcbiAgICAgIHJldHVybiB0b051bWJlcih2YWx1ZSkgIT09IHRvTnVtYmVyKG5ld1ZhbClcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVycy50cmltKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSBuZXdWYWwudHJpbSgpXG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZSAhPT0gbmV3VmFsXG59XG5cbnZhciBkb21Qcm9wcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVET01Qcm9wcyxcbiAgdXBkYXRlOiB1cGRhdGVET01Qcm9wc1xufTtcblxuLyogICovXG5cbnZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLy8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIHN0eWxlIGRhdGEgb24gdGhlIHNhbWUgdm5vZGVcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlRGF0YSAoZGF0YSkge1xuICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcoZGF0YS5zdHlsZSk7XG4gIC8vIHN0YXRpYyBzdHlsZSBpcyBwcmUtcHJvY2Vzc2VkIGludG8gYW4gb2JqZWN0IGR1cmluZyBjb21waWxhdGlvblxuICAvLyBhbmQgaXMgYWx3YXlzIGEgZnJlc2ggb2JqZWN0LCBzbyBpdCdzIHNhZmUgdG8gbWVyZ2UgaW50byBpdFxuICByZXR1cm4gZGF0YS5zdGF0aWNTdHlsZVxuICAgID8gZXh0ZW5kKGRhdGEuc3RhdGljU3R5bGUsIHN0eWxlKVxuICAgIDogc3R5bGVcbn1cblxuLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVCaW5kaW5nIChiaW5kaW5nU3R5bGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmluZGluZ1N0eWxlKSkge1xuICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgaWYgKHR5cGVvZiBiaW5kaW5nU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICByZXR1cm4gYmluZGluZ1N0eWxlXG59XG5cbi8qKlxuICogcGFyZW50IGNvbXBvbmVudCBzdHlsZSBzaG91bGQgYmUgYWZ0ZXIgY2hpbGQnc1xuICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGUgKHZub2RlLCBjaGVja0NoaWxkKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIHN0eWxlRGF0YTtcblxuICBpZiAoY2hlY2tDaGlsZCkge1xuICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgaWYgKFxuICAgICAgICBjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEgJiZcbiAgICAgICAgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpXG4gICAgICApIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YSh2bm9kZS5kYXRhKSkpIHtcbiAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICB9XG5cbiAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUuZGF0YSAmJiAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHBhcmVudE5vZGUuZGF0YSkpKSB7XG4gICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgY3NzVmFyUkUgPSAvXi0tLztcbnZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xudmFyIHNldFByb3AgPSBmdW5jdGlvbiAoZWwsIG5hbWUsIHZhbCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGNzc1ZhclJFLnRlc3QobmFtZSkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWwpO1xuICB9IGVsc2UgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShuYW1lKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHZhciBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAvLyBTdXBwb3J0IHZhbHVlcyBhcnJheSBjcmVhdGVkIGJ5IGF1dG9wcmVmaXhlciwgZS5nLlxuICAgICAgLy8ge2Rpc3BsYXk6IFtcIi13ZWJraXQtYm94XCIsIFwiLW1zLWZsZXhib3hcIiwgXCJmbGV4XCJdfVxuICAgICAgLy8gU2V0IHRoZW0gb25lIGJ5IG9uZSwgYW5kIHRoZSBicm93c2VyIHdpbGwgb25seSBzZXQgdGhvc2UgaXQgY2FuIHJlY29nbml6ZVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHZhbC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWxbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciB2ZW5kb3JOYW1lcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xuXG52YXIgZW1wdHlTdHlsZTtcbnZhciBub3JtYWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHByb3ApIHtcbiAgZW1wdHlTdHlsZSA9IGVtcHR5U3R5bGUgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gIHByb3AgPSBjYW1lbGl6ZShwcm9wKTtcbiAgaWYgKHByb3AgIT09ICdmaWx0ZXInICYmIChwcm9wIGluIGVtcHR5U3R5bGUpKSB7XG4gICAgcmV0dXJuIHByb3BcbiAgfVxuICB2YXIgY2FwTmFtZSA9IHByb3AuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWUgPSB2ZW5kb3JOYW1lc1tpXSArIGNhcE5hbWU7XG4gICAgaWYgKG5hbWUgaW4gZW1wdHlTdHlsZSkge1xuICAgICAgcmV0dXJuIG5hbWVcbiAgICB9XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB1cGRhdGVTdHlsZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuXG4gIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljU3R5bGUpICYmIGlzVW5kZWYoZGF0YS5zdHlsZSkgJiZcbiAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljU3R5bGUpICYmIGlzVW5kZWYob2xkRGF0YS5zdHlsZSlcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3VyLCBuYW1lO1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBvbGRTdGF0aWNTdHlsZSA9IG9sZERhdGEuc3RhdGljU3R5bGU7XG4gIHZhciBvbGRTdHlsZUJpbmRpbmcgPSBvbGREYXRhLm5vcm1hbGl6ZWRTdHlsZSB8fCBvbGREYXRhLnN0eWxlIHx8IHt9O1xuXG4gIC8vIGlmIHN0YXRpYyBzdHlsZSBleGlzdHMsIHN0eWxlYmluZGluZyBhbHJlYWR5IG1lcmdlZCBpbnRvIGl0IHdoZW4gZG9pbmcgbm9ybWFsaXplU3R5bGVEYXRhXG4gIHZhciBvbGRTdHlsZSA9IG9sZFN0YXRpY1N0eWxlIHx8IG9sZFN0eWxlQmluZGluZztcblxuICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcodm5vZGUuZGF0YS5zdHlsZSkgfHwge307XG5cbiAgLy8gc3RvcmUgbm9ybWFsaXplZCBzdHlsZSB1bmRlciBhIGRpZmZlcmVudCBrZXkgZm9yIG5leHQgZGlmZlxuICAvLyBtYWtlIHN1cmUgdG8gY2xvbmUgaXQgaWYgaXQncyByZWFjdGl2ZSwgc2luY2UgdGhlIHVzZXIgbGlrZWx5IHdhbnRzXG4gIC8vIHRvIG11dGF0ZSBpdC5cbiAgdm5vZGUuZGF0YS5ub3JtYWxpemVkU3R5bGUgPSBpc0RlZihzdHlsZS5fX29iX18pXG4gICAgPyBleHRlbmQoe30sIHN0eWxlKVxuICAgIDogc3R5bGU7XG5cbiAgdmFyIG5ld1N0eWxlID0gZ2V0U3R5bGUodm5vZGUsIHRydWUpO1xuXG4gIGZvciAobmFtZSBpbiBvbGRTdHlsZSkge1xuICAgIGlmIChpc1VuZGVmKG5ld1N0eWxlW25hbWVdKSkge1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgJycpO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gbmV3U3R5bGUpIHtcbiAgICBjdXIgPSBuZXdTdHlsZVtuYW1lXTtcbiAgICBpZiAoY3VyICE9PSBvbGRTdHlsZVtuYW1lXSkge1xuICAgICAgLy8gaWU5IHNldHRpbmcgdG8gbnVsbCBoYXMgbm8gZWZmZWN0LCBtdXN0IHVzZSBlbXB0eSBzdHJpbmdcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsIGN1ciA9PSBudWxsID8gJycgOiBjdXIpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc3R5bGUgPSB7XG4gIGNyZWF0ZTogdXBkYXRlU3R5bGUsXG4gIHVwZGF0ZTogdXBkYXRlU3R5bGVcbn07XG5cbi8qICAqL1xuXG52YXIgd2hpdGVzcGFjZVJFID0gL1xccysvO1xuXG4vKipcbiAqIEFkZCBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICogU1ZHIGVsZW1lbnRzIGluIElFXG4gKi9cbmZ1bmN0aW9uIGFkZENsYXNzIChlbCwgY2xzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSkuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChjKTsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoY3VyICsgY2xzKS50cmltKCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICogU1ZHIGVsZW1lbnRzIGluIElFXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzIChlbCwgY2xzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSkuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShjKTsgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICB9XG4gICAgaWYgKCFlbC5jbGFzc0xpc3QubGVuZ3RoKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgdmFyIHRhciA9ICcgJyArIGNscyArICcgJztcbiAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICBjdXIgPSBjdXIucmVwbGFjZSh0YXIsICcgJyk7XG4gICAgfVxuICAgIGN1ciA9IGN1ci50cmltKCk7XG4gICAgaWYgKGN1cikge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGN1cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uIChkZWYkJDEpIHtcbiAgaWYgKCFkZWYkJDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgaWYgKGRlZiQkMS5jc3MgIT09IGZhbHNlKSB7XG4gICAgICBleHRlbmQocmVzLCBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEubmFtZSB8fCAndicpKTtcbiAgICB9XG4gICAgZXh0ZW5kKHJlcywgZGVmJCQxKTtcbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxKVxuICB9XG59XG5cbnZhciBhdXRvQ3NzVHJhbnNpdGlvbiA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4ge1xuICAgIGVudGVyQ2xhc3M6IChuYW1lICsgXCItZW50ZXJcIiksXG4gICAgZW50ZXJUb0NsYXNzOiAobmFtZSArIFwiLWVudGVyLXRvXCIpLFxuICAgIGVudGVyQWN0aXZlQ2xhc3M6IChuYW1lICsgXCItZW50ZXItYWN0aXZlXCIpLFxuICAgIGxlYXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmVcIiksXG4gICAgbGVhdmVUb0NsYXNzOiAobmFtZSArIFwiLWxlYXZlLXRvXCIpLFxuICAgIGxlYXZlQWN0aXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtYWN0aXZlXCIpXG4gIH1cbn0pO1xuXG52YXIgaGFzVHJhbnNpdGlvbiA9IGluQnJvd3NlciAmJiAhaXNJRTk7XG52YXIgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcbnZhciBBTklNQVRJT04gPSAnYW5pbWF0aW9uJztcblxuLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eS9ldmVudCBzbmlmZmluZ1xudmFyIHRyYW5zaXRpb25Qcm9wID0gJ3RyYW5zaXRpb24nO1xudmFyIHRyYW5zaXRpb25FbmRFdmVudCA9ICd0cmFuc2l0aW9uZW5kJztcbnZhciBhbmltYXRpb25Qcm9wID0gJ2FuaW1hdGlvbic7XG52YXIgYW5pbWF0aW9uRW5kRXZlbnQgPSAnYW5pbWF0aW9uZW5kJztcbmlmIChoYXNUcmFuc2l0aW9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgIHRyYW5zaXRpb25FbmRFdmVudCA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgfVxuICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBhbmltYXRpb25Qcm9wID0gJ1dlYmtpdEFuaW1hdGlvbic7XG4gICAgYW5pbWF0aW9uRW5kRXZlbnQgPSAnd2Via2l0QW5pbWF0aW9uRW5kJztcbiAgfVxufVxuXG4vLyBiaW5kaW5nIHRvIHdpbmRvdyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBob3QgcmVsb2FkIHdvcmsgaW4gSUUgaW4gc3RyaWN0IG1vZGVcbnZhciByYWYgPSBpbkJyb3dzZXJcbiAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KVxuICAgIDogc2V0VGltZW91dFxuICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIChmbikgeyByZXR1cm4gZm4oKTsgfTtcblxuZnVuY3Rpb24gbmV4dEZyYW1lIChmbikge1xuICByYWYoZnVuY3Rpb24gKCkge1xuICAgIHJhZihmbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgdmFyIHRyYW5zaXRpb25DbGFzc2VzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzIHx8IChlbC5fdHJhbnNpdGlvbkNsYXNzZXMgPSBbXSk7XG4gIGlmICh0cmFuc2l0aW9uQ2xhc3Nlcy5pbmRleE9mKGNscykgPCAwKSB7XG4gICAgdHJhbnNpdGlvbkNsYXNzZXMucHVzaChjbHMpO1xuICAgIGFkZENsYXNzKGVsLCBjbHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgcmVtb3ZlKGVsLl90cmFuc2l0aW9uQ2xhc3NlcywgY2xzKTtcbiAgfVxuICByZW1vdmVDbGFzcyhlbCwgY2xzKTtcbn1cblxuZnVuY3Rpb24gd2hlblRyYW5zaXRpb25FbmRzIChcbiAgZWwsXG4gIGV4cGVjdGVkVHlwZSxcbiAgY2Jcbikge1xuICB2YXIgcmVmID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gIHZhciB0aW1lb3V0ID0gcmVmLnRpbWVvdXQ7XG4gIHZhciBwcm9wQ291bnQgPSByZWYucHJvcENvdW50O1xuICBpZiAoIXR5cGUpIHsgcmV0dXJuIGNiKCkgfVxuICB2YXIgZXZlbnQgPSB0eXBlID09PSBUUkFOU0lUSU9OID8gdHJhbnNpdGlvbkVuZEV2ZW50IDogYW5pbWF0aW9uRW5kRXZlbnQ7XG4gIHZhciBlbmRlZCA9IDA7XG4gIHZhciBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xuICAgIGNiKCk7XG4gIH07XG4gIHZhciBvbkVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xuICAgICAgaWYgKCsrZW5kZWQgPj0gcHJvcENvdW50KSB7XG4gICAgICAgIGVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVuZGVkIDwgcHJvcENvdW50KSB7XG4gICAgICBlbmQoKTtcbiAgICB9XG4gIH0sIHRpbWVvdXQgKyAxKTtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xufVxuXG52YXIgdHJhbnNmb3JtUkUgPSAvXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO1xuXG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uSW5mbyAoZWwsIGV4cGVjdGVkVHlwZSkge1xuICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAvLyBKU0RPTSBtYXkgcmV0dXJuIHVuZGVmaW5lZCBmb3IgdHJhbnNpdGlvbiBwcm9wZXJ0aWVzXG4gIHZhciB0cmFuc2l0aW9uRGVsYXlzID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KHRyYW5zaXRpb25EZWxheXMsIHRyYW5zaXRpb25EdXJhdGlvbnMpO1xuICB2YXIgYW5pbWF0aW9uRGVsYXlzID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgYW5pbWF0aW9uRHVyYXRpb25zID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgYW5pbWF0aW9uVGltZW91dCA9IGdldFRpbWVvdXQoYW5pbWF0aW9uRGVsYXlzLCBhbmltYXRpb25EdXJhdGlvbnMpO1xuXG4gIHZhciB0eXBlO1xuICB2YXIgdGltZW91dCA9IDA7XG4gIHZhciBwcm9wQ291bnQgPSAwO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gVFJBTlNJVElPTikge1xuICAgIGlmICh0cmFuc2l0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBUUkFOU0lUSU9OO1xuICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XG4gICAgaWYgKGFuaW1hdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gQU5JTUFUSU9OO1xuICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aW1lb3V0ID0gTWF0aC5tYXgodHJhbnNpdGlvblRpbWVvdXQsIGFuaW1hdGlvblRpbWVvdXQpO1xuICAgIHR5cGUgPSB0aW1lb3V0ID4gMFxuICAgICAgPyB0cmFuc2l0aW9uVGltZW91dCA+IGFuaW1hdGlvblRpbWVvdXRcbiAgICAgICAgPyBUUkFOU0lUSU9OXG4gICAgICAgIDogQU5JTUFUSU9OXG4gICAgICA6IG51bGw7XG4gICAgcHJvcENvdW50ID0gdHlwZVxuICAgICAgPyB0eXBlID09PSBUUkFOU0lUSU9OXG4gICAgICAgID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgOiBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICA6IDA7XG4gIH1cbiAgdmFyIGhhc1RyYW5zZm9ybSA9XG4gICAgdHlwZSA9PT0gVFJBTlNJVElPTiAmJlxuICAgIHRyYW5zZm9ybVJFLnRlc3Qoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ1Byb3BlcnR5J10pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IHR5cGUsXG4gICAgdGltZW91dDogdGltZW91dCxcbiAgICBwcm9wQ291bnQ6IHByb3BDb3VudCxcbiAgICBoYXNUcmFuc2Zvcm06IGhhc1RyYW5zZm9ybVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVvdXQgKGRlbGF5cywgZHVyYXRpb25zKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHdoaWxlIChkZWxheXMubGVuZ3RoIDwgZHVyYXRpb25zLmxlbmd0aCkge1xuICAgIGRlbGF5cyA9IGRlbGF5cy5jb25jYXQoZGVsYXlzKTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLm1heC5hcHBseShudWxsLCBkdXJhdGlvbnMubWFwKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgcmV0dXJuIHRvTXMoZCkgKyB0b01zKGRlbGF5c1tpXSlcbiAgfSkpXG59XG5cbi8vIE9sZCB2ZXJzaW9ucyBvZiBDaHJvbWl1bSAoYmVsb3cgNjEuMC4zMTYzLjEwMCkgZm9ybWF0cyBmbG9hdGluZyBwb2ludGVyIG51bWJlcnNcbi8vIGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXksIHVzaW5nIGEgY29tbWEgaW5zdGVhZCBvZiBhIGRvdC5cbi8vIElmIGNvbW1hIGlzIG5vdCByZXBsYWNlZCB3aXRoIGEgZG90LCB0aGUgaW5wdXQgd2lsbCBiZSByb3VuZGVkIGRvd24gKGkuZS4gYWN0aW5nXG4vLyBhcyBhIGZsb29yIGZ1bmN0aW9uKSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3JzXG5mdW5jdGlvbiB0b01zIChzKSB7XG4gIHJldHVybiBOdW1iZXIocy5zbGljZSgwLCAtMSkucmVwbGFjZSgnLCcsICcuJykpICogMTAwMFxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZW50ZXIgKHZub2RlLCB0b2dnbGVEaXNwbGF5KSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpKSB7XG4gICAgZWwuX2xlYXZlQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fbGVhdmVDYigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fZW50ZXJDYikgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBlbnRlckNsYXNzID0gZGF0YS5lbnRlckNsYXNzO1xuICB2YXIgZW50ZXJUb0NsYXNzID0gZGF0YS5lbnRlclRvQ2xhc3M7XG4gIHZhciBlbnRlckFjdGl2ZUNsYXNzID0gZGF0YS5lbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgYXBwZWFyQ2xhc3MgPSBkYXRhLmFwcGVhckNsYXNzO1xuICB2YXIgYXBwZWFyVG9DbGFzcyA9IGRhdGEuYXBwZWFyVG9DbGFzcztcbiAgdmFyIGFwcGVhckFjdGl2ZUNsYXNzID0gZGF0YS5hcHBlYXJBY3RpdmVDbGFzcztcbiAgdmFyIGJlZm9yZUVudGVyID0gZGF0YS5iZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVyID0gZGF0YS5lbnRlcjtcbiAgdmFyIGFmdGVyRW50ZXIgPSBkYXRhLmFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZCA9IGRhdGEuZW50ZXJDYW5jZWxsZWQ7XG4gIHZhciBiZWZvcmVBcHBlYXIgPSBkYXRhLmJlZm9yZUFwcGVhcjtcbiAgdmFyIGFwcGVhciA9IGRhdGEuYXBwZWFyO1xuICB2YXIgYWZ0ZXJBcHBlYXIgPSBkYXRhLmFmdGVyQXBwZWFyO1xuICB2YXIgYXBwZWFyQ2FuY2VsbGVkID0gZGF0YS5hcHBlYXJDYW5jZWxsZWQ7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgLy8gYWN0aXZlSW5zdGFuY2Ugd2lsbCBhbHdheXMgYmUgdGhlIDx0cmFuc2l0aW9uPiBjb21wb25lbnQgbWFuYWdpbmcgdGhpc1xuICAvLyB0cmFuc2l0aW9uLiBPbmUgZWRnZSBjYXNlIHRvIGNoZWNrIGlzIHdoZW4gdGhlIDx0cmFuc2l0aW9uPiBpcyBwbGFjZWRcbiAgLy8gYXMgdGhlIHJvb3Qgbm9kZSBvZiBhIGNoaWxkIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY2hlY2tcbiAgLy8gPHRyYW5zaXRpb24+J3MgcGFyZW50IGZvciBhcHBlYXIgY2hlY2suXG4gIHZhciBjb250ZXh0ID0gYWN0aXZlSW5zdGFuY2U7XG4gIHZhciB0cmFuc2l0aW9uTm9kZSA9IGFjdGl2ZUluc3RhbmNlLiR2bm9kZTtcbiAgd2hpbGUgKHRyYW5zaXRpb25Ob2RlICYmIHRyYW5zaXRpb25Ob2RlLnBhcmVudCkge1xuICAgIGNvbnRleHQgPSB0cmFuc2l0aW9uTm9kZS5jb250ZXh0O1xuICAgIHRyYW5zaXRpb25Ob2RlID0gdHJhbnNpdGlvbk5vZGUucGFyZW50O1xuICB9XG5cbiAgdmFyIGlzQXBwZWFyID0gIWNvbnRleHQuX2lzTW91bnRlZCB8fCAhdm5vZGUuaXNSb290SW5zZXJ0O1xuXG4gIGlmIChpc0FwcGVhciAmJiAhYXBwZWFyICYmIGFwcGVhciAhPT0gJycpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBzdGFydENsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQ2xhc3NcbiAgICA/IGFwcGVhckNsYXNzXG4gICAgOiBlbnRlckNsYXNzO1xuICB2YXIgYWN0aXZlQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJBY3RpdmVDbGFzc1xuICAgID8gYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA6IGVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciB0b0NsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyVG9DbGFzc1xuICAgID8gYXBwZWFyVG9DbGFzc1xuICAgIDogZW50ZXJUb0NsYXNzO1xuXG4gIHZhciBiZWZvcmVFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlcilcbiAgICA6IGJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/ICh0eXBlb2YgYXBwZWFyID09PSAnZnVuY3Rpb24nID8gYXBwZWFyIDogZW50ZXIpXG4gICAgOiBlbnRlcjtcbiAgdmFyIGFmdGVyRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChhZnRlckFwcGVhciB8fCBhZnRlckVudGVyKVxuICAgIDogYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkSG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkKVxuICAgIDogZW50ZXJDYW5jZWxsZWQ7XG5cbiAgdmFyIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiA9IHRvTnVtYmVyKFxuICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgPyBkdXJhdGlvbi5lbnRlclxuICAgICAgOiBkdXJhdGlvblxuICApO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdEVudGVyRHVyYXRpb24sICdlbnRlcicsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChlbnRlckhvb2spO1xuXG4gIHZhciBjYiA9IGVsLl9lbnRlckNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIH1cbiAgICAgIGVudGVyQ2FuY2VsbGVkSG9vayAmJiBlbnRlckNhbmNlbGxlZEhvb2soZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlckVudGVySG9vayAmJiBhZnRlckVudGVySG9vayhlbCk7XG4gICAgfVxuICAgIGVsLl9lbnRlckNiID0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKCF2bm9kZS5kYXRhLnNob3cpIHtcbiAgICAvLyByZW1vdmUgcGVuZGluZyBsZWF2ZSBlbGVtZW50IG9uIGVudGVyIGJ5IGluamVjdGluZyBhbiBpbnNlcnQgaG9va1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xuICAgICAgaWYgKHBlbmRpbmdOb2RlICYmXG4gICAgICAgIHBlbmRpbmdOb2RlLnRhZyA9PT0gdm5vZGUudGFnICYmXG4gICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYlxuICAgICAgKSB7XG4gICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYigpO1xuICAgICAgfVxuICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc3RhcnQgZW50ZXIgdHJhbnNpdGlvblxuICBiZWZvcmVFbnRlckhvb2sgJiYgYmVmb3JlRW50ZXJIb29rKGVsKTtcbiAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdEVudGVyRHVyYXRpb24pKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICh2bm9kZS5kYXRhLnNob3cpIHtcbiAgICB0b2dnbGVEaXNwbGF5ICYmIHRvZ2dsZURpc3BsYXkoKTtcbiAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gIH1cblxuICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICBjYigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxlYXZlICh2bm9kZSwgcm0pIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgZW50ZXIgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fZW50ZXJDYikpIHtcbiAgICBlbC5fZW50ZXJDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9lbnRlckNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIHJtKClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcztcbiAgdmFyIGxlYXZlVG9DbGFzcyA9IGRhdGEubGVhdmVUb0NsYXNzO1xuICB2YXIgbGVhdmVBY3RpdmVDbGFzcyA9IGRhdGEubGVhdmVBY3RpdmVDbGFzcztcbiAgdmFyIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZTtcbiAgdmFyIGxlYXZlID0gZGF0YS5sZWF2ZTtcbiAgdmFyIGFmdGVyTGVhdmUgPSBkYXRhLmFmdGVyTGVhdmU7XG4gIHZhciBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQ7XG4gIHZhciBkZWxheUxlYXZlID0gZGF0YS5kZWxheUxlYXZlO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChsZWF2ZSk7XG5cbiAgdmFyIGV4cGxpY2l0TGVhdmVEdXJhdGlvbiA9IHRvTnVtYmVyKFxuICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgPyBkdXJhdGlvbi5sZWF2ZVxuICAgICAgOiBkdXJhdGlvblxuICApO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGNiID0gZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlLl9wZW5kaW5nKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgfVxuICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICBkZWxheUxlYXZlKHBlcmZvcm1MZWF2ZSk7XG4gIH0gZWxzZSB7XG4gICAgcGVyZm9ybUxlYXZlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUgKCkge1xuICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIChlbC5wYXJlbnROb2RlLl9wZW5kaW5nIHx8IChlbC5wYXJlbnROb2RlLl9wZW5kaW5nID0ge30pKVsodm5vZGUua2V5KV0gPSB2bm9kZTtcbiAgICB9XG4gICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0TGVhdmVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG5mdW5jdGlvbiBjaGVja0R1cmF0aW9uICh2YWwsIG5hbWUsIHZub2RlKSB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBcIiArXG4gICAgICBcImdvdCBcIiArIChKU09OLnN0cmluZ2lmeSh2YWwpKSArIFwiLlwiLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBOYU4gLSBcIiArXG4gICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRHVyYXRpb24gKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSB0cmFuc2l0aW9uIGhvb2sncyBhcmd1bWVudCBsZW5ndGguIFRoZSBob29rIG1heSBiZTpcbiAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICogLSBhIHdyYXBwZWQgY29tcG9uZW50IG1ldGhvZCAoY2hlY2sgLl9sZW5ndGgpXG4gKiAtIGEgcGxhaW4gZnVuY3Rpb24gKC5sZW5ndGgpXG4gKi9cbmZ1bmN0aW9uIGdldEhvb2tBcmd1bWVudHNMZW5ndGggKGZuKSB7XG4gIGlmIChpc1VuZGVmKGZuKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHZhciBpbnZva2VyRm5zID0gZm4uZm5zO1xuICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAvLyBpbnZva2VyXG4gICAgcmV0dXJuIGdldEhvb2tBcmd1bWVudHNMZW5ndGgoXG4gICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMpXG4gICAgICAgID8gaW52b2tlckZuc1swXVxuICAgICAgICA6IGludm9rZXJGbnNcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChmbi5fbGVuZ3RoIHx8IGZuLmxlbmd0aCkgPiAxXG4gIH1cbn1cblxuZnVuY3Rpb24gX2VudGVyIChfLCB2bm9kZSkge1xuICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgZW50ZXIodm5vZGUpO1xuICB9XG59XG5cbnZhciB0cmFuc2l0aW9uID0gaW5Ccm93c2VyID8ge1xuICBjcmVhdGU6IF9lbnRlcixcbiAgYWN0aXZhdGU6IF9lbnRlcixcbiAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUkJDEgKHZub2RlLCBybSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICB9XG4gIH1cbn0gOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFtcbiAgYXR0cnMsXG4gIGtsYXNzLFxuICBldmVudHMsXG4gIGRvbVByb3BzLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvblxuXTtcblxuLyogICovXG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsICYmIGVsLnZtb2RlbCkge1xuICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGRpcmVjdGl2ZSA9IHtcbiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIC8vICM2OTAzXG4gICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRpcmVjdGl2ZS5jb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgfVxuICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkge1xuICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0Jywgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXG4gICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcbiAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVlIGlzIG91dC1vZi1zeW5jIHdpdGggdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcbiAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgdmFyIHByZXZPcHRpb25zID0gZWwuX3ZPcHRpb25zO1xuICAgICAgdmFyIGN1ck9wdGlvbnMgPSBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICBpZiAoY3VyT3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc1tpXSk7IH0pKSB7XG4gICAgICAgIC8vIHRyaWdnZXIgY2hhbmdlIGV2ZW50IGlmXG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIG9wdGlvbiBmb3VuZCBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlXG4gICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnMpOyB9KVxuICAgICAgICAgIDogYmluZGluZy52YWx1ZSAhPT0gYmluZGluZy5vbGRWYWx1ZSAmJiBoYXNOb01hdGNoaW5nT3B0aW9uKGJpbmRpbmcudmFsdWUsIGN1ck9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgdHJpZ2dlcihlbCwgJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0lFIHx8IGlzRWRnZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICBcIjxzZWxlY3QgbXVsdGlwbGUgdi1tb2RlbD1cXFwiXCIgKyAoYmluZGluZy5leHByZXNzaW9uKSArIFwiXFxcIj4gXCIgK1xuICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKSksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlbGVjdGVkLCBvcHRpb247XG4gIGZvciAodmFyIGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xuICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcbiAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFpc011bHRpcGxlKSB7XG4gICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc05vTWF0Y2hpbmdPcHRpb24gKHZhbHVlLCBvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChvKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCB2YWx1ZSk7IH0pXG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlIChvcHRpb24pIHtcbiAgcmV0dXJuICdfdmFsdWUnIGluIG9wdGlvblxuICAgID8gb3B0aW9uLl92YWx1ZVxuICAgIDogb3B0aW9uLnZhbHVlXG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25TdGFydCAoZSkge1xuICBlLnRhcmdldC5jb21wb3NpbmcgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kIChlKSB7XG4gIC8vIHByZXZlbnQgdHJpZ2dlcmluZyBhbiBpbnB1dCBldmVudCBmb3Igbm8gcmVhc29uXG4gIGlmICghZS50YXJnZXQuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IGZhbHNlO1xuICB0cmlnZ2VyKGUudGFyZ2V0LCAnaW5wdXQnKTtcbn1cblxuZnVuY3Rpb24gdHJpZ2dlciAoZWwsIHR5cGUpIHtcbiAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICBlLmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTtcbiAgZWwuZGlzcGF0Y2hFdmVudChlKTtcbn1cblxuLyogICovXG5cbi8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgcG9zc2libGUgdHJhbnNpdGlvbiBkZWZpbmVkIGluc2lkZSB0aGUgY29tcG9uZW50IHJvb3RcbmZ1bmN0aW9uIGxvY2F0ZU5vZGUgKHZub2RlKSB7XG4gIHJldHVybiB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJiAoIXZub2RlLmRhdGEgfHwgIXZub2RlLmRhdGEudHJhbnNpdGlvbilcbiAgICA/IGxvY2F0ZU5vZGUodm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKVxuICAgIDogdm5vZGVcbn1cblxudmFyIHNob3cgPSB7XG4gIGJpbmQ6IGZ1bmN0aW9uIGJpbmQgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuXG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgPVxuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnID8gJycgOiBlbC5zdHlsZS5kaXNwbGF5O1xuICAgIGlmICh2YWx1ZSAmJiB0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBvcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcbiAgICB2YXIgb2xkVmFsdWUgPSByZWYub2xkVmFsdWU7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpIHsgcmV0dXJuIH1cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgaWYgKHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQgKFxuICAgIGVsLFxuICAgIGJpbmRpbmcsXG4gICAgdm5vZGUsXG4gICAgb2xkVm5vZGUsXG4gICAgaXNEZXN0cm95XG4gICkge1xuICAgIGlmICghaXNEZXN0cm95KSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgIH1cbiAgfVxufTtcblxudmFyIHBsYXRmb3JtRGlyZWN0aXZlcyA9IHtcbiAgbW9kZWw6IGRpcmVjdGl2ZSxcbiAgc2hvdzogc2hvd1xufTtcblxuLyogICovXG5cbnZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gIG5hbWU6IFN0cmluZyxcbiAgYXBwZWFyOiBCb29sZWFuLFxuICBjc3M6IEJvb2xlYW4sXG4gIG1vZGU6IFN0cmluZyxcbiAgdHlwZTogU3RyaW5nLFxuICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXG4gIGxlYXZlVG9DbGFzczogU3RyaW5nLFxuICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBPYmplY3RdXG59O1xuXG4vLyBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHNvIGFuIGFic3RyYWN0IGNvbXBvbmVudCwgZS5nLiA8a2VlcC1hbGl2ZT5cbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG5mdW5jdGlvbiBnZXRSZWFsQ2hpbGQgKHZub2RlKSB7XG4gIHZhciBjb21wT3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2bm9kZVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2l0aW9uRGF0YSAoY29tcCkge1xuICB2YXIgZGF0YSA9IHt9O1xuICB2YXIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gIC8vIHByb3BzXG4gIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgIGRhdGFba2V5XSA9IGNvbXBba2V5XTtcbiAgfVxuICAvLyBldmVudHMuXG4gIC8vIGV4dHJhY3QgbGlzdGVuZXJzIGFuZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gdGhlIHRyYW5zaXRpb24gbWV0aG9kc1xuICB2YXIgbGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBmb3IgKHZhciBrZXkkMSBpbiBsaXN0ZW5lcnMpIHtcbiAgICBkYXRhW2NhbWVsaXplKGtleSQxKV0gPSBsaXN0ZW5lcnNba2V5JDFdO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIHBsYWNlaG9sZGVyIChoLCByYXdDaGlsZCkge1xuICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICBwcm9wczogcmF3Q2hpbGQuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGFcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24gKHZub2RlKSB7XG4gIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHZub2RlLmRhdGEudHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTYW1lQ2hpbGQgKGNoaWxkLCBvbGRDaGlsZCkge1xuICByZXR1cm4gb2xkQ2hpbGQua2V5ID09PSBjaGlsZC5rZXkgJiYgb2xkQ2hpbGQudGFnID09PSBjaGlsZC50YWdcbn1cblxudmFyIGlzTm90VGV4dE5vZGUgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50YWcgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpOyB9O1xuXG52YXIgaXNWU2hvd0RpcmVjdGl2ZSA9IGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLm5hbWUgPT09ICdzaG93JzsgfTtcblxudmFyIFRyYW5zaXRpb24gPSB7XG4gIG5hbWU6ICd0cmFuc2l0aW9uJyxcbiAgcHJvcHM6IHRyYW5zaXRpb25Qcm9wcyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG91dCB0ZXh0IG5vZGVzIChwb3NzaWJsZSB3aGl0ZXNwYWNlcylcbiAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihpc05vdFRleHROb2RlKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2FybiBtdWx0aXBsZSBlbGVtZW50c1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICc8dHJhbnNpdGlvbi1ncm91cD4gZm9yIGxpc3RzLicsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMubW9kZTtcblxuICAgIC8vIHdhcm4gaW52YWxpZCBtb2RlXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIG1vZGUgJiYgbW9kZSAhPT0gJ2luLW91dCcgJiYgbW9kZSAhPT0gJ291dC1pbidcbiAgICApIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdpbnZhbGlkIDx0cmFuc2l0aW9uPiBtb2RlOiAnICsgbW9kZSxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciByYXdDaGlsZCA9IGNoaWxkcmVuWzBdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBjb21wb25lbnQnc1xuICAgIC8vIHBhcmVudCBjb250YWluZXIgbm9kZSBhbHNvIGhhcyB0cmFuc2l0aW9uLCBza2lwLlxuICAgIGlmIChoYXNQYXJlbnRUcmFuc2l0aW9uKHRoaXMuJHZub2RlKSkge1xuICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBkYXRhIHRvIGNoaWxkXG4gICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgIHZhciBjaGlsZCA9IGdldFJlYWxDaGlsZChyYXdDaGlsZCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xlYXZpbmcpIHtcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICB9XG5cbiAgICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRvIHRoaXMgdHJhbnNpdGlvblxuICAgIC8vIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBrZXkgd2lsbCBiZSB1c2VkIHRvIHJlbW92ZSBwZW5kaW5nIGxlYXZpbmcgbm9kZXNcbiAgICAvLyBkdXJpbmcgZW50ZXJpbmcuXG4gICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIgKyAodGhpcy5fdWlkKSArIFwiLVwiO1xuICAgIGNoaWxkLmtleSA9IGNoaWxkLmtleSA9PSBudWxsXG4gICAgICA/IGNoaWxkLmlzQ29tbWVudFxuICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgIDogaWQgKyBjaGlsZC50YWdcbiAgICAgIDogaXNQcmltaXRpdmUoY2hpbGQua2V5KVxuICAgICAgICA/IChTdHJpbmcoY2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMCA/IGNoaWxkLmtleSA6IGlkICsgY2hpbGQua2V5KVxuICAgICAgICA6IGNoaWxkLmtleTtcblxuICAgIHZhciBkYXRhID0gKGNoaWxkLmRhdGEgfHwgKGNoaWxkLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG4gICAgdmFyIG9sZFJhd0NoaWxkID0gdGhpcy5fdm5vZGU7XG4gICAgdmFyIG9sZENoaWxkID0gZ2V0UmVhbENoaWxkKG9sZFJhd0NoaWxkKTtcblxuICAgIC8vIG1hcmsgdi1zaG93XG4gICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXG4gICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGlsZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShpc1ZTaG93RGlyZWN0aXZlKSkge1xuICAgICAgY2hpbGQuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvbGRDaGlsZCAmJlxuICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxuICAgICAgIWlzU2FtZUNoaWxkKGNoaWxkLCBvbGRDaGlsZCkgJiZcbiAgICAgICFpc0FzeW5jUGxhY2Vob2xkZXIob2xkQ2hpbGQpICYmXG4gICAgICAvLyAjNjY4NyBjb21wb25lbnQgcm9vdCBpcyBhIGNvbW1lbnQgbm9kZVxuICAgICAgIShvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZSAmJiBvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KVxuICAgICkge1xuICAgICAgLy8gcmVwbGFjZSBvbGQgY2hpbGQgdHJhbnNpdGlvbiBkYXRhIHdpdGggZnJlc2ggb25lXG4gICAgICAvLyBpbXBvcnRhbnQgZm9yIGR5bmFtaWMgdHJhbnNpdGlvbnMhXG4gICAgICB2YXIgb2xkRGF0YSA9IG9sZENoaWxkLmRhdGEudHJhbnNpdGlvbiA9IGV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBtb2RlXG4gICAgICBpZiAobW9kZSA9PT0gJ291dC1pbicpIHtcbiAgICAgICAgLy8gcmV0dXJuIHBsYWNlaG9sZGVyIG5vZGUgYW5kIHF1ZXVlIHVwZGF0ZSB3aGVuIGxlYXZlIGZpbmlzaGVzXG4gICAgICAgIHRoaXMuX2xlYXZpbmcgPSB0cnVlO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnYWZ0ZXJMZWF2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzJDEuX2xlYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzJDEuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpXG4gICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XG4gICAgICAgIGlmIChpc0FzeW5jUGxhY2Vob2xkZXIoY2hpbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIG9sZFJhd0NoaWxkXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGF5ZWRMZWF2ZTtcbiAgICAgICAgdmFyIHBlcmZvcm1MZWF2ZSA9IGZ1bmN0aW9uICgpIHsgZGVsYXllZExlYXZlKCk7IH07XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdhZnRlckVudGVyJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2VudGVyQ2FuY2VsbGVkJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2RlbGF5TGVhdmUnLCBmdW5jdGlvbiAobGVhdmUpIHsgZGVsYXllZExlYXZlID0gbGVhdmU7IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYXdDaGlsZFxuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgdGFnOiBTdHJpbmcsXG4gIG1vdmVDbGFzczogU3RyaW5nXG59LCB0cmFuc2l0aW9uUHJvcHMpO1xuXG5kZWxldGUgcHJvcHMubW9kZTtcblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IHtcbiAgcHJvcHM6IHByb3BzLFxuXG4gIGJlZm9yZU1vdW50OiBmdW5jdGlvbiBiZWZvcmVNb3VudCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgdXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgIHRoaXMuX3VwZGF0ZSA9IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2UodGhpcyQxKTtcbiAgICAgIC8vIGZvcmNlIHJlbW92aW5nIHBhc3NcbiAgICAgIHRoaXMkMS5fX3BhdGNoX18oXG4gICAgICAgIHRoaXMkMS5fdm5vZGUsXG4gICAgICAgIHRoaXMkMS5rZXB0LFxuICAgICAgICBmYWxzZSwgLy8gaHlkcmF0aW5nXG4gICAgICAgIHRydWUgLy8gcmVtb3ZlT25seSAoIWltcG9ydGFudCwgYXZvaWRzIHVubmVjZXNzYXJ5IG1vdmVzKVxuICAgICAgKTtcbiAgICAgIHRoaXMkMS5fdm5vZGUgPSB0aGlzJDEua2VwdDtcbiAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgICAgdXBkYXRlLmNhbGwodGhpcyQxLCB2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICB9O1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRhZyA9IHRoaXMudGFnIHx8IHRoaXMuJHZub2RlLmRhdGEudGFnIHx8ICdzcGFuJztcbiAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgIHZhciByYXdDaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW107XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIHZhciB0cmFuc2l0aW9uRGF0YSA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gcmF3Q2hpbGRyZW5baV07XG4gICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgaWYgKGMua2V5ICE9IG51bGwgJiYgU3RyaW5nKGMua2V5KS5pbmRleE9mKCdfX3ZsaXN0JykgIT09IDApIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMpO1xuICAgICAgICAgIG1hcFtjLmtleV0gPSBjXG4gICAgICAgICAgOyhjLmRhdGEgfHwgKGMuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB2YXIgb3B0cyA9IGMuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgICB2YXIgbmFtZSA9IG9wdHMgPyAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZyB8fCAnJykgOiBjLnRhZztcbiAgICAgICAgICB3YXJuKChcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIgKyBuYW1lICsgXCI+XCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHZhciBrZXB0ID0gW107XG4gICAgICB2YXIgcmVtb3ZlZCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgcHJldkNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgdmFyIGMkMSA9IHByZXZDaGlsZHJlbltpJDFdO1xuICAgICAgICBjJDEuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIGMkMS5kYXRhLnBvcyA9IGMkMS5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChtYXBbYyQxLmtleV0pIHtcbiAgICAgICAgICBrZXB0LnB1c2goYyQxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmVkLnB1c2goYyQxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rZXB0ID0gaCh0YWcsIG51bGwsIGtlcHQpO1xuICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gaCh0YWcsIG51bGwsIGNoaWxkcmVuKVxuICB9LFxuXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQgKCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuO1xuICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAoKHRoaXMubmFtZSB8fCAndicpICsgJy1tb3ZlJyk7XG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGggfHwgIXRoaXMuaGFzTW92ZShjaGlsZHJlblswXS5lbG0sIG1vdmVDbGFzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdlIGRpdmlkZSB0aGUgd29yayBpbnRvIHRocmVlIGxvb3BzIHRvIGF2b2lkIG1peGluZyBET00gcmVhZHMgYW5kIHdyaXRlc1xuICAgIC8vIGluIGVhY2ggaXRlcmF0aW9uIC0gd2hpY2ggaGVscHMgcHJldmVudCBsYXlvdXQgdGhyYXNoaW5nLlxuICAgIGNoaWxkcmVuLmZvckVhY2goY2FsbFBlbmRpbmdDYnMpO1xuICAgIGNoaWxkcmVuLmZvckVhY2gocmVjb3JkUG9zaXRpb24pO1xuICAgIGNoaWxkcmVuLmZvckVhY2goYXBwbHlUcmFuc2xhdGlvbik7XG5cbiAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cbiAgICAvLyBhc3NpZ24gdG8gdGhpcyB0byBhdm9pZCBiZWluZyByZW1vdmVkIGluIHRyZWUtc2hha2luZ1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgaWYgKGMuZGF0YS5tb3ZlZCkge1xuICAgICAgICB2YXIgZWwgPSBjLmVsbTtcbiAgICAgICAgdmFyIHMgPSBlbC5zdHlsZTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGVsLl9tb3ZlQ2IgPSBmdW5jdGlvbiBjYiAoZSkge1xuICAgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBlbCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZSB8fCAvdHJhbnNmb3JtJC8udGVzdChlLnByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XG4gICAgICAgICAgICBlbC5fbW92ZUNiID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNNb3ZlOiBmdW5jdGlvbiBoYXNNb3ZlIChlbCwgbW92ZUNsYXNzKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghaGFzVHJhbnNpdGlvbikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHRoaXMuX2hhc01vdmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc01vdmVcbiAgICAgIH1cbiAgICAgIC8vIERldGVjdCB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgbW92ZSBjbGFzcyBhcHBsaWVkIGhhc1xuICAgICAgLy8gQ1NTIHRyYW5zaXRpb25zLiBTaW5jZSB0aGUgZWxlbWVudCBtYXkgYmUgaW5zaWRlIGFuIGVudGVyaW5nXG4gICAgICAvLyB0cmFuc2l0aW9uIGF0IHRoaXMgdmVyeSBtb21lbnQsIHdlIG1ha2UgYSBjbG9uZSBvZiBpdCBhbmQgcmVtb3ZlXG4gICAgICAvLyBhbGwgb3RoZXIgdHJhbnNpdGlvbiBjbGFzc2VzIGFwcGxpZWQgdG8gZW5zdXJlIG9ubHkgdGhlIG1vdmUgY2xhc3NcbiAgICAgIC8vIGlzIGFwcGxpZWQuXG4gICAgICB2YXIgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgZWwuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykgeyByZW1vdmVDbGFzcyhjbG9uZSwgY2xzKTsgfSk7XG4gICAgICB9XG4gICAgICBhZGRDbGFzcyhjbG9uZSwgbW92ZUNsYXNzKTtcbiAgICAgIGNsb25lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLiRlbC5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgICB2YXIgaW5mbyA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcbiAgICAgIHRoaXMuJGVsLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgIHJldHVybiAodGhpcy5faGFzTW92ZSA9IGluZm8uaGFzVHJhbnNmb3JtKVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMgKGMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fbW92ZUNiKSB7XG4gICAgYy5lbG0uX21vdmVDYigpO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX2VudGVyQ2IpIHtcbiAgICBjLmVsbS5fZW50ZXJDYigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFBvc2l0aW9uIChjKSB7XG4gIGMuZGF0YS5uZXdQb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlUcmFuc2xhdGlvbiAoYykge1xuICB2YXIgb2xkUG9zID0gYy5kYXRhLnBvcztcbiAgdmFyIG5ld1BvcyA9IGMuZGF0YS5uZXdQb3M7XG4gIHZhciBkeCA9IG9sZFBvcy5sZWZ0IC0gbmV3UG9zLmxlZnQ7XG4gIHZhciBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xuICBpZiAoZHggfHwgZHkpIHtcbiAgICBjLmRhdGEubW92ZWQgPSB0cnVlO1xuICAgIHZhciBzID0gYy5lbG0uc3R5bGU7XG4gICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKFwiICsgZHggKyBcInB4LFwiICsgZHkgKyBcInB4KVwiO1xuICAgIHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBzJztcbiAgfVxufVxuXG52YXIgcGxhdGZvcm1Db21wb25lbnRzID0ge1xuICBUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLFxuICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxufTtcblxuLyogICovXG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gc3BlY2lmaWMgdXRpbHNcblZ1ZS5jb25maWcubXVzdFVzZVByb3AgPSBtdXN0VXNlUHJvcDtcblZ1ZS5jb25maWcuaXNSZXNlcnZlZFRhZyA9IGlzUmVzZXJ2ZWRUYWc7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRBdHRyID0gaXNSZXNlcnZlZEF0dHI7XG5WdWUuY29uZmlnLmdldFRhZ05hbWVzcGFjZSA9IGdldFRhZ05hbWVzcGFjZTtcblZ1ZS5jb25maWcuaXNVbmtub3duRWxlbWVudCA9IGlzVW5rbm93bkVsZW1lbnQ7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmRpcmVjdGl2ZXMsIHBsYXRmb3JtRGlyZWN0aXZlcyk7XG5leHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgcGxhdGZvcm1Db21wb25lbnRzKTtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBwYXRjaCBmdW5jdGlvblxuVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gPSBpbkJyb3dzZXIgPyBwYXRjaCA6IG5vb3A7XG5cbi8vIHB1YmxpYyBtb3VudCBtZXRob2RcblZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKFxuICBlbCxcbiAgaHlkcmF0aW5nXG4pIHtcbiAgZWwgPSBlbCAmJiBpbkJyb3dzZXIgPyBxdWVyeShlbCkgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBtb3VudENvbXBvbmVudCh0aGlzLCBlbCwgaHlkcmF0aW5nKVxufTtcblxuLy8gZGV2dG9vbHMgZ2xvYmFsIGhvb2tcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaW5Ccm93c2VyKSB7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb25maWcuZGV2dG9vbHMpIHtcbiAgICAgIGlmIChkZXZ0b29scykge1xuICAgICAgICBkZXZ0b29scy5lbWl0KCdpbml0JywgVnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0J1xuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICAgICdEb3dubG9hZCB0aGUgVnVlIERldnRvb2xzIGV4dGVuc2lvbiBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTpcXG4nICtcbiAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1kZXZ0b29scydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiZcbiAgICAgIGNvbmZpZy5wcm9kdWN0aW9uVGlwICE9PSBmYWxzZSAmJlxuICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnXG4gICAgKSB7XG4gICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgXCJZb3UgYXJlIHJ1bm5pbmcgVnVlIGluIGRldmVsb3BtZW50IG1vZGUuXFxuXCIgK1xuICAgICAgICBcIk1ha2Ugc3VyZSB0byB0dXJuIG9uIHByb2R1Y3Rpb24gbW9kZSB3aGVuIGRlcGxveWluZyBmb3IgcHJvZHVjdGlvbi5cXG5cIiArXG4gICAgICAgIFwiU2VlIG1vcmUgdGlwcyBhdCBodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9kZXBsb3ltZW50Lmh0bWxcIlxuICAgICAgKTtcbiAgICB9XG4gIH0sIDApO1xufVxuXG4vKiAgKi9cblxuZXhwb3J0IGRlZmF1bHQgVnVlO1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiZmxleC1maWx0ZXItYmFyXCIsIHsgYXR0cnM6IHsgc3RvcmU6IF92bS5zdG9yZSB9IH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZmxleC1jb250ZW50LWxvYWRlclwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLmxvYWRpbmcsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcImxvYWRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgYXR0cnM6IHsgc3RvcmU6IF92bS5zdG9yZSB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImZsZXgtdGFibGVcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6ICFfdm0ubG9hZGluZyxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWxvYWRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgYXR0cnM6IHsgc3RvcmU6IF92bS5zdG9yZSB9LFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ubG9hZGluZyxcbiAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICBfdm0ubG9hZGluZyA9ICQkdlxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJsb2FkaW5nXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfYyhcInZ1ZXRhYmxlXCIsIHtcbiAgICAgICAgcmVmOiBcInZ1ZXRhYmxlXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgY3NzOiBfdm0uY3NzLnRhYmxlLFxuICAgICAgICAgIGZpZWxkczogX3ZtLnN0b3JlLmZpZWxkcyB8fCBbXSxcbiAgICAgICAgICBzZWFyY2hGaWVsZHM6IF92bS5zdG9yZS5zZWFyY2hGaWVsZHMgfHwgW10sXG4gICAgICAgICAgc29ydE9yZGVyOiBfdm0uc3RvcmUuc29ydE9yZGVyLFxuICAgICAgICAgIFwibXVsdGktc29ydFwiOiB0cnVlLFxuICAgICAgICAgIFwiYXBpLW1vZGVcIjogdHJ1ZSxcbiAgICAgICAgICBcImFwaS11cmxcIjogX3ZtLnN0b3JlLmFwaSxcbiAgICAgICAgICBcInBlci1wYWdlXCI6IF92bS5wZXJQYWdlLFxuICAgICAgICAgIFwiYXBwZW5kLXBhcmFtc1wiOiBfdm0uZXh0cmFQYXJhbXMsXG4gICAgICAgICAgXCJwYWdpbmF0aW9uLXBhdGhcIjogXCJsaW5rcy5wYWdpbmF0aW9uXCIsXG4gICAgICAgICAgXCJzaG93LXNvcnQtaWNvbnNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIFwidnVldGFibGU6cGFnaW5hdGlvbi1kYXRhXCI6IF92bS5vblBhZ2luYXRpb25EYXRhLFxuICAgICAgICAgIFwidnVldGFibGU6bG9hZGluZ1wiOiBfdm0ub25WdWV0YWJsZUxvYWRpbmcsXG4gICAgICAgICAgXCJ2dWV0YWJsZTpsb2FkLXN1Y2Nlc3NcIjogX3ZtLm9uVnVlVGFibGVMb2FkU3VjY2Vzc1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJmbGV4LWxpc3QtcGFnaW5hdGlvblwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInZ1ZXRhYmxlLXBhZ2luYXRpb24taW5mb1wiLCB7XG4gICAgICAgICAgICByZWY6IFwicGFnaW5hdGlvbkluZm9cIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIFwiaW5mby10ZW1wbGF0ZVwiOiBfdm0uc3RvcmUucGFnaW5hdGlvbkluZm8sXG4gICAgICAgICAgICAgIFwiaW5mby1uby1kYXRhLXRlbXBsYXRlXCI6IF92bS5zdG9yZS5lbXB0eVJlc3VsdCxcbiAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzLnBhZ2luYXRpb25JbmZvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInZ1ZXRhYmxlLXBhZ2luYXRpb25cIiwge1xuICAgICAgICAgICAgcmVmOiBcInBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGNzczogX3ZtLmNzcy5wYWdpbmF0aW9uIH0sXG4gICAgICAgICAgICBvbjogeyBcInZ1ZXRhYmxlLXBhZ2luYXRpb246Y2hhbmdlLXBhZ2VcIjogX3ZtLm9uQ2hhbmdlUGFnZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uaXNGaXhlZEhlYWRlclxuICAgID8gX2MoXCJkaXZcIiwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInZ1ZXRhYmxlLWhlYWQtd3JhcHBlclwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGFibGVcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFtcInZ1ZXRhYmxlXCIsIF92bS5jc3MudGFibGVDbGFzcywgX3ZtLmNzcy50YWJsZUhlYWRlckNsYXNzXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJ0aGVhZFwiLCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGVGaWVsZHMsIGZ1bmN0aW9uKGZpZWxkLCBmaWVsZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaXNTcGVjaWFsRmllbGQoZmllbGQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtdGgtY2hlY2tib3gtXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRyYWNrQnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJjaGVja2JveFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5jaGVja0NoZWNrYm94ZXNTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlQWxsQ2hlY2tib3hlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX2NvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLWNvbXBvbmVudC1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRyYWNrQnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlbmRlclRpdGxlKGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub3JkZXJCeShmaWVsZCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX3Nsb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1zbG90LVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlbmRlclRpdGxlKGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub3JkZXJCeShmaWVsZCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX3NlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtdGgtc2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyB8fCBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyVGl0bGUoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5ub3RJbihfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX3NlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19jaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19zbG90XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLVwiICsgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyB8fCBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyVGl0bGUoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1cIiArIGZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc29ydENsYXNzKGZpZWxkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IFwiX1wiICsgZmllbGQubmFtZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlbmRlclRpdGxlKGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9yZGVyQnkoZmllbGQsICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zY3JvbGxWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidnVldGFibGUtZ3V0dGVyLWNvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnNjcm9sbEJhcldpZHRoIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ2dWV0YWJsZS1ib2R5LXdyYXBwZXJcIixcbiAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLnRhYmxlSGVpZ2h0IH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInRhYmxlXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogW1widnVldGFibGVcIiwgX3ZtLmNzcy50YWJsZUNsYXNzLCBfdm0uY3NzLnRhYmxlQm9keUNsYXNzXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImNvbGdyb3VwXCIsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGVGaWVsZHMsIGZ1bmN0aW9uKGZpZWxkLCBmaWVsZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImNvbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLVwiICsgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogXCJfY29sX1wiICsgZmllbGQubmFtZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJ0Ym9keVwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJ2dWV0YWJsZS1ib2R5XCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZURhdGEsIGZ1bmN0aW9uKGl0ZW0sIGl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5vblJvd0NsYXNzKGl0ZW0sIGl0ZW1JbmRleCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaXRlbS1pbmRleFwiOiBpdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IF92bS5vblJvd0NoYW5nZWQoaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25Sb3dDbGlja2VkKGl0ZW0sICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmxjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25Sb3dEb3VibGVDbGlja2VkKGl0ZW0sICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaXNTcGVjaWFsRmllbGQoZmllbGQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19zZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtc2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5kYXRhQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJTZXF1ZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9faGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS1oYW5kbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5kYXRhQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJJY29uVGFnKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGUtaWNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY3NzLmhhbmRsZUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS1jaGVja2JveGVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5kYXRhQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5yb3dTZWxlY3RlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlQ2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS1jb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3RBcmdzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3ctZGF0YVwiOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWluZGV4XCI6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvdy1maWVsZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc29ydEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19zbG90XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtc2xvdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZGF0YUNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3RBcmdzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RmllbGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc29ydEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGZpZWxkLmRhdGFDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJOb3JtYWxGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DZWxsQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJsY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uQ2VsbERvdWJsZUNsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRtZW51OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxSaWdodENsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0udXNlRGV0YWlsUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbmFtZTogX3ZtLmRldGFpbFJvd1RyYW5zaXRpb24gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzVmlzaWJsZURldGFpbFJvdyhpdGVtW192bS50cmFja0J5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmNzcy5kZXRhaWxSb3dDbGFzc10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkRldGFpbFJvd0NsaWNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuOiBfdm0uY291bnRWaXNpYmxlRmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoX3ZtLmRldGFpbFJvd0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3ctZGF0YVwiOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJvdy1pbmRleFwiOiBpdGVtSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uZGlzcGxheUVtcHR5RGF0YVJvd1xuICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRyXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZ1ZXRhYmxlLWVtcHR5LXJlc3VsdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY29sc3BhbjogX3ZtLmNvdW50VmlzaWJsZUZpZWxkcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLm5vRGF0YVRlbXBsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmxlc3NUaGFuTWluUm93c1xuICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLl9sKF92bS5ibGFua1Jvd3MsIGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtleTogaSwgc3RhdGljQ2xhc3M6IFwiYmxhbmstcm93XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0ZFwiLCB7IGtleTogZmllbGRJbmRleCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiwqBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICA6IF9jKFwidGFibGVcIiwgeyBjbGFzczogW1widnVldGFibGVcIiwgX3ZtLmNzcy50YWJsZUNsYXNzXSB9LCBbXG4gICAgICAgIF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbihmaWVsZCwgZmllbGRJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBmaWVsZC52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLWNoZWNrYm94LVwiICsgX3ZtLnRyYWNrQnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudGl0bGVDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJjaGVja2JveFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5jaGVja0NoZWNrYm94ZXNTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlQWxsQ2hlY2tib3hlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX2NvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLWNvbXBvbmVudC1cIiArIF92bS50cmFja0J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc29ydENsYXNzKGZpZWxkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzb3J0YWJsZTogX3ZtLmlzU29ydGFibGUoZmllbGQpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogZmllbGQud2lkdGggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKF92bS5yZW5kZXJUaXRsZShmaWVsZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub3JkZXJCeShmaWVsZCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gXCJfX3Nsb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1zbG90LVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRpdGxlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHNvcnRhYmxlOiBfdm0uaXNTb3J0YWJsZShmaWVsZCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnJlbmRlclRpdGxlKGZpZWxkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vcmRlckJ5KGZpZWxkLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSBcIl9fc2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS10aC1zZXF1ZW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0ucmVuZGVyVGl0bGUoZmllbGQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm5vdEluKF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl9fc2VxdWVuY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2NoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX19jb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX3Nsb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtdGgtXCIgKyBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IGZpZWxkLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0ucmVuZGVyVGl0bGUoZmllbGQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJ0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXRoLVwiICsgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50aXRsZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb3J0Q2xhc3MoZmllbGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc29ydGFibGU6IF92bS5pc1NvcnRhYmxlKGZpZWxkKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBmaWVsZC53aWR0aCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogXCJfXCIgKyBmaWVsZC5uYW1lIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnJlbmRlclRpdGxlKGZpZWxkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9yZGVyQnkoZmllbGQsICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJ0Ym9keVwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwidnVldGFibGUtYm9keVwiIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZURhdGEsIGZ1bmN0aW9uKGl0ZW0sIGl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5vblJvd0NsYXNzKGl0ZW0sIGl0ZW1JbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJpdGVtLWluZGV4XCI6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IF92bS5vblJvd0NoYW5nZWQoaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBkYmxjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uUm93RG91YmxlQ2xpY2tlZChpdGVtLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uUm93Q2xpY2tlZChpdGVtLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlRmllbGRzLCBmdW5jdGlvbihmaWVsZCwgZmllbGRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09IFwiX19zZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJ0ZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLXNlcXVlbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJTZXF1ZW5jZShpdGVtSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSBcIl9faGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidnVldGFibGUtaGFuZGxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5yZW5kZXJJY29uVGFnKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFuZGxlLWljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jc3MuaGFuZGxlSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSBcIl9fY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS1jaGVja2JveGVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZGF0YUNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBfdm0ucm93U2VsZWN0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvZ2dsZUNoZWNrYm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfX2NvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZ1ZXRhYmxlLWNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRhdGFDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWRhdGFcIjogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWluZGV4XCI6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicm93LWZpZWxkXCI6IGZpZWxkLnNvcnRGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5leHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PT0gXCJfX3Nsb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2dWV0YWJsZS1zbG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZGF0YUNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZXh0cmFjdEFyZ3MoZmllbGQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0ZpZWxkOiBmaWVsZC5zb3J0RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYXNDYWxsYmFjayhmaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2FsbENhbGxiYWNrKGZpZWxkLCBpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DZWxsQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJsY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DZWxsRG91YmxlQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dG1lbnU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DZWxsUmlnaHRDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfYyhcInRkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmllbGRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBmaWVsZC5kYXRhQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZ2V0T2JqZWN0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmxjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxEb3VibGVDbGlja2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0bWVudTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNlbGxSaWdodENsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0udXNlRGV0YWlsUm93XG4gICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbmFtZTogX3ZtLmRldGFpbFJvd1RyYW5zaXRpb24gfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzVmlzaWJsZURldGFpbFJvdyhpdGVtW192bS50cmFja0J5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW192bS5jc3MuZGV0YWlsUm93Q2xhc3NdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25EZXRhaWxSb3dDbGljayhpdGVtLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNvbHNwYW46IF92bS5jb3VudFZpc2libGVGaWVsZHMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoX3ZtLmRldGFpbFJvd0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3ctZGF0YVwiOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3ctaW5kZXhcIjogaXRlbUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5kaXNwbGF5RW1wdHlEYXRhUm93XG4gICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgX2MoXCJ0clwiLCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwidGRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZ1ZXRhYmxlLWVtcHR5LXJlc3VsdFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNvbHNwYW46IF92bS5jb3VudFZpc2libGVGaWVsZHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubm9EYXRhVGVtcGxhdGUpIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5sZXNzVGhhbk1pblJvd3NcbiAgICAgICAgICAgICAgPyBfdm0uX2woX3ZtLmJsYW5rUm93cywgZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgICAgIHsga2V5OiBpLCBzdGF0aWNDbGFzczogXCJibGFuay1yb3dcIiB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS50YWJsZUZpZWxkcywgZnVuY3Rpb24oZmllbGQsIGZpZWxkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwidGRcIiwgeyBrZXk6IGZpZWxkSW5kZXggfSwgW192bS5fdihcIsKgXCIpXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCI8dGVtcGxhdGU+XHJcbjxkaXYgdi1pZj1cImlzRml4ZWRIZWFkZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwidnVldGFibGUtaGVhZC13cmFwcGVyXCI+XHJcbiAgICA8dGFibGUgOmNsYXNzPVwiWyd2dWV0YWJsZScsIGNzcy50YWJsZUNsYXNzLCBjc3MudGFibGVIZWFkZXJDbGFzc11cIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudmlzaWJsZVwiPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgPHRoIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19jaGVja2JveCdcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC1jaGVja2JveC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3NdXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgQGNoYW5nZT1cInRvZ2dsZUFsbENoZWNrYm94ZXMoZmllbGQubmFtZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIDpjaGVja2VkPVwiY2hlY2tDaGVja2JveGVzU3RhdGUoZmllbGQubmFtZSlcIj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY29tcG9uZW50J1wiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IGZpZWxkLndpZHRofVwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLWNvbXBvbmVudC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC90aD5cclxuICAgICAgICAgICAgICA8dGggdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX3Nsb3QnXCJcclxuICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtc2xvdC0nK2V4dHJhY3RBcmdzKGZpZWxkLm5hbWUpLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCB7J3NvcnRhYmxlJzogaXNTb3J0YWJsZShmaWVsZCl9XVwiXHJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgPjwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zZXF1ZW5jZSdcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC1zZXF1ZW5jZScsIGZpZWxkLnRpdGxlQ2xhc3MgfHwgJyddXCIgdi1odG1sPVwicmVuZGVyVGl0bGUoZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggdi1pZj1cIm5vdEluKGV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpLCBbJ19fc2VxdWVuY2UnLCAnX19jaGVja2JveCcsICdfX2NvbXBvbmVudCcsICdfX3Nsb3QnXSlcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC0nK2ZpZWxkLm5hbWUsIGZpZWxkLnRpdGxlQ2xhc3MgfHwgJyddXCIgdi1odG1sPVwicmVuZGVyVGl0bGUoZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICAgICAgICA8dGggQGNsaWNrPVwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6aWQ9XCInXycgKyBmaWVsZC5uYW1lXCJcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCB7J3NvcnRhYmxlJzogaXNTb3J0YWJsZShmaWVsZCl9XVwiXHJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgIDx0aCB2LWlmPVwic2Nyb2xsVmlzaWJsZVwiIDpzdHlsZT1cInt3aWR0aDogc2Nyb2xsQmFyV2lkdGh9XCIgY2xhc3M9XCJ2dWV0YWJsZS1ndXR0ZXItY29sXCI+PC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ2dWV0YWJsZS1ib2R5LXdyYXBwZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0YWJsZUhlaWdodH1cIj5cclxuICAgIDx0YWJsZSA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlJywgY3NzLnRhYmxlQ2xhc3MsIGNzcy50YWJsZUJvZHlDbGFzc11cIj5cclxuICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudmlzaWJsZVwiPlxyXG4gICAgICAgICAgICA8Y29sXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDppZD1cIidfY29sXycgKyBmaWVsZC5uYW1lXCJcclxuICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IGZpZWxkLndpZHRofVwiXHJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS10aC0nK2ZpZWxkLm5hbWUsIGZpZWxkLnRpdGxlQ2xhc3NdXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC9jb2xncm91cD5cclxuICAgICAgPHRib2R5IHYtY2xvYWsgY2xhc3M9XCJ2dWV0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKGl0ZW0sIGl0ZW1JbmRleCkgaW4gdGFibGVEYXRhXCI+XHJcbiAgICAgICAgICA8dHIgXHJcbiAgICAgICAgICAgIDprZXk9XCJpdGVtSW5kZXhcIlxyXG4gICAgICAgICAgICA6aXRlbS1pbmRleD1cIml0ZW1JbmRleFwiIFxyXG4gICAgICAgICAgICA6cmVuZGVyPVwib25Sb3dDaGFuZ2VkKGl0ZW0pXCIgXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIm9uUm93Q2xhc3MoaXRlbSwgaXRlbUluZGV4KVwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cIm9uUm93Q2xpY2tlZChpdGVtLCAkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uUm93RG91YmxlQ2xpY2tlZChpdGVtLCAkZXZlbnQpXCIgXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImZpZWxkLnZpc2libGVcIj5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiaXNTcGVjaWFsRmllbGQoZmllbGQubmFtZSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zZXF1ZW5jZSdcIiBcclxuICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS1zZXF1ZW5jZScsIGZpZWxkLmRhdGFDbGFzc11cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclNlcXVlbmNlKGl0ZW1JbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19oYW5kbGUnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtaGFuZGxlJywgZmllbGQuZGF0YUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVySWNvblRhZyhbJ2hhbmRsZS1pY29uJywgY3NzLmhhbmRsZUljb25dKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX2NoZWNrYm94J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLWNoZWNrYm94ZXMnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cInRvZ2dsZUNoZWNrYm94KGl0ZW0sIGZpZWxkLm5hbWUsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgOmNoZWNrZWQ9XCJyb3dTZWxlY3RlZChpdGVtLCBmaWVsZC5uYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19jb21wb25lbnQnXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtY29tcG9uZW50JywgZmllbGQuZGF0YUNsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cImV4dHJhY3RBcmdzKGZpZWxkLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIDpyb3ctZGF0YT1cIml0ZW1cIiA6cm93LWluZGV4PVwiaXRlbUluZGV4XCIgOnJvdy1maWVsZD1cImZpZWxkLnNvcnRGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvY29tcG9uZW50PlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19zbG90J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXNsb3QnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbG90IDpuYW1lPVwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgOnJvdy1kYXRhPVwiaXRlbVwiIDpyb3ctaW5kZXg9XCJpdGVtSW5kZXhcIiA6cm93LWZpZWxkPVwiZmllbGQuc29ydEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9zbG90PlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCA6Y2xhc3M9XCJmaWVsZC5kYXRhQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJOb3JtYWxGaWVsZChmaWVsZCwgaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2VsbENsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT1cIm9uQ2VsbFJpZ2h0Q2xpY2tlZChpdGVtLCBmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwidXNlRGV0YWlsUm93XCI+XHJcbiAgICAgICAgICAgIDx0cmFuc2l0aW9uIDpuYW1lPVwiZGV0YWlsUm93VHJhbnNpdGlvblwiIDprZXk9XCJpdGVtSW5kZXhcIj5cclxuICAgICAgICAgICAgICA8dHIgdi1pZj1cImlzVmlzaWJsZURldGFpbFJvdyhpdGVtW3RyYWNrQnldKVwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbY3NzLmRldGFpbFJvd0NsYXNzXVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkRldGFpbFJvd0NsaWNrKGl0ZW0sICRldmVudClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx0ZCA6Y29sc3Bhbj1cImNvdW50VmlzaWJsZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50IDppcz1cImRldGFpbFJvd0NvbXBvbmVudFwiIDpyb3ctZGF0YT1cIml0ZW1cIiA6cm93LWluZGV4PVwiaXRlbUluZGV4XCI+PC9jb21wb25lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdHJhbnNpdGlvbj5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImRpc3BsYXlFbXB0eURhdGFSb3dcIj5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRkIDpjb2xzcGFuPVwiY291bnRWaXNpYmxlRmllbGRzXCIgY2xhc3M9XCJ2dWV0YWJsZS1lbXB0eS1yZXN1bHRcIiB2LWh0bWw9XCJub0RhdGFUZW1wbGF0ZVwiPjwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJsZXNzVGhhbk1pblJvd3NcIj5cclxuICAgICAgICAgIDx0ciB2LWZvcj1cImkgaW4gYmxhbmtSb3dzXCIgY2xhc3M9XCJibGFuay1yb3dcIiA6a2V5PVwiaVwiPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XCJmaWVsZC52aXNpYmxlXCIgOmtleT1cImZpZWxkSW5kZXhcIj4mbmJzcDs8L3RkPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjx0YWJsZSB2LWVsc2UgOmNsYXNzPVwiWyd2dWV0YWJsZScsIGNzcy50YWJsZUNsYXNzXVwiPiA8IS0tIG5vIGZpeGVkIGhlYWRlciAtIHJlZ3VsYXIgdGFibGUgLS0+XHJcbiAgPHRoZWFkPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXCI+XHJcbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJmaWVsZC52aXNpYmxlXCI+XHJcbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgIDx0aCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXCJcclxuICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtY2hlY2tib3gtJyt0cmFja0J5LCBmaWVsZC50aXRsZUNsYXNzXVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgQGNoYW5nZT1cInRvZ2dsZUFsbENoZWNrYm94ZXMoZmllbGQubmFtZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cImNoZWNrQ2hlY2tib3hlc1N0YXRlKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY29tcG9uZW50J1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLWNvbXBvbmVudC0nK3RyYWNrQnksIGZpZWxkLnRpdGxlQ2xhc3MsIHNvcnRDbGFzcyhmaWVsZCksIHsnc29ydGFibGUnOiBpc1NvcnRhYmxlKGZpZWxkKX1dXCJcclxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICAgIEBjbGljaz1cIm9yZGVyQnkoZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICA+PC90aD5cclxuICAgICAgICAgICAgPHRoIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zbG90J1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLXNsb3QtJytleHRyYWN0QXJncyhmaWVsZC5uYW1lKSwgZmllbGQudGl0bGVDbGFzcywgc29ydENsYXNzKGZpZWxkKSwgeydzb3J0YWJsZSc6IGlzU29ydGFibGUoZmllbGQpfV1cIlxyXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwib3JkZXJCeShmaWVsZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgICA8dGggdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09ICdfX3NlcXVlbmNlJ1wiXHJcbiAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogZmllbGQud2lkdGh9XCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLXRoLXNlcXVlbmNlJywgZmllbGQudGl0bGVDbGFzcyB8fCAnJywgc29ydENsYXNzKGZpZWxkKV1cIiB2LWh0bWw9XCJyZW5kZXJUaXRsZShmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC90aD5cclxuICAgICAgICAgICAgPHRoIHYtaWY9XCJub3RJbihleHRyYWN0TmFtZShmaWVsZC5uYW1lKSwgWydfX3NlcXVlbmNlJywgJ19fY2hlY2tib3gnLCAnX19jb21wb25lbnQnLCAnX19zbG90J10pXCJcclxuICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzIHx8ICcnLCBzb3J0Q2xhc3MoZmllbGQpXVwiIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XHJcbiAgICAgICAgICAgIDx0aCBAY2xpY2s9XCJvcmRlckJ5KGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgOmlkPVwiJ18nICsgZmllbGQubmFtZVwiXHJcbiAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiBmaWVsZC53aWR0aH1cIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtdGgtJytmaWVsZC5uYW1lLCBmaWVsZC50aXRsZUNsYXNzLCBzb3J0Q2xhc3MoZmllbGQpLCAgeydzb3J0YWJsZSc6IGlzU29ydGFibGUoZmllbGQpfV1cIlxyXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclRpdGxlKGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgPC90cj5cclxuICA8L3RoZWFkPlxyXG4gIDx0Ym9keSB2LWNsb2FrIGNsYXNzPVwidnVldGFibGUtYm9keVwiPlxyXG4gICAgPHRlbXBsYXRlIHYtZm9yPVwiKGl0ZW0sIGl0ZW1JbmRleCkgaW4gdGFibGVEYXRhXCI+XHJcbiAgICAgIDx0ciBAZGJsY2xpY2s9XCJvblJvd0RvdWJsZUNsaWNrZWQoaXRlbSwgJGV2ZW50KVwiIFxyXG4gICAgICAgIDprZXk9XCJpdGVtSW5kZXhcIlxyXG4gICAgICAgIDppdGVtLWluZGV4PVwiaXRlbUluZGV4XCIgXHJcbiAgICAgICAgOnJlbmRlcj1cIm9uUm93Q2hhbmdlZChpdGVtKVwiIFxyXG4gICAgICAgIDpjbGFzcz1cIm9uUm93Q2xhc3MoaXRlbSwgaXRlbUluZGV4KVwiXHJcbiAgICAgICAgQGNsaWNrPVwib25Sb3dDbGlja2VkKGl0ZW0sICRldmVudClcIiBcclxuICAgICAgPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihmaWVsZCwgZmllbGRJbmRleCkgaW4gdGFibGVGaWVsZHNcIj5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudmlzaWJsZVwiPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImlzU3BlY2lhbEZpZWxkKGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PSAnX19zZXF1ZW5jZSdcIiBcclxuICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtc2VxdWVuY2UnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlclNlcXVlbmNlKGl0ZW1JbmRleClcIlxyXG4gICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19faGFuZGxlJ1wiIFxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiWyd2dWV0YWJsZS1oYW5kbGUnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlckljb25UYWcoWydoYW5kbGUtaWNvbicsIGNzcy5oYW5kbGVJY29uXSlcIlxyXG4gICAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVwiZXh0cmFjdE5hbWUoZmllbGQubmFtZSkgPT0gJ19fY2hlY2tib3gnXCIgXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLWNoZWNrYm94ZXMnLCBmaWVsZC5kYXRhQ2xhc3NdXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgQGNoYW5nZT1cInRvZ2dsZUNoZWNrYm94KGl0ZW0sIGZpZWxkLm5hbWUsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICA6Y2hlY2tlZD1cInJvd1NlbGVjdGVkKGl0ZW0sIGZpZWxkLm5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQgdi1pZj1cImV4dHJhY3ROYW1lKGZpZWxkLm5hbWUpID09PSAnX19jb21wb25lbnQnXCIgXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJbJ3Z1ZXRhYmxlLWNvbXBvbmVudCcsIGZpZWxkLmRhdGFDbGFzc11cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxjb21wb25lbnQgOmlzPVwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICA6cm93LWRhdGE9XCJpdGVtXCIgOnJvdy1pbmRleD1cIml0ZW1JbmRleFwiIDpyb3ctZmllbGQ9XCJmaWVsZC5zb3J0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgPjwvY29tcG9uZW50PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIHYtaWY9XCJleHRyYWN0TmFtZShmaWVsZC5uYW1lKSA9PT0gJ19fc2xvdCdcIiBcclxuICAgICAgICAgICAgICAgIDprZXk9XCJmaWVsZEluZGV4XCJcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIlsndnVldGFibGUtc2xvdCcsIGZpZWxkLmRhdGFDbGFzc11cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbG90IDpuYW1lPVwiZXh0cmFjdEFyZ3MoZmllbGQubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICA6cm93LWRhdGE9XCJpdGVtXCIgOnJvdy1pbmRleD1cIml0ZW1JbmRleFwiIDpyb3ctZmllbGQ9XCJmaWVsZC5zb3J0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgPjwvc2xvdD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICAgICAgICAgIDx0ZCB2LWlmPVwiaGFzQ2FsbGJhY2soZmllbGQpXCIgXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwiZmllbGRJbmRleFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJmaWVsZC5kYXRhQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiY2FsbENhbGxiYWNrKGZpZWxkLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNlbGxDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PVwib25DZWxsUmlnaHRDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgICAgICA8dGQgdi1lbHNlIFxyXG4gICAgICAgICAgICAgICAgOmtleT1cImZpZWxkSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZmllbGQuZGF0YUNsYXNzXCJcclxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldE9iamVjdFZhbHVlKGl0ZW0sIGZpZWxkLm5hbWUsICcnKVwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNlbGxDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIEBkYmxjbGljaz1cIm9uQ2VsbERvdWJsZUNsaWNrZWQoaXRlbSwgZmllbGQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PVwib25DZWxsUmlnaHRDbGlja2VkKGl0ZW0sIGZpZWxkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRlbXBsYXRlIHYtaWY9XCJ1c2VEZXRhaWxSb3dcIj5cclxuICAgICAgICA8dHJhbnNpdGlvbiA6bmFtZT1cImRldGFpbFJvd1RyYW5zaXRpb25cIiA6a2V5PVwiaXRlbUluZGV4XCI+XHJcbiAgICAgICAgICA8dHIgdi1pZj1cImlzVmlzaWJsZURldGFpbFJvdyhpdGVtW3RyYWNrQnldKVwiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIltjc3MuZGV0YWlsUm93Q2xhc3NdXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwib25EZXRhaWxSb3dDbGljayhpdGVtLCAkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHRkIDpjb2xzcGFuPVwiY291bnRWaXNpYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgPGNvbXBvbmVudCA6aXM9XCJkZXRhaWxSb3dDb21wb25lbnRcIiA6cm93LWRhdGE9XCJpdGVtXCIgOnJvdy1pbmRleD1cIml0ZW1JbmRleFwiPjwvY29tcG9uZW50PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RyYW5zaXRpb24+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPHRlbXBsYXRlIHYtaWY9XCJkaXNwbGF5RW1wdHlEYXRhUm93XCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgOmNvbHNwYW49XCJjb3VudFZpc2libGVGaWVsZHNcIiBjbGFzcz1cInZ1ZXRhYmxlLWVtcHR5LXJlc3VsdFwiIHYtaHRtbD1cIm5vRGF0YVRlbXBsYXRlXCI+PC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1pZj1cImxlc3NUaGFuTWluUm93c1wiPlxyXG4gICAgICA8dHIgdi1mb3I9XCJpIGluIGJsYW5rUm93c1wiIGNsYXNzPVwiYmxhbmstcm93XCIgOmtleT1cImlcIj5cclxuICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoZmllbGQsIGZpZWxkSW5kZXgpIGluIHRhYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICA8dGQgdi1pZj1cImZpZWxkLnZpc2libGVcIiA6a2V5PVwiZmllbGRJbmRleFwiPiZuYnNwOzwvdGQ+XHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgPC90Ym9keT5cclxuPC90YWJsZT5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgZmllbGRzOiB7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIGxvYWRPblN0YXJ0OiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBhcGlVcmw6IHtcclxuICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICBodHRwTWV0aG9kOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICdnZXQnLFxyXG4gICAgICAgIHZhbGlkYXRvcjogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gWydnZXQnLCAncG9zdCddLmluZGV4T2YodmFsdWUpID4gLTFcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVhY3RpdmVBcGlVcmw6IHtcclxuICAgICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBhcGlNb2RlOiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IHRydWVcclxuICAgIH0sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0XSxcclxuICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgfSxcclxuICAgIGRhdGFUb3RhbDoge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQ6IDBcclxuICAgIH0sXHJcbiAgICBkYXRhTWFuYWdlcjoge1xyXG4gICAgICB0eXBlOiBGdW5jdGlvbixcclxuICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgfSxcclxuICAgIGRhdGFQYXRoOiB7XHJcbiAgICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHQ6ICdkYXRhJ1xyXG4gICAgfSxcclxuICAgIHBhZ2luYXRpb25QYXRoOiB7XHJcbiAgICAgICAgdHlwZTogW1N0cmluZ10sXHJcbiAgICAgICAgZGVmYXVsdDogJ2xpbmtzLnBhZ2luYXRpb24nXHJcbiAgICB9LFxyXG4gICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxyXG4gICAgICBkZWZhdWx0ICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc29ydDogJ3NvcnQnLFxyXG4gICAgICAgICAgcGFnZTogJ3BhZ2UnLFxyXG4gICAgICAgICAgcGVyUGFnZTogJ3Blcl9wYWdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGFwcGVuZFBhcmFtczoge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiB7fVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaHR0cE9wdGlvbnM6IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0ICgpIHtcclxuICAgICAgICByZXR1cm4ge31cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGh0dHBGZXRjaDoge1xyXG4gICAgICB0eXBlOiBGdW5jdGlvbixcclxuICAgICAgZGVmYXVsdDogbnVsbFxyXG4gICAgfSxcclxuICAgIHBlclBhZ2U6IHtcclxuICAgICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgICAgZGVmYXVsdDogMTBcclxuICAgIH0sXHJcbiAgICBpbml0aWFsUGFnZToge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQ6IDFcclxuICAgIH0sXHJcbiAgICBzb3J0T3JkZXI6IHtcclxuICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiBbXVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbXVsdGlTb3J0OiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgdGFibGVIZWlnaHQ6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiBudWxsXHJcbiAgICB9LFxyXG4gICAgLypcclxuICAgICAqIHBoeXNpY2FsIGtleSB0aGF0IHdpbGwgdHJpZ2dlciBtdWx0aS1zb3J0IG9wdGlvblxyXG4gICAgICogcG9zc2libGUgdmFsdWVzOiAnYWx0JywgJ2N0cmwnLCAnbWV0YScsICdzaGlmdCdcclxuICAgICAqICdjdHJsJyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZCBvbiBNYWNcclxuICAgICAqL1xyXG4gICAgbXVsdGlTb3J0S2V5OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ2FsdCdcclxuICAgIH0sXHJcbiAgICAvKiBkZXByZWNhdGVkICovXHJcbiAgICByb3dDbGFzc0NhbGxiYWNrOiB7XHJcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICByb3dDbGFzczoge1xyXG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXHJcbiAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICB9LFxyXG4gICAgZGV0YWlsUm93Q29tcG9uZW50OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICBkZXRhaWxSb3dUcmFuc2l0aW9uOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJydcclxuICAgIH0sXHJcbiAgICB0cmFja0J5OiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdDogJ2lkJ1xyXG4gICAgfSxcclxuICAgIGNzczoge1xyXG4gICAgICB0eXBlOiBPYmplY3QsXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0YWJsZUNsYXNzOiAndWkgYmx1ZSBzZWxlY3RhYmxlIGNlbGxlZCBzdGFja2FibGUgYXR0YWNoZWQgdGFibGUnLFxyXG4gICAgICAgICAgbG9hZGluZ0NsYXNzOiAnbG9hZGluZycsXHJcbiAgICAgICAgICBhc2NlbmRpbmdJY29uOiAnYmx1ZSBjaGV2cm9uIHVwIGljb24nLFxyXG4gICAgICAgICAgZGVzY2VuZGluZ0ljb246ICdibHVlIGNoZXZyb24gZG93biBpY29uJyxcclxuICAgICAgICAgIGFzY2VuZGluZ0NsYXNzOiAnc29ydGVkLWFzYycsXHJcbiAgICAgICAgICBkZXNjZW5kaW5nQ2xhc3M6ICdzb3J0ZWQtZGVzYycsXHJcbiAgICAgICAgICBzb3J0YWJsZUljb246ICcnLFxyXG4gICAgICAgICAgZGV0YWlsUm93Q2xhc3M6ICd2dWV0YWJsZS1kZXRhaWwtcm93JyxcclxuICAgICAgICAgIGhhbmRsZUljb246ICdncmV5IHNpZGViYXIgaWNvbicsXHJcbiAgICAgICAgICB0YWJsZUJvZHlDbGFzczogJ3Z1ZXRhYmxlLXNlbWFudGljLW5vLXRvcCB2dWV0YWJsZS1maXhlZC1sYXlvdXQnLFxyXG4gICAgICAgICAgdGFibGVIZWFkZXJDbGFzczogJ3Z1ZXRhYmxlLWZpeGVkLWxheW91dCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtaW5Sb3dzOiB7XHJcbiAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgZGVmYXVsdDogMFxyXG4gICAgfSxcclxuICAgIHNpbGVudDoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZVxyXG4gICAgfSxcclxuICAgIG5vRGF0YVRlbXBsYXRlOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICByZXR1cm4gJ05vIERhdGEgQXZhaWxhYmxlJ1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2hvd1NvcnRJY29uczoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiB0cnVlXHJcbiAgICB9XHJcbiAgfSxcclxuICBkYXRhICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV2ZW50UHJlZml4OiAndnVldGFibGU6JyxcclxuICAgICAgdGFibGVGaWVsZHM6IFtdLFxyXG4gICAgICB0YWJsZURhdGE6IG51bGwsXHJcbiAgICAgIHRhYmxlUGFnaW5hdGlvbjogbnVsbCxcclxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMuaW5pdGlhbFBhZ2UsXHJcbiAgICAgIHNlbGVjdGVkVG86IFtdLFxyXG4gICAgICB2aXNpYmxlRGV0YWlsUm93czogW10sXHJcbiAgICAgIGxhc3RTY3JvbGxQb3NpdGlvbjogMCxcclxuICAgICAgc2Nyb2xsQmFyV2lkdGg6ICcxN3B4JywgLy9jaHJvbWUgZGVmYXVsdFxyXG4gICAgICBzY3JvbGxWaXNpYmxlOiBmYWxzZSxcclxuICAgIH1cclxuICB9LFxyXG4gIG1vdW50ZWQgKCkge1xyXG4gICAgdGhpcy5ub3JtYWxpemVGaWVsZHMoKVxyXG4gICAgdGhpcy5ub3JtYWxpemVTb3J0T3JkZXIoKVxyXG4gICAgaWYgKHRoaXMuaXNGaXhlZEhlYWRlcikge1xyXG4gICAgICB0aGlzLnNjcm9sbEJhcldpZHRoID0gdGhpcy5nZXRTY3JvbGxCYXJXaWR0aCgpICsgJ3B4JztcclxuICAgIH1cclxuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLmZpcmVFdmVudCgnaW5pdGlhbGl6ZWQnLCB0aGlzLnRhYmxlRmllbGRzKVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkT25TdGFydCkge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRml4ZWRIZWFkZXIpIHtcclxuICAgICAgbGV0IGVsZW0gPSB0aGlzLiRlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2dWV0YWJsZS1ib2R5LXdyYXBwZXInKVswXTtcclxuICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuICBkZXN0cm95ZWQgKCkge1xyXG4gICAgbGV0IGVsZW0gPSB0aGlzLiRlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2dWV0YWJsZS1ib2R5LXdyYXBwZXInKVswXTtcclxuICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XHJcbiAgICB9XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgdmVyc2lvbjogKCkgPT4gVkVSU0lPTixcclxuICAgIHVzZURldGFpbFJvdyAoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlRGF0YSAmJiB0aGlzLnRhYmxlRGF0YVswXSAmJiB0aGlzLmRldGFpbFJvd0NvbXBvbmVudCAhPT0gJycgJiYgdHlwZW9mIHRoaXMudGFibGVEYXRhWzBdW3RoaXMudHJhY2tCeV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhpcy53YXJuKCdZb3UgbmVlZCB0byBkZWZpbmUgdW5pcXVlIHJvdyBpZGVudGlmaWVyIGluIG9yZGVyIGZvciBkZXRhaWwtcm93IGZlYXR1cmUgdG8gd29yay4gVXNlIGB0cmFjay1ieWAgcHJvcCB0byBkZWZpbmUgb25lIScpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbFJvd0NvbXBvbmVudCAhPT0gJydcclxuICAgIH0sXHJcbiAgICBjb3VudFZpc2libGVGaWVsZHMgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpZWxkcy5maWx0ZXIoZnVuY3Rpb24oZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gZmllbGQudmlzaWJsZVxyXG4gICAgICB9KS5sZW5ndGhcclxuICAgIH0sXHJcbiAgICBjb3VudFRhYmxlRGF0YSAoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlRGF0YSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLmxlbmd0aFxyXG4gICAgfSxcclxuICAgIGRpc3BsYXlFbXB0eURhdGFSb3cgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb3VudFRhYmxlRGF0YSA9PT0gMCAmJiB0aGlzLm5vRGF0YVRlbXBsYXRlLmxlbmd0aCA+IDBcclxuICAgIH0sXHJcbiAgICBsZXNzVGhhbk1pblJvd3MgKCkge1xyXG4gICAgICBpZiAodGhpcy50YWJsZURhdGEgPT09IG51bGwgfHwgdGhpcy50YWJsZURhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZURhdGEubGVuZ3RoIDwgdGhpcy5taW5Sb3dzXHJcbiAgICB9LFxyXG4gICAgYmxhbmtSb3dzICgpIHtcclxuICAgICAgaWYgKHRoaXMudGFibGVEYXRhID09PSBudWxsIHx8IHRoaXMudGFibGVEYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1pblJvd3NcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50YWJsZURhdGEubGVuZ3RoID49IHRoaXMubWluUm93cykge1xyXG4gICAgICAgIHJldHVybiAwXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLm1pblJvd3MgLSB0aGlzLnRhYmxlRGF0YS5sZW5ndGhcclxuICAgIH0sXHJcbiAgICBpc0FwaU1vZGUgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcGlNb2RlXHJcbiAgICB9LFxyXG4gICAgaXNEYXRhTW9kZSAoKSB7XHJcbiAgICAgIHJldHVybiAhIHRoaXMuYXBpTW9kZVxyXG4gICAgfSxcclxuICAgIGlzRml4ZWRIZWFkZXIgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUhlaWdodCAhPSBudWxsXHJcbiAgICB9XHJcbiAgfSxcclxuICBtZXRob2RzOiB7XHJcbiAgICBnZXRTY3JvbGxCYXJXaWR0aCAoKSB7XHJcbiAgICAgIGNvbnN0IG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblxyXG4gICAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgIG91dGVyLnN0eWxlLndpZHRoID0gJzEwMHB4JztcclxuXHJcbiAgICAgIGlubmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG5cclxuXHJcbiAgICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XHJcblxyXG5cclxuICAgICAgY29uc3Qgd2lkdGhXaXRob3V0U2Nyb2xsYmFyID0gb3V0ZXIub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xyXG5cclxuICAgICAgY29uc3Qgd2lkdGhXaXRoU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcblxyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XHJcblxyXG5cclxuICAgICAgcmV0dXJuICh3aWR0aFdpdGhvdXRTY3JvbGxiYXIgLSB3aWR0aFdpdGhTY3JvbGxiYXIpO1xyXG4gICAgfSxcclxuICAgIGhhbmRsZVNjcm9sbCAoZSkgeyAvL21ha2Ugc3VyZSB0aGF0IHRoZSBoZWFkZXIgYW5kIHRoZSBib2R5IGFyZSBhbGlnbmVkIHdoZW4gc2Nyb2xsaW5nIGhvcml6b250YWxseSBvbiBhIHRhYmxlIHRoYXQgaXMgd2lkZXIgdGhhbiB0aGUgdmlld3BvcnRcclxuICAgICAgbGV0IGhvcml6b250YWwgPSBlLmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdDtcclxuICAgICAgaWYgKGhvcml6b250YWwgIT0gdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24pIHsgLy9kb24ndCBtb2RpZnkgaGVhZGVyIHNjcm9sbCBpZiB3ZSBhcmUgc2Nyb2xsaW5nIHZlcnRpY2FsbHlcclxuICAgICAgICBsZXQgaGVhZGVyID0gdGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnVldGFibGUtaGVhZC13cmFwcGVyJylbMF1cclxuICAgICAgICBpZiAoaGVhZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIGhlYWRlci5zY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBob3Jpem9udGFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgIG5vcm1hbGl6ZUZpZWxkcyAoKSB7XHJcbiAgICAgIGlmICh0eXBlb2YodGhpcy5maWVsZHMpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRoaXMud2FybignWW91IG5lZWQgdG8gcHJvdmlkZSBcImZpZWxkc1wiIHByb3AuJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50YWJsZUZpZWxkcyA9IFtdXHJcbiAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICBsZXQgb2JqXHJcbiAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQsIGkpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChmaWVsZCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLFxyXG4gICAgICAgICAgICB0aXRsZTogc2VsZi5zZXRUaXRsZShmaWVsZCksXHJcbiAgICAgICAgICAgIHRpdGxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICBkYXRhQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcclxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgICAgICAgIHRpdGxlOiAoZmllbGQudGl0bGUgPT09IHVuZGVmaW5lZCkgPyBzZWxmLnNldFRpdGxlKGZpZWxkLm5hbWUpIDogZmllbGQudGl0bGUsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogZmllbGQuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICB0aXRsZUNsYXNzOiAoZmllbGQudGl0bGVDbGFzcyA9PT0gdW5kZWZpbmVkKSA/ICcnIDogZmllbGQudGl0bGVDbGFzcyxcclxuICAgICAgICAgICAgZGF0YUNsYXNzOiAoZmllbGQuZGF0YUNsYXNzID09PSB1bmRlZmluZWQpID8gJycgOiBmaWVsZC5kYXRhQ2xhc3MsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZmllbGQuY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkgPyAnJyA6IGZpZWxkLmNhbGxiYWNrLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAoZmllbGQudmlzaWJsZSA9PT0gdW5kZWZpbmVkKSA/IHRydWUgOiBmaWVsZC52aXNpYmxlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnRhYmxlRmllbGRzLnB1c2gob2JqKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHNldERhdGEgKGRhdGEpIHtcclxuICAgICAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mKGRhdGEpID09PSAndW5kZWZpbmVkJykgcmV0dXJuXHJcblxyXG4gICAgICB0aGlzLmZpcmVFdmVudCgnbG9hZGluZycpXHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gZGF0YVxyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUoZGF0YSwgdGhpcy5kYXRhUGF0aCwgbnVsbClcclxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSB0aGlzLmdldE9iamVjdFZhbHVlKGRhdGEsIHRoaXMucGFnaW5hdGlvblBhdGgsIG51bGwpXHJcblxyXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLmZpeEhlYWRlcigpXHJcbiAgICAgICAgdGhpcy5maXJlRXZlbnQoJ3BhZ2luYXRpb24tZGF0YScsIHRoaXMudGFibGVQYWdpbmF0aW9uKVxyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHNldFRpdGxlIChzdHIpIHtcclxuICAgICAgaWYgKHRoaXMuaXNTcGVjaWFsRmllbGQoc3RyKSkge1xyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy50aXRsZUNhc2Uoc3RyKVxyXG4gICAgfSxcclxuICAgIGdldFRpdGxlIChmaWVsZCkge1xyXG4gICAgICBpZiAodHlwZW9mKGZpZWxkLnRpdGxlKSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZpZWxkLnRpdGxlKClcclxuXHJcbiAgICAgIHJldHVybiB0eXBlb2YoZmllbGQudGl0bGUpID09PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gZmllbGQubmFtZS5yZXBsYWNlKCcuJywgJyAnKVxyXG4gICAgICAgIDogZmllbGQudGl0bGVcclxuICAgIH0sXHJcbiAgICByZW5kZXJUaXRsZSAoZmllbGQpIHtcclxuICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShmaWVsZClcclxuXHJcbiAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAwICYmIHRoaXMuaXNJbkN1cnJlbnRTb3J0R3JvdXAoZmllbGQpIHx8IHRoaXMuaGFzU29ydGFibGVJY29uKGZpZWxkKSkge1xyXG4gICAgICAgIGxldCBzdHlsZSA9IGBvcGFjaXR5OiR7dGhpcy5zb3J0SWNvbk9wYWNpdHkoZmllbGQpfTtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpyaWdodGBcclxuICAgICAgICBsZXQgaWNvblRhZyA9IHRoaXMuc2hvd1NvcnRJY29ucyA/IHRoaXMucmVuZGVySWNvblRhZyhbJ3NvcnQtaWNvbicsIHRoaXMuc29ydEljb24oZmllbGQpXSwgYHN0eWxlPVwiJHtzdHlsZX1cImApIDogJydcclxuICAgICAgICByZXR1cm4gdGl0bGUgKyAnICcgKyBpY29uVGFnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aXRsZVxyXG4gICAgfSxcclxuICAgIHJlbmRlclNlcXVlbmNlIChpbmRleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZVBhZ2luYXRpb25cclxuICAgICAgICA/IHRoaXMudGFibGVQYWdpbmF0aW9uLmZyb20gKyBpbmRleFxyXG4gICAgICAgIDogaW5kZXhcclxuICAgIH0sXHJcbiAgICByZW5kZXJOb3JtYWxGaWVsZCAoZmllbGQsIGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFzQ2FsbGJhY2soZmllbGQpXHJcbiAgICAgICAgPyB0aGlzLmNhbGxDYWxsYmFjayhmaWVsZCwgaXRlbSlcclxuICAgICAgICA6IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaXRlbSwgZmllbGQubmFtZSwgJycpXHJcbiAgICB9LFxyXG4gICAgaXNTcGVjaWFsRmllbGQgKGZpZWxkTmFtZSkge1xyXG4gICAgICByZXR1cm4gZmllbGROYW1lLnNsaWNlKDAsIDIpID09PSAnX18nXHJcbiAgICB9LFxyXG4gICAgdGl0bGVDYXNlIChzdHIpIHtcclxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHcrL2csIGZ1bmN0aW9uKHR4dCkge1xyXG4gICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBjYW1lbENhc2UgKHN0ciwgZGVsaW1pdGVyID0gJ18nKSB7XHJcbiAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICByZXR1cm4gc3RyLnNwbGl0KGRlbGltaXRlcikubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gc2VsZi50aXRsZUNhc2UoaXRlbSlcclxuICAgICAgfSkuam9pbignJylcclxuICAgIH0sXHJcbiAgICBub3RJbiAoc3RyLCBhcnIpIHtcclxuICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHN0cikgPT09IC0xXHJcbiAgICB9LFxyXG4gICAgbG9hZERhdGEgKHN1Y2Nlc3MgPSB0aGlzLmxvYWRTdWNjZXNzLCBmYWlsZWQgPSB0aGlzLmxvYWRGYWlsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNEYXRhTW9kZSkge1xyXG4gICAgICAgIHRoaXMuY2FsbERhdGFNYW5hZ2VyKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRpbmcnKVxyXG5cclxuICAgICAgdGhpcy5odHRwT3B0aW9uc1sncGFyYW1zJ10gPSB0aGlzLmdldEFwcGVuZFBhcmFtcyggdGhpcy5nZXRBbGxRdWVyeVBhcmFtcygpIClcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmZldGNoKHRoaXMuYXBpVXJsLCB0aGlzLmh0dHBPcHRpb25zKS50aGVuKFxyXG4gICAgICAgICAgc3VjY2VzcyxcclxuICAgICAgICAgIGZhaWxlZFxyXG4gICAgICApLmNhdGNoKCgpID0+IGZhaWxlZCgpKVxyXG4gICAgfSxcclxuICAgIGZldGNoIChhcGlVcmwsIGh0dHBPcHRpb25zKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBGZXRjaFxyXG4gICAgICAgICAgPyB0aGlzLmh0dHBGZXRjaChhcGlVcmwsIGh0dHBPcHRpb25zKVxyXG4gICAgICAgICAgOiBheGlvc1t0aGlzLmh0dHBNZXRob2RdKGFwaVVybCwgaHR0cE9wdGlvbnMpXHJcbiAgICB9LFxyXG4gICAgbG9hZFN1Y2Nlc3MgKHJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkLXN1Y2Nlc3MnLCByZXNwb25zZSlcclxuXHJcbiAgICAgIGxldCBib2R5ID0gdGhpcy50cmFuc2Zvcm0ocmVzcG9uc2UuZGF0YSlcclxuXHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5nZXRPYmplY3RWYWx1ZShib2R5LCB0aGlzLmRhdGFQYXRoLCBudWxsKVxyXG4gICAgICB0aGlzLnRhYmxlUGFnaW5hdGlvbiA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUoYm9keSwgdGhpcy5wYWdpbmF0aW9uUGF0aCwgbnVsbClcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhYmxlUGFnaW5hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMud2FybigndnVldGFibGU6IHBhZ2luYXRpb24tcGF0aCBcIicgKyB0aGlzLnBhZ2luYXRpb25QYXRoICsgJ1wiIG5vdCBmb3VuZC4gJ1xyXG4gICAgICAgICAgKyAnSXQgbG9va3MgbGlrZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXZlciBkb2VzIG5vdCBoYXZlIHBhZ2luYXRpb24gaW5mb3JtYXRpb24gJ1xyXG4gICAgICAgICAgKyBcIm9yIHlvdSBtYXkgaGF2ZSBzZXQgaXQgaW5jb3JyZWN0bHkuXFxuXCJcclxuICAgICAgICAgICsgJ1lvdSBjYW4gZXhwbGljaXRseSBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBwYWdpbmF0aW9uLXBhdGg9XCJcIi4nXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLmZpeEhlYWRlcigpXHJcbiAgICAgICAgdGhpcy5maXJlRXZlbnQoJ3BhZ2luYXRpb24tZGF0YScsIHRoaXMudGFibGVQYWdpbmF0aW9uKVxyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KCdsb2FkZWQnKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGZpeEhlYWRlcigpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzRml4ZWRIZWFkZXIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBlbGVtID0gdGhpcy4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndnVldGFibGUtYm9keS13cmFwcGVyJylbMF1cclxuICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChlbGVtLnNjcm9sbEhlaWdodCA+IGVsZW0uY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGxvYWRGYWlsZWQgKHJlc3BvbnNlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2xvYWQtZXJyb3InLCByZXNwb25zZSlcclxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWQtZXJyb3InLCByZXNwb25zZSlcclxuICAgICAgdGhpcy5maXJlRXZlbnQoJ2xvYWRlZCcpXHJcbiAgICB9LFxyXG4gICAgdHJhbnNmb3JtIChkYXRhKSB7XHJcbiAgICAgIGxldCBmdW5jID0gJ3RyYW5zZm9ybSdcclxuXHJcbiAgICAgIGlmICh0aGlzLnBhcmVudEZ1bmN0aW9uRXhpc3RzKGZ1bmMpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50W2Z1bmNdLmNhbGwodGhpcy4kcGFyZW50LCBkYXRhKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YVxyXG4gICAgfSxcclxuICAgIHBhcmVudEZ1bmN0aW9uRXhpc3RzIChmdW5jKSB7XHJcbiAgICAgIHJldHVybiAoZnVuYyAhPT0gJycgJiYgdHlwZW9mIHRoaXMuJHBhcmVudFtmdW5jXSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgIH0sXHJcbiAgICBjYWxsUGFyZW50RnVuY3Rpb24gKGZ1bmMsIGFyZ3MsIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMucGFyZW50RnVuY3Rpb25FeGlzdHMoZnVuYykpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50W2Z1bmNdLmNhbGwodGhpcy4kcGFyZW50LCBhcmdzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlXHJcbiAgICB9LFxyXG4gICAgZmlyZUV2ZW50IChldmVudE5hbWUsIGFyZ3MpIHtcclxuICAgICAgdGhpcy4kZW1pdCh0aGlzLmV2ZW50UHJlZml4ICsgZXZlbnROYW1lLCBhcmdzKVxyXG4gICAgfSxcclxuICAgIHdhcm4gKG1zZykge1xyXG4gICAgICBpZiAoIXRoaXMuc2lsZW50KSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKG1zZylcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEFsbFF1ZXJ5UGFyYW1zICgpIHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9XHJcblxyXG4gICAgICBpZiAodHlwZW9mKHRoaXMucXVlcnlQYXJhbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcyh0aGlzLnNvcnRPcmRlciwgdGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wZXJQYWdlKVxyXG4gICAgICAgIHJldHVybiB0eXBlb2YocGFyYW1zKSAhPT0gJ29iamVjdCcgPyB7fSA6IHBhcmFtc1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwYXJhbXNbdGhpcy5xdWVyeVBhcmFtcy5zb3J0XSA9IHRoaXMuZ2V0U29ydFBhcmFtKClcclxuICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbXMucGFnZV0gPSB0aGlzLmN1cnJlbnRQYWdlXHJcbiAgICAgIHBhcmFtc1t0aGlzLnF1ZXJ5UGFyYW1zLnBlclBhZ2VdID0gdGhpcy5wZXJQYWdlXHJcblxyXG4gICAgICByZXR1cm4gcGFyYW1zXHJcbiAgICB9LFxyXG4gICAgZ2V0U29ydFBhcmFtICgpIHtcclxuICAgICAgaWYgKCF0aGlzLnNvcnRPcmRlciB8fCB0aGlzLnNvcnRPcmRlci5maWVsZCA9PSAnJykge1xyXG4gICAgICAgIHJldHVybiAnJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuJHBhcmVudFsnZ2V0U29ydFBhcmFtJ10gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kcGFyZW50WydnZXRTb3J0UGFyYW0nXS5jYWxsKHRoaXMuJHBhcmVudCwgdGhpcy5zb3J0T3JkZXIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRTb3J0UGFyYW0oKVxyXG4gICAgfSxcclxuICAgIGdldERlZmF1bHRTb3J0UGFyYW0gKCkge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc29ydE9yZGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9ICh0eXBlb2YgdGhpcy5zb3J0T3JkZXJbaV0uc29ydEZpZWxkID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgID8gdGhpcy5zb3J0T3JkZXJbaV0uZmllbGRcclxuICAgICAgICAgIDogdGhpcy5zb3J0T3JkZXJbaV0uc29ydEZpZWxkO1xyXG5cclxuICAgICAgICByZXN1bHQgKz0gZmllbGROYW1lICsgJ3wnICsgdGhpcy5zb3J0T3JkZXJbaV0uZGlyZWN0aW9uICsgKChpKzEpIDwgdGhpcy5zb3J0T3JkZXIubGVuZ3RoID8gJywnIDogJycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXBwZW5kUGFyYW1zIChwYXJhbXMpIHtcclxuICAgICAgZm9yIChsZXQgeCBpbiB0aGlzLmFwcGVuZFBhcmFtcykge1xyXG4gICAgICAgIHBhcmFtc1t4XSA9IHRoaXMuYXBwZW5kUGFyYW1zW3hdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwYXJhbXNcclxuICAgIH0sXHJcbiAgICBleHRyYWN0TmFtZSAoc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJzonKVswXS50cmltKClcclxuICAgIH0sXHJcbiAgICBleHRyYWN0QXJncyAoc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJzonKVsxXVxyXG4gICAgfSxcclxuICAgIGlzU29ydGFibGUgKGZpZWxkKSB7XHJcbiAgICAgIHJldHVybiAhKHR5cGVvZiBmaWVsZC5zb3J0RmllbGQgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgfSxcclxuICAgIGlzSW5DdXJyZW50U29ydEdyb3VwIChmaWVsZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpICE9PSBmYWxzZTtcclxuICAgIH0sXHJcbiAgICBoYXNTb3J0YWJsZUljb24gKGZpZWxkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzU29ydGFibGUoZmllbGQpICYmIHRoaXMuY3NzLnNvcnRhYmxlSWNvbiAhPSAnJ1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbiAoZmllbGQpIHtcclxuICAgICAgaWYgKCAhIHRoaXMuaXNTb3J0YWJsZShmaWVsZCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNvcnRPcmRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkSXNJblNvcnRPcmRlclBvc2l0aW9uKGZpZWxkLCBpKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgZmllbGRJc0luU29ydE9yZGVyUG9zaXRpb24gKGZpZWxkLCBpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRPcmRlcltpXS5maWVsZCA9PT0gZmllbGQubmFtZSAmJiB0aGlzLnNvcnRPcmRlcltpXS5zb3J0RmllbGQgPT09IGZpZWxkLnNvcnRGaWVsZFxyXG4gICAgfSxcclxuICAgIG9yZGVyQnkgKGZpZWxkLCBldmVudCkge1xyXG4gICAgICBpZiAoICEgdGhpcy5pc1NvcnRhYmxlKGZpZWxkKSApIHJldHVyblxyXG5cclxuICAgICAgbGV0IGtleSA9IHRoaXMubXVsdGlTb3J0S2V5LnRvTG93ZXJDYXNlKCkgKyAnS2V5J1xyXG5cclxuICAgICAgaWYgKHRoaXMubXVsdGlTb3J0ICYmIGV2ZW50W2tleV0pIHsgLy9hZGRpbmcgY29sdW1uIHRvIG11bHRpc29ydFxyXG4gICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0KGZpZWxkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vbm8gbXVsdGlzb3J0LCBvciByZXNldHRpbmcgc29ydFxyXG4gICAgICAgIHRoaXMuc2luZ2xlQ29sdW1uU29ydChmaWVsZClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDEgICAgLy8gcmVzZXQgcGFnZSBpbmRleFxyXG4gICAgICBpZiAodGhpcy5hcGlNb2RlIHx8IHRoaXMuZGF0YU1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG11bHRpQ29sdW1uU29ydCAoZmllbGQpIHtcclxuICAgICAgbGV0IGkgPSB0aGlzLmN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbihmaWVsZCk7XHJcblxyXG4gICAgICBpZihpID09PSBmYWxzZSkgeyAvL3RoaXMgZmllbGQgaXMgbm90IGluIHRoZSBzb3J0IGFycmF5IHlldFxyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyLnB1c2goe1xyXG4gICAgICAgICAgZmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICBzb3J0RmllbGQ6IGZpZWxkLnNvcnRGaWVsZCxcclxuICAgICAgICAgIGRpcmVjdGlvbjogJ2FzYydcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHsgLy90aGlzIGZpZWxkIGlzIGluIHRoZSBzb3J0IGFycmF5LCBub3cgd2UgY2hhbmdlIGl0cyBzdGF0ZVxyXG4gICAgICAgIGlmKHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcclxuICAgICAgICAgIC8vIHN3aXRjaCBkaXJlY3Rpb25cclxuICAgICAgICAgIHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiA9ICdkZXNjJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL3JlbW92ZSBzb3J0IGNvbmRpdGlvblxyXG4gICAgICAgICAgdGhpcy5zb3J0T3JkZXIuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNpbmdsZUNvbHVtblNvcnQgKGZpZWxkKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRPcmRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmNsZWFyU29ydE9yZGVyKClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zb3J0T3JkZXIuc3BsaWNlKDEpOyAvL3JlbW92ZXMgYWRkaXRpb25hbCBjb2x1bW5zXHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZElzSW5Tb3J0T3JkZXJQb3NpdGlvbihmaWVsZCwgMCkpIHtcclxuICAgICAgICAvLyBjaGFuZ2Ugc29ydCBkaXJlY3Rpb25cclxuICAgICAgICB0aGlzLnNvcnRPcmRlclswXS5kaXJlY3Rpb24gPSB0aGlzLnNvcnRPcmRlclswXS5kaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYydcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyByZXNldCBzb3J0IGRpcmVjdGlvblxyXG4gICAgICAgIHRoaXMuc29ydE9yZGVyWzBdLmRpcmVjdGlvbiA9ICdhc2MnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zb3J0T3JkZXJbMF0uZmllbGQgPSBmaWVsZC5uYW1lXHJcbiAgICAgIHRoaXMuc29ydE9yZGVyWzBdLnNvcnRGaWVsZCA9IGZpZWxkLnNvcnRGaWVsZFxyXG4gICAgfSxcclxuICAgIGNsZWFyU29ydE9yZGVyICgpIHtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICcnLFxyXG4gICAgICAgIHNvcnRGaWVsZDogJycsXHJcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJ1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBzb3J0Q2xhc3MgKGZpZWxkKSB7XHJcbiAgICAgIGxldCBjbHMgPSAnJ1xyXG4gICAgICBsZXQgaSA9IHRoaXMuY3VycmVudFNvcnRPcmRlclBvc2l0aW9uKGZpZWxkKVxyXG5cclxuICAgICAgaWYgKGkgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgY2xzID0gKHRoaXMuc29ydE9yZGVyW2ldLmRpcmVjdGlvbiA9PSAnYXNjJykgPyB0aGlzLmNzcy5hc2NlbmRpbmdDbGFzcyA6IHRoaXMuY3NzLmRlc2NlbmRpbmdDbGFzc1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY2xzXHJcbiAgICB9LFxyXG4gICAgc29ydEljb24gKGZpZWxkKSB7XHJcbiAgICAgIGxldCBjbHMgPSB0aGlzLmNzcy5zb3J0YWJsZUljb25cclxuICAgICAgbGV0IGkgPSB0aGlzLmN1cnJlbnRTb3J0T3JkZXJQb3NpdGlvbihmaWVsZClcclxuXHJcbiAgICAgIGlmIChpICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNscyA9ICh0aGlzLnNvcnRPcmRlcltpXS5kaXJlY3Rpb24gPT0gJ2FzYycpID8gdGhpcy5jc3MuYXNjZW5kaW5nSWNvbiA6IHRoaXMuY3NzLmRlc2NlbmRpbmdJY29uXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjbHM7XHJcbiAgICB9LFxyXG4gICAgc29ydEljb25PcGFjaXR5IChmaWVsZCkge1xyXG4gICAgICAvKlxyXG4gICAgICAgKiBmaWVsZHMgd2l0aCBzdHJvbmdlciBwcmVjZWRlbmNlIGhhdmUgZGFya2VyIGNvbG9yXHJcbiAgICAgICAqXHJcbiAgICAgICAqIGlmIHRoZXJlIGFyZSBmZXcgZmllbGRzLCB3ZSBnbyBkb3duIGJ5IDAuM1xyXG4gICAgICAgKiBleC4gMiBmaWVsZHMgYXJlIHNlbGVjdGVkOiAxLjAsIDAuN1xyXG4gICAgICAgKlxyXG4gICAgICAgKiBpZiB0aGVyZSBhcmUgbW9yZSB3ZSBnbyBkb3duIGV2ZW5seSBvbiB0aGUgZ2l2ZW4gc3BlY3RydW1cclxuICAgICAgICogZXguIDYgZmllbGRzIGFyZSBzZWxlY3RlZDogMS4wLCAwLjg2LCAwLjcyLCAwLjU4LCAwLjQ0LCAwLjNcclxuICAgICAgICovXHJcbiAgICAgIGxldCBtYXggPSAxLjAsXHJcbiAgICAgICAgICBtaW4gPSAwLjMsXHJcbiAgICAgICAgICBzdGVwID0gMC4zXHJcblxyXG4gICAgICBsZXQgY291bnQgPSB0aGlzLnNvcnRPcmRlci5sZW5ndGg7XHJcbiAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5jdXJyZW50U29ydE9yZGVyUG9zaXRpb24oZmllbGQpXHJcblxyXG5cclxuICAgICAgaWYobWF4IC0gY291bnQgKiBzdGVwIDwgbWluKSB7XHJcbiAgICAgICAgc3RlcCA9IChtYXggLSBtaW4pIC8gKGNvdW50LTEpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcGFjaXR5ID0gbWF4IC0gY3VycmVudCAqIHN0ZXBcclxuXHJcbiAgICAgIHJldHVybiBvcGFjaXR5XHJcbiAgICB9LFxyXG4gICAgaGFzQ2FsbGJhY2sgKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW0uY2FsbGJhY2sgPyB0cnVlIDogZmFsc2VcclxuICAgIH0sXHJcbiAgICBjYWxsQ2FsbGJhY2sgKGZpZWxkLCBpdGVtKSB7XHJcbiAgICAgIGlmICggISB0aGlzLmhhc0NhbGxiYWNrKGZpZWxkKSkgcmV0dXJuXHJcblxyXG4gICAgICBpZih0eXBlb2YoZmllbGQuY2FsbGJhY2spID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgIHJldHVybiBmaWVsZC5jYWxsYmFjayh0aGlzLmdldE9iamVjdFZhbHVlKGl0ZW0sIGZpZWxkLm5hbWUpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYXJncyA9IGZpZWxkLmNhbGxiYWNrLnNwbGl0KCd8JylcclxuICAgICAgbGV0IGZ1bmMgPSBhcmdzLnNoaWZ0KClcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy4kcGFyZW50W2Z1bmNdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRPYmplY3RWYWx1ZShpdGVtLCBmaWVsZC5uYW1lKVxyXG5cclxuICAgICAgICByZXR1cm4gKGFyZ3MubGVuZ3RoID4gMClcclxuICAgICAgICAgID8gdGhpcy4kcGFyZW50W2Z1bmNdLmFwcGx5KHRoaXMuJHBhcmVudCwgW3ZhbHVlXS5jb25jYXQoYXJncykpXHJcbiAgICAgICAgICA6IHRoaXMuJHBhcmVudFtmdW5jXS5jYWxsKHRoaXMuJHBhcmVudCwgdmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9LFxyXG4gICAgZ2V0T2JqZWN0VmFsdWUgKG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICh0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAndW5kZWZpbmVkJykgPyBudWxsIDogZGVmYXVsdFZhbHVlXHJcblxyXG4gICAgICBsZXQgb2JqID0gb2JqZWN0XHJcbiAgICAgIGlmIChwYXRoLnRyaW0oKSAhPSAnJykge1xyXG4gICAgICAgIGxldCBrZXlzID0gcGF0aC5zcGxpdCgnLicpXHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnICYmIG9ialtrZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9ialtrZXldXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmogPSBkZWZhdWx0VmFsdWVcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqXHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlQ2hlY2tib3ggKGRhdGFJdGVtLCBmaWVsZE5hbWUsIGV2ZW50KSB7XHJcbiAgICAgIGxldCBpc0NoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZFxyXG4gICAgICBsZXQgaWRDb2x1bW4gPSB0aGlzLnRyYWNrQnlcclxuXHJcbiAgICAgIGlmIChkYXRhSXRlbVtpZENvbHVtbl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMud2FybignX19jaGVja2JveCBmaWVsZDogVGhlIFwiJyt0aGlzLnRyYWNrQnkrJ1wiIGZpZWxkIGRvZXMgbm90IGV4aXN0ISBNYWtlIHN1cmUgdGhlIGZpZWxkIHlvdSBzcGVjaWZ5IGluIFwidHJhY2stYnlcIiBwcm9wIGRvZXMgZXhpc3QuJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGtleSA9IGRhdGFJdGVtW2lkQ29sdW1uXVxyXG4gICAgICBpZiAoaXNDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZChrZXkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51bnNlbGVjdElkKGtleSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiRlbWl0KCd2dWV0YWJsZTpjaGVja2JveC10b2dnbGVkJywgaXNDaGVja2VkLCBkYXRhSXRlbSlcclxuICAgIH0sXHJcbiAgICBzZWxlY3RJZCAoa2V5KSB7XHJcbiAgICAgIGlmICggISB0aGlzLmlzU2VsZWN0ZWRSb3coa2V5KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUby5wdXNoKGtleSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVuc2VsZWN0SWQgKGtleSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG8gPSB0aGlzLnNlbGVjdGVkVG8uZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbSAhPT0ga2V5XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgaXNTZWxlY3RlZFJvdyAoa2V5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVG8uaW5kZXhPZihrZXkpID49IDBcclxuICAgIH0sXHJcbiAgICByb3dTZWxlY3RlZCAoZGF0YUl0ZW0sIGZpZWxkTmFtZSl7XHJcbiAgICAgIGxldCBpZENvbHVtbiA9IHRoaXMudHJhY2tCeVxyXG4gICAgICBsZXQga2V5ID0gZGF0YUl0ZW1baWRDb2x1bW5dXHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkUm93KGtleSlcclxuICAgIH0sXHJcbiAgICBjaGVja0NoZWNrYm94ZXNTdGF0ZSAoZmllbGROYW1lKSB7XHJcbiAgICAgIGlmICghIHRoaXMudGFibGVEYXRhKSByZXR1cm5cclxuXHJcbiAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICBsZXQgaWRDb2x1bW4gPSB0aGlzLnRyYWNrQnlcclxuICAgICAgbGV0IHNlbGVjdG9yID0gJ3RoLnZ1ZXRhYmxlLXRoLWNoZWNrYm94LScgKyBpZENvbHVtbiArICcgaW5wdXRbdHlwZT1jaGVja2JveF0nXHJcbiAgICAgIGxldCBlbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxyXG5cclxuICAgICAgLy9maXhlZDpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsIHJldHVybiB0aGUgdHlwZW9mIG5vZGVMaXN0IG5vdCBhcnJheVxyXG4gICAgICBpZiAoZWxzLmZvckVhY2g9PT11bmRlZmluZWQpXHJcbiAgICAgICAgZWxzLmZvckVhY2g9ZnVuY3Rpb24oY2Ipe1xyXG4gICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGVscywgY2IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIGNvdW50IGhvdyBtYW55IGNoZWNrYm94IHJvdyBpbiB0aGUgY3VycmVudCBwYWdlIGhhcyBiZWVuIGNoZWNrZWRcclxuICAgICAgbGV0IHNlbGVjdGVkID0gdGhpcy50YWJsZURhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZFRvLmluZGV4T2YoaXRlbVtpZENvbHVtbl0pID49IDBcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIGNvdW50ID09IDAsIGNsZWFyIHRoZSBjaGVja2JveFxyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICAvLyBjb3VudCA+IDAgYW5kIGNvdW50IDwgcGVyUGFnZSwgc2V0IGNoZWNrYm94IHN0YXRlIHRvICdpbmRldGVybWluYXRlJ1xyXG4gICAgICBlbHNlIGlmIChzZWxlY3RlZC5sZW5ndGggPCB0aGlzLnBlclBhZ2UpIHtcclxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgLy8gY291bnQgPT0gcGVyUGFnZSwgc2V0IGNoZWNrYm94IHN0YXRlIHRvICdjaGVja2VkJ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlQWxsQ2hlY2tib3hlcyAoZmllbGROYW1lLCBldmVudCkge1xyXG4gICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgbGV0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkXHJcbiAgICAgIGxldCBpZENvbHVtbiA9IHRoaXMudHJhY2tCeVxyXG5cclxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goZnVuY3Rpb24oZGF0YUl0ZW0pIHtcclxuICAgICAgICAgIHNlbGYuc2VsZWN0SWQoZGF0YUl0ZW1baWRDb2x1bW5dKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChmdW5jdGlvbihkYXRhSXRlbSkge1xyXG4gICAgICAgICAgc2VsZi51bnNlbGVjdElkKGRhdGFJdGVtW2lkQ29sdW1uXSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuJGVtaXQoJ3Z1ZXRhYmxlOmNoZWNrYm94LXRvZ2dsZWQtYWxsJywgaXNDaGVja2VkKVxyXG4gICAgfSxcclxuICAgIGdvdG9QcmV2aW91c1BhZ2UgKCkge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLS1cclxuICAgICAgICB0aGlzLmxvYWREYXRhKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdvdG9OZXh0UGFnZSAoKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDwgdGhpcy50YWJsZVBhZ2luYXRpb24ubGFzdF9wYWdlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSsrXHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBnb3RvUGFnZSAocGFnZSkge1xyXG4gICAgICBpZiAocGFnZSAhPSB0aGlzLmN1cnJlbnRQYWdlICYmIChwYWdlID4gMCAmJiBwYWdlIDw9IHRoaXMudGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZSkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxyXG4gICAgICAgIHRoaXMubG9hZERhdGEoKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaXNWaXNpYmxlRGV0YWlsUm93IChyb3dJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlRGV0YWlsUm93cy5pbmRleE9mKCByb3dJZCApID49IDBcclxuICAgIH0sXHJcbiAgICBzaG93RGV0YWlsUm93IChyb3dJZCkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlRGV0YWlsUm93KHJvd0lkKSkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZURldGFpbFJvd3MucHVzaChyb3dJZClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGhpZGVEZXRhaWxSb3cgKHJvd0lkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVmlzaWJsZURldGFpbFJvdyhyb3dJZCkpIHtcclxuICAgICAgICB0aGlzLnZpc2libGVEZXRhaWxSb3dzLnNwbGljZShcclxuICAgICAgICAgIHRoaXMudmlzaWJsZURldGFpbFJvd3MuaW5kZXhPZihyb3dJZCksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlRGV0YWlsUm93IChyb3dJZCkge1xyXG4gICAgICBpZiAodGhpcy5pc1Zpc2libGVEZXRhaWxSb3cocm93SWQpKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlRGV0YWlsUm93KHJvd0lkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbFJvdyhyb3dJZClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNob3dGaWVsZCAoaW5kZXgpIHtcclxuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMudGFibGVGaWVsZHMubGVuZ3RoKSByZXR1cm5cclxuXHJcbiAgICAgIHRoaXMudGFibGVGaWVsZHNbaW5kZXhdLnZpc2libGUgPSB0cnVlXHJcbiAgICB9LFxyXG4gICAgaGlkZUZpZWxkIChpbmRleCkge1xyXG4gICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGhpcy50YWJsZUZpZWxkcy5sZW5ndGgpIHJldHVyblxyXG5cclxuICAgICAgdGhpcy50YWJsZUZpZWxkc1tpbmRleF0udmlzaWJsZSA9IGZhbHNlXHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlRmllbGQgKGluZGV4KSB7XHJcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aGlzLnRhYmxlRmllbGRzLmxlbmd0aCkgcmV0dXJuXHJcblxyXG4gICAgICB0aGlzLnRhYmxlRmllbGRzW2luZGV4XS52aXNpYmxlID0gISB0aGlzLnRhYmxlRmllbGRzW2luZGV4XS52aXNpYmxlXHJcbiAgICB9LFxyXG4gICAgcmVuZGVySWNvblRhZyAoY2xhc3Nlcywgb3B0aW9ucyA9ICcnKSB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YodGhpcy5jc3MucmVuZGVySWNvbikgPT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgPyBgPGkgY2xhc3M9XCIke2NsYXNzZXMuam9pbignICcpfVwiICR7b3B0aW9uc30+PC9pPmBcclxuICAgICAgICA6IHRoaXMuY3NzLnJlbmRlckljb24oY2xhc3Nlcywgb3B0aW9ucylcclxuICAgIH0sXHJcbiAgICBtYWtlUGFnaW5hdGlvbiAodG90YWwgPSBudWxsLCBwZXJQYWdlID0gbnVsbCwgY3VycmVudFBhZ2UgPSBudWxsKSB7XHJcbiAgICAgIGxldCBwYWdpbmF0aW9uID0ge31cclxuICAgICAgdG90YWwgPSB0b3RhbCA9PT0gbnVsbCA/IHRoaXMuZGF0YVRvdGFsIDogdG90YWxcclxuICAgICAgcGVyUGFnZSA9IHBlclBhZ2UgPT09IG51bGwgPyB0aGlzLnBlclBhZ2UgOiBwZXJQYWdlXHJcbiAgICAgIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgPT09IG51bGwgPyB0aGlzLmN1cnJlbnRQYWdlIDogY3VycmVudFBhZ2VcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgJ3RvdGFsJzogdG90YWwsXHJcbiAgICAgICAgJ3Blcl9wYWdlJzogcGVyUGFnZSxcclxuICAgICAgICAnY3VycmVudF9wYWdlJzogY3VycmVudFBhZ2UsXHJcbiAgICAgICAgJ2xhc3RfcGFnZSc6IE1hdGguY2VpbCh0b3RhbCAvIHBlclBhZ2UpIHx8IDAsXHJcbiAgICAgICAgJ25leHRfcGFnZV91cmwnOiAnJyxcclxuICAgICAgICAncHJldl9wYWdlX3VybCc6ICcnLFxyXG4gICAgICAgICdmcm9tJzogKGN1cnJlbnRQYWdlIC0xKSAqIHBlclBhZ2UgKzEsXHJcbiAgICAgICAgJ3RvJzogTWF0aC5taW4oY3VycmVudFBhZ2UgKiBwZXJQYWdlLCB0b3RhbClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG5vcm1hbGl6ZVNvcnRPcmRlciAoKSB7XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgIGl0ZW0uc29ydEZpZWxkID0gaXRlbS5zb3J0RmllbGQgfHwgaXRlbS5maWVsZFxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIGNhbGxEYXRhTWFuYWdlciAoKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFNYW5hZ2VyID09PSBudWxsICYmIHRoaXMuZGF0YSA9PT0gbnVsbCkgcmV0dXJuXHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpXHJcbiAgICAgIH0gXHJcbiAgICAgIFxyXG4gICAgICB0aGlzLm5vcm1hbGl6ZVNvcnRPcmRlcigpXHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXREYXRhKFxyXG4gICAgICAgIHRoaXMuZGF0YU1hbmFnZXJcclxuICAgICAgICAgID8gdGhpcy5kYXRhTWFuYWdlcih0aGlzLnNvcnRPcmRlciwgdGhpcy5tYWtlUGFnaW5hdGlvbigpKVxyXG4gICAgICAgICAgOiB0aGlzLmRhdGFcclxuICAgICAgKVxyXG4gICAgfSxcclxuICAgIG9uUm93Q2xhc3MgKGRhdGFJdGVtLCBpbmRleCkge1xyXG4gICAgICBpZiAodGhpcy5yb3dDbGFzc0NhbGxiYWNrICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMud2FybignXCJyb3ctY2xhc3MtY2FsbGJhY2tcIiBwcm9wIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgXCJyb3ctY2xhc3NcIiBwcm9wIGluc3RlYWQuJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZih0aGlzLnJvd0NsYXNzKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzKGRhdGFJdGVtLCBpbmRleClcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NcclxuICAgIH0sXHJcbiAgICBvblJvd0NoYW5nZWQgKGRhdGFJdGVtKSB7XHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdyb3ctY2hhbmdlZCcsIGRhdGFJdGVtKVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSxcclxuICAgIG9uUm93Q2xpY2tlZCAoZGF0YUl0ZW0sIGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdyb3ctY2xpY2tlZCcsIGRhdGFJdGVtLCBldmVudClcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0sXHJcbiAgICBvblJvd0RvdWJsZUNsaWNrZWQgKGRhdGFJdGVtLCBldmVudCkge1xyXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyAncm93LWRibGNsaWNrZWQnLCBkYXRhSXRlbSwgZXZlbnQpXHJcbiAgICB9LFxyXG4gICAgb25EZXRhaWxSb3dDbGljayAoZGF0YUl0ZW0sIGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdkZXRhaWwtcm93LWNsaWNrZWQnLCBkYXRhSXRlbSwgZXZlbnQpXHJcbiAgICB9LFxyXG4gICAgb25DZWxsQ2xpY2tlZCAoZGF0YUl0ZW0sIGZpZWxkLCBldmVudCkge1xyXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyAnY2VsbC1jbGlja2VkJywgZGF0YUl0ZW0sIGZpZWxkLCBldmVudClcclxuICAgIH0sXHJcbiAgICBvbkNlbGxEb3VibGVDbGlja2VkIChkYXRhSXRlbSwgZmllbGQsIGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuJGVtaXQodGhpcy5ldmVudFByZWZpeCArICdjZWxsLWRibGNsaWNrZWQnLCBkYXRhSXRlbSwgZmllbGQsIGV2ZW50KVxyXG4gICAgfSxcclxuICAgIG9uQ2VsbFJpZ2h0Q2xpY2tlZCAoZGF0YUl0ZW0sIGZpZWxkLCBldmVudCkge1xyXG4gICAgICB0aGlzLiRlbWl0KHRoaXMuZXZlbnRQcmVmaXggKyAnY2VsbC1yaWdodGNsaWNrZWQnLCBkYXRhSXRlbSwgZmllbGQsIGV2ZW50KVxyXG4gICAgfSxcclxuICAgIC8qXHJcbiAgICAgKiBBUEkgZm9yIGV4dGVybmFsc1xyXG4gICAgICovXHJcbiAgICBjaGFuZ2VQYWdlIChwYWdlKSB7XHJcbiAgICAgIGlmIChwYWdlID09PSAncHJldicpIHtcclxuICAgICAgICB0aGlzLmdvdG9QcmV2aW91c1BhZ2UoKVxyXG4gICAgICB9IGVsc2UgaWYgKHBhZ2UgPT09ICduZXh0Jykge1xyXG4gICAgICAgIHRoaXMuZ290b05leHRQYWdlKClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdvdG9QYWdlKHBhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZWxvYWQgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YSgpXHJcbiAgICB9LFxyXG4gICAgcmVmcmVzaCAoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxXHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhKClcclxuICAgIH0sXHJcbiAgICByZXNldERhdGEgKCkge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IG51bGxcclxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSBudWxsXHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KCdkYXRhLXJlc2V0JylcclxuICAgIH1cclxuICB9LCAvLyBlbmQ6IG1ldGhvZHNcclxuICB3YXRjaDoge1xyXG4gICAgJ211bHRpU29ydCcgKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgIGlmIChuZXdWYWwgPT09IGZhbHNlICYmIHRoaXMuc29ydE9yZGVyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnNvcnRPcmRlci5zcGxpY2UoMSk7XHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgJ2FwaVVybCcgIChuZXdWYWwsIG9sZFZhbCkge1xyXG4gICAgICBpZih0aGlzLnJlYWN0aXZlQXBpVXJsICYmIG5ld1ZhbCAhPT0gb2xkVmFsKVxyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgICB9LFxyXG4gICAgJ2RhdGEnIChuZXdWYWwsIG9sZFZhbCkge1xyXG4gICAgICB0aGlzLnNldERhdGEobmV3VmFsKVxyXG4gICAgfSxcclxuICAgICd0YWJsZUhlaWdodCcgKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgIHRoaXMuZml4SGVhZGVyKClcclxuICAgIH1cclxuICB9LFxyXG59XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIHNjb3BlZD5cclxuICBbdi1jbG9ha10ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICB9XHJcbiAgLnZ1ZXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMjE4NWQwO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIH1cclxuICAudnVldGFibGUtYm9keS13cmFwcGVyIHtcclxuICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xyXG4gICAgb3ZlcmZsb3cteTphdXRvO1xyXG4gIH1cclxuICAudnVldGFibGUtaGVhZC13cmFwcGVyIHtcclxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICB9XHJcbiAgLnZ1ZXRhYmxlLWFjdGlvbnMge1xyXG4gICAgd2lkdGg6IDE1JTtcclxuICAgIHBhZGRpbmc6IDEycHggMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICAudnVldGFibGUtcGFnaW5hdGlvbiB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZjlmYWZiICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIC52dWV0YWJsZS1wYWdpbmF0aW9uLWluZm8ge1xyXG4gICAgbWFyZ2luLXRvcDogYXV0bztcclxuICAgIG1hcmdpbi1ib3R0b206IGF1dG87XHJcbiAgfVxyXG4gIC52dWV0YWJsZS1lbXB0eS1yZXN1bHQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICAudnVldGFibGUtY2xpcC10ZXh0IHtcclxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gIH1cclxuICAudnVldGFibGUtc2VtYW50aWMtbm8tdG9wIHtcclxuICAgIGJvcmRlci10b3A6bm9uZSAhaW1wb3J0YW50O1xyXG4gICAgbWFyZ2luLXRvcDowICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIC52dWV0YWJsZS1maXhlZC1sYXlvdXQge1xyXG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcclxuICB9XHJcbiAgLnZ1ZXRhYmxlLWd1dHRlci1jb2wge1xyXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xyXG4gICAgYm9yZGVyLWxlZnQ6IG5vbmUgICFpbXBvcnRhbnQ7XHJcbiAgICBib3JkZXItcmlnaHQ6IG5vbmUgICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG48L3N0eWxlPlxyXG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNFswXS5ydWxlc1swXSEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNFswXS5ydWxlc1swXSEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIChvcHRpb25zLmZ1bmN0aW9uYWwgPyB0aGlzLnBhcmVudCA6IHRoaXMpLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3RcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1OTY1ZTNiJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Z1ZXRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vVnVldGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL1Z1ZXRhYmxlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTE1OTY1ZTNiJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjE1OTY1ZTNiXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2RqYW1pbC9Qcm9qZWN0cy90cmlsYnkvX2dyYXYvZ3Jhdi1wbHVnaW4tZmxleC1vYmplY3RzL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzE1OTY1ZTNiJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzE1OTY1ZTNiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzE1OTY1ZTNiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9WdWV0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTU5NjVlM2Imc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMTU5NjVlM2InLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcIm5vZGVfbW9kdWxlcy92dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0udGFibGVQYWdpbmF0aW9uICYmIF92bS50YWJsZVBhZ2luYXRpb24ubGFzdF9wYWdlID4gMSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInRhYmxlUGFnaW5hdGlvbiAmJiB0YWJsZVBhZ2luYXRpb24ubGFzdF9wYWdlID4gMVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLmNzcy53cmFwcGVyQ2xhc3NcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImFcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICBcImJ0bi1uYXZcIixcbiAgICAgICAgICAgIF92bS5jc3MubGlua0NsYXNzLFxuICAgICAgICAgICAgX3ZtLmlzT25GaXJzdFBhZ2UgPyBfdm0uY3NzLmRpc2FibGVkQ2xhc3MgOiBcIlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmxvYWRQYWdlKDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLmNzcy5pY29ucy5maXJzdCAhPSBcIlwiXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7IGNsYXNzOiBbX3ZtLmNzcy5pY29ucy5maXJzdF0gfSlcbiAgICAgICAgICAgIDogX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLCq1wiKV0pXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiYnRuLW5hdlwiLFxuICAgICAgICAgICAgX3ZtLmNzcy5saW5rQ2xhc3MsXG4gICAgICAgICAgICBfdm0uaXNPbkZpcnN0UGFnZSA/IF92bS5jc3MuZGlzYWJsZWRDbGFzcyA6IFwiXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0ubG9hZFBhZ2UoXCJwcmV2XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLmNzcy5pY29ucy5uZXh0ICE9IFwiXCJcbiAgICAgICAgICAgID8gX2MoXCJpXCIsIHsgY2xhc3M6IFtfdm0uY3NzLmljb25zLnByZXZdIH0pXG4gICAgICAgICAgICA6IF9jKFwic3BhblwiLCBbX3ZtLl92KFwiwqDigLlcIildKVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5ub3RFbm91Z2hQYWdlc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIF92bS5fbChfdm0udG90YWxQYWdlLCBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgX2MoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5jc3MucGFnZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICBfdm0uaXNDdXJyZW50UGFnZShuKSA/IF92bS5jc3MuYWN0aXZlQ2xhc3MgOiBcIlwiXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MobikgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmxvYWRQYWdlKG4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICBfdm0uX2woX3ZtLndpbmRvd1NpemUsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfYyhcImFcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmNzcy5wYWdlQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIF92bS5pc0N1cnJlbnRQYWdlKF92bS53aW5kb3dTdGFydCArIG4gLSAxKVxuICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLmNzcy5hY3RpdmVDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS53aW5kb3dTdGFydCArIG4gLSAxKSB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ubG9hZFBhZ2UoX3ZtLndpbmRvd1N0YXJ0ICsgbiAtIDEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiYnRuLW5hdlwiLFxuICAgICAgICAgICAgX3ZtLmNzcy5saW5rQ2xhc3MsXG4gICAgICAgICAgICBfdm0uaXNPbkxhc3RQYWdlID8gX3ZtLmNzcy5kaXNhYmxlZENsYXNzIDogXCJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5sb2FkUGFnZShcIm5leHRcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uY3NzLmljb25zLm5leHQgIT0gXCJcIlxuICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBjbGFzczogW192bS5jc3MuaWNvbnMubmV4dF0gfSlcbiAgICAgICAgICAgIDogX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLigLrCoFwiKV0pXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiYVwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiYnRuLW5hdlwiLFxuICAgICAgICAgICAgX3ZtLmNzcy5saW5rQ2xhc3MsXG4gICAgICAgICAgICBfdm0uaXNPbkxhc3RQYWdlID8gX3ZtLmNzcy5kaXNhYmxlZENsYXNzIDogXCJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5sb2FkUGFnZShfdm0udG90YWxQYWdlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5jc3MuaWNvbnMubGFzdCAhPSBcIlwiXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7IGNsYXNzOiBbX3ZtLmNzcy5pY29ucy5sYXN0XSB9KVxuICAgICAgICAgICAgOiBfYyhcInNwYW5cIiwgW192bS5fdihcIsK7XCIpXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHByb3BzOiB7XHJcbiAgICBjc3M6IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICBkZWZhdWx0ICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgd3JhcHBlckNsYXNzOiAndWkgcmlnaHQgZmxvYXRlZCBwYWdpbmF0aW9uIG1lbnUnLFxyXG4gICAgICAgICAgYWN0aXZlQ2xhc3M6ICdhY3RpdmUgbGFyZ2UnLFxyXG4gICAgICAgICAgZGlzYWJsZWRDbGFzczogJ2Rpc2FibGVkJyxcclxuICAgICAgICAgIHBhZ2VDbGFzczogJ2l0ZW0nLFxyXG4gICAgICAgICAgbGlua0NsYXNzOiAnaWNvbiBpdGVtJyxcclxuICAgICAgICAgIHBhZ2luYXRpb25DbGFzczogJ3VpIGJvdHRvbSBhdHRhY2hlZCBzZWdtZW50IGdyaWQnLFxyXG4gICAgICAgICAgcGFnaW5hdGlvbkluZm9DbGFzczogJ2xlZnQgZmxvYXRlZCBsZWZ0IGFsaWduZWQgc2l4IHdpZGUgY29sdW1uJyxcclxuICAgICAgICAgIGRyb3Bkb3duQ2xhc3M6ICd1aSBzZWFyY2ggZHJvcGRvd24nLFxyXG4gICAgICAgICAgaWNvbnM6IHtcclxuICAgICAgICAgICAgZmlyc3Q6ICdhbmdsZSBkb3VibGUgbGVmdCBpY29uJyxcclxuICAgICAgICAgICAgcHJldjogJ2xlZnQgY2hldnJvbiBpY29uJyxcclxuICAgICAgICAgICAgbmV4dDogJ3JpZ2h0IGNoZXZyb24gaWNvbicsXHJcbiAgICAgICAgICAgIGxhc3Q6ICdhbmdsZSBkb3VibGUgcmlnaHQgaWNvbicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgb25FYWNoU2lkZToge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQgKCkge1xyXG4gICAgICAgIHJldHVybiAyXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSxcclxuICBkYXRhOiBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV2ZW50UHJlZml4OiAndnVldGFibGUtcGFnaW5hdGlvbjonLFxyXG4gICAgICB0YWJsZVBhZ2luYXRpb246IG51bGxcclxuICAgIH1cclxuICB9LFxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICB0b3RhbFBhZ2UgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZVBhZ2luYXRpb24gPT09IG51bGxcclxuICAgICAgICA/IDBcclxuICAgICAgICA6IHRoaXMudGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZVxyXG4gICAgfSxcclxuICAgIGlzT25GaXJzdFBhZ2UgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZVBhZ2luYXRpb24gPT09IG51bGxcclxuICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgOiB0aGlzLnRhYmxlUGFnaW5hdGlvbi5jdXJyZW50X3BhZ2UgPT09IDFcclxuICAgIH0sXHJcbiAgICBpc09uTGFzdFBhZ2UgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZVBhZ2luYXRpb24gPT09IG51bGxcclxuICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgOiB0aGlzLnRhYmxlUGFnaW5hdGlvbi5jdXJyZW50X3BhZ2UgPT09IHRoaXMudGFibGVQYWdpbmF0aW9uLmxhc3RfcGFnZVxyXG4gICAgfSxcclxuICAgIG5vdEVub3VnaFBhZ2VzICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG90YWxQYWdlIDwgKHRoaXMub25FYWNoU2lkZSAqIDIpICsgNFxyXG4gICAgfSxcclxuICAgIHdpbmRvd1NpemUgKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vbkVhY2hTaWRlICogMiArMTtcclxuICAgIH0sXHJcbiAgICB3aW5kb3dTdGFydCAoKSB7XHJcbiAgICAgIGlmICghdGhpcy50YWJsZVBhZ2luYXRpb24gfHwgdGhpcy50YWJsZVBhZ2luYXRpb24uY3VycmVudF9wYWdlIDw9IHRoaXMub25FYWNoU2lkZSkge1xyXG4gICAgICAgIHJldHVybiAxXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZVBhZ2luYXRpb24uY3VycmVudF9wYWdlID49ICh0aGlzLnRvdGFsUGFnZSAtIHRoaXMub25FYWNoU2lkZSkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3RhbFBhZ2UgLSB0aGlzLm9uRWFjaFNpZGUqMlxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZVBhZ2luYXRpb24uY3VycmVudF9wYWdlIC0gdGhpcy5vbkVhY2hTaWRlXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgbG9hZFBhZ2UgKHBhZ2UpIHtcclxuICAgICAgdGhpcy4kZW1pdCh0aGlzLmV2ZW50UHJlZml4KydjaGFuZ2UtcGFnZScsIHBhZ2UpXHJcbiAgICB9LFxyXG4gICAgaXNDdXJyZW50UGFnZSAocGFnZSkge1xyXG4gICAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy50YWJsZVBhZ2luYXRpb24uY3VycmVudF9wYWdlXHJcbiAgICB9LFxyXG4gICAgc2V0UGFnaW5hdGlvbkRhdGEgKHRhYmxlUGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLnRhYmxlUGFnaW5hdGlvbiA9IHRhYmxlUGFnaW5hdGlvblxyXG4gICAgfSxcclxuICAgIHJlc2V0RGF0YSAoKSB7XHJcbiAgICAgIHRoaXMudGFibGVQYWdpbmF0aW9uID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG48L3NjcmlwdD5cclxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsInZhciByZW5kZXIsIHN0YXRpY1JlbmRlckZuc1xuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9WdWV0YWJsZVBhZ2luYXRpb25NaXhpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbk1peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvZGphbWlsL1Byb2plY3RzL3RyaWxieS9fZ3Jhdi9ncmF2LXBsdWdpbi1mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWM0YzI0MDgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWM0YzI0MDgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWM0YzI0MDgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwibm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uTWl4aW4udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiPHRlbXBsYXRlPlxyXG4gIDxkaXYgdi1zaG93PVwidGFibGVQYWdpbmF0aW9uICYmIHRhYmxlUGFnaW5hdGlvbi5sYXN0X3BhZ2UgPiAxXCIgOmNsYXNzPVwiY3NzLndyYXBwZXJDbGFzc1wiPlxyXG4gICAgPGEgQGNsaWNrPVwibG9hZFBhZ2UoMSlcIlxyXG4gICAgICA6Y2xhc3M9XCJbJ2J0bi1uYXYnLCBjc3MubGlua0NsYXNzLCBpc09uRmlyc3RQYWdlID8gY3NzLmRpc2FibGVkQ2xhc3MgOiAnJ11cIj5cclxuICAgICAgICA8aSB2LWlmPVwiY3NzLmljb25zLmZpcnN0ICE9ICcnXCIgOmNsYXNzPVwiW2Nzcy5pY29ucy5maXJzdF1cIj48L2k+XHJcbiAgICAgICAgPHNwYW4gdi1lbHNlPiZsYXF1bzs8L3NwYW4+XHJcbiAgICA8L2E+XHJcbiAgICA8YSBAY2xpY2s9XCJsb2FkUGFnZSgncHJldicpXCJcclxuICAgICAgOmNsYXNzPVwiWydidG4tbmF2JywgY3NzLmxpbmtDbGFzcywgaXNPbkZpcnN0UGFnZSA/IGNzcy5kaXNhYmxlZENsYXNzIDogJyddXCI+XHJcbiAgICAgICAgPGkgdi1pZj1cImNzcy5pY29ucy5uZXh0ICE9ICcnXCIgOmNsYXNzPVwiW2Nzcy5pY29ucy5wcmV2XVwiPjwvaT5cclxuICAgICAgICA8c3BhbiB2LWVsc2U+Jm5ic3A7JmxzYXF1bzs8L3NwYW4+XHJcbiAgICA8L2E+XHJcbiAgICA8dGVtcGxhdGUgdi1pZj1cIm5vdEVub3VnaFBhZ2VzXCI+XHJcbiAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIm4gaW4gdG90YWxQYWdlXCI+XHJcbiAgICAgICAgPGEgQGNsaWNrPVwibG9hZFBhZ2UobilcIlxyXG4gICAgICAgICAgOmNsYXNzPVwiW2Nzcy5wYWdlQ2xhc3MsIGlzQ3VycmVudFBhZ2UobikgPyBjc3MuYWN0aXZlQ2xhc3MgOiAnJ11cIlxyXG4gICAgICAgICAgdi1odG1sPVwiblwiPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XCJuIGluIHdpbmRvd1NpemVcIj5cclxuICAgICAgICA8YSBAY2xpY2s9XCJsb2FkUGFnZSh3aW5kb3dTdGFydCtuLTEpXCJcclxuICAgICAgICAgIDpjbGFzcz1cIltjc3MucGFnZUNsYXNzLCBpc0N1cnJlbnRQYWdlKHdpbmRvd1N0YXJ0K24tMSkgPyBjc3MuYWN0aXZlQ2xhc3MgOiAnJ11cIlxyXG4gICAgICAgICAgdi1odG1sPVwid2luZG93U3RhcnQrbi0xXCI+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICAgIDxhIEBjbGljaz1cImxvYWRQYWdlKCduZXh0JylcIlxyXG4gICAgICA6Y2xhc3M9XCJbJ2J0bi1uYXYnLCBjc3MubGlua0NsYXNzLCBpc09uTGFzdFBhZ2UgPyBjc3MuZGlzYWJsZWRDbGFzcyA6ICcnXVwiPlxyXG4gICAgICA8aSB2LWlmPVwiY3NzLmljb25zLm5leHQgIT0gJydcIiA6Y2xhc3M9XCJbY3NzLmljb25zLm5leHRdXCI+PC9pPlxyXG4gICAgICA8c3BhbiB2LWVsc2U+JnJzYXF1bzsmbmJzcDs8L3NwYW4+XHJcbiAgICA8L2E+XHJcbiAgICA8YSBAY2xpY2s9XCJsb2FkUGFnZSh0b3RhbFBhZ2UpXCJcclxuICAgICAgOmNsYXNzPVwiWydidG4tbmF2JywgY3NzLmxpbmtDbGFzcywgaXNPbkxhc3RQYWdlID8gY3NzLmRpc2FibGVkQ2xhc3MgOiAnJ11cIj5cclxuICAgICAgPGkgdi1pZj1cImNzcy5pY29ucy5sYXN0ICE9ICcnXCIgOmNsYXNzPVwiW2Nzcy5pY29ucy5sYXN0XVwiPjwvaT5cclxuICAgICAgPHNwYW4gdi1lbHNlPiZyYXF1bzs8L3NwYW4+XHJcbiAgICA8L2E+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5pbXBvcnQgUGFnaW5hdGlvbk1peGluIGZyb20gJy4vVnVldGFibGVQYWdpbmF0aW9uTWl4aW4udnVlJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG1peGluczogW1BhZ2luYXRpb25NaXhpbl0sXHJcbn1cclxuPC9zY3JpcHQ+XHJcbiIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00WzBdLnJ1bGVzWzBdIS4uLy4uLy4uL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9WdWV0YWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNFswXS5ydWxlc1swXSEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZWZkZDU5NiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9WdWV0YWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9WdWV0YWJsZVBhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9kamFtaWwvUHJvamVjdHMvdHJpbGJ5L19ncmF2L2dyYXYtcGx1Z2luLWZsZXgtb2JqZWN0cy9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCczZWZkZDU5NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCczZWZkZDU5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCczZWZkZDU5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vVnVldGFibGVQYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZWZkZDU5NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczZWZkZDU5NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwibm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBbXCJ2dWV0YWJsZS1wYWdpbmF0aW9uLWluZm9cIiwgX3ZtLmNzcy5pbmZvQ2xhc3NdLFxuICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5wYWdpbmF0aW9uSW5mbykgfVxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgY3NzOiB7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaW5mb0NsYXNzOiAnbGVmdCBmbG9hdGVkIGxlZnQgYWxpZ25lZCBzaXggd2lkZSBjb2x1bW4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgaW5mb1RlbXBsYXRlOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgZGVmYXVsdCgpIHtcclxuICAgICAgICByZXR1cm4gXCJEaXNwbGF5aW5nIHtmcm9tfSB0byB7dG99IG9mIHt0b3RhbH0gaXRlbXNcIlxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbm9EYXRhVGVtcGxhdGU6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0KCkge1xyXG4gICAgICAgIHJldHVybiAnTm8gcmVsZXZhbnQgZGF0YSdcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGFibGVQYWdpbmF0aW9uOiBudWxsXHJcbiAgICB9XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgcGFnaW5hdGlvbkluZm8gKCkge1xyXG4gICAgICBpZiAodGhpcy50YWJsZVBhZ2luYXRpb24gPT0gbnVsbCB8fCB0aGlzLnRhYmxlUGFnaW5hdGlvbi50b3RhbCA9PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm9EYXRhVGVtcGxhdGVcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaW5mb1RlbXBsYXRlXHJcbiAgICAgICAgLnJlcGxhY2UoJ3tmcm9tfScsIHRoaXMudGFibGVQYWdpbmF0aW9uLmZyb20gfHwgMClcclxuICAgICAgICAucmVwbGFjZSgne3RvfScsIHRoaXMudGFibGVQYWdpbmF0aW9uLnRvIHx8IDApXHJcbiAgICAgICAgLnJlcGxhY2UoJ3t0b3RhbH0nLCB0aGlzLnRhYmxlUGFnaW5hdGlvbi50b3RhbCB8fCAwKVxyXG4gICAgfSxcclxuICB9LFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIHNldFBhZ2luYXRpb25EYXRhICh0YWJsZVBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy50YWJsZVBhZ2luYXRpb24gPSB0YWJsZVBhZ2luYXRpb25cclxuICAgIH0sXHJcbiAgICByZXNldERhdGEgKCkge1xyXG4gICAgICB0aGlzLnRhYmxlUGFnaW5hdGlvbiA9IG51bGxcclxuICAgIH1cclxuICB9LFxyXG59XHJcbjwvc2NyaXB0PlxyXG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNFswXS5ydWxlc1swXSEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm9NaXhpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJ2YXIgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnNcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvZGphbWlsL1Byb2plY3RzL3RyaWxieS9fZ3Jhdi9ncmF2LXBsdWdpbi1mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmYwNWEzNmUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmYwNWEzNmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmYwNWEzNmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwibm9kZV9tb2R1bGVzL3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IDpjbGFzcz1cIlsndnVldGFibGUtcGFnaW5hdGlvbi1pbmZvJywgY3NzLmluZm9DbGFzc11cIlxyXG4gICAgdi1odG1sPVwicGFnaW5hdGlvbkluZm9cIj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBQYWdpbmF0aW9uSW5mb01peGluIGZyb20gJy4vVnVldGFibGVQYWdpbmF0aW9uSW5mb01peGluLnZ1ZSdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBtaXhpbnM6IFtQYWdpbmF0aW9uSW5mb01peGluXSxcclxufVxyXG48L3NjcmlwdD5cclxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtNFswXS5ydWxlc1swXSEuLi8uLi8uLi92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVnVldGFibGVQYWdpbmF0aW9uSW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE3NzI0MDgzJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvZGphbWlsL1Byb2plY3RzL3RyaWxieS9fZ3Jhdi9ncmF2LXBsdWdpbi1mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMTc3MjQwODMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMTc3MjQwODMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMTc3MjQwODMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE3NzI0MDgzJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzE3NzI0MDgzJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJub2RlX21vZHVsZXMvdnVldGFibGUtMi9zcmMvY29tcG9uZW50cy9WdWV0YWJsZVBhZ2luYXRpb25JbmZvLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICB0YWJsZToge1xuICAgICAgICB0YWJsZUNsYXNzOiAndGFibGUnLFxuICAgICAgICBsb2FkaW5nQ2xhc3M6ICdsb2FkaW5nJyxcbiAgICAgICAgc29ydGFibGVJY29uOiAnJyxcbiAgICAgICAgYXNjZW5kaW5nSWNvbjogJ2ZhIGZhLWZ3IGZhLWNoZXZyb24tdXAnLFxuICAgICAgICBkZXNjZW5kaW5nSWNvbjogJ2ZhIGZhLWZ3IGZhLWNoZXZyb24tZG93bicsXG4gICAgICAgIGFzY2VuZGluZ0NsYXNzOiAnJyxcbiAgICAgICAgZGVzY2VuZGluZ0NsYXNzOiAnJyxcbiAgICAgICAgaGFuZGxlSWNvbjogJ2ZhIGZhLWZ3IGZhLWJhcnMnLFxuICAgICAgICByZW5kZXJJY29uOiAoY2xhc3Nlcywgb3B0aW9ucykgPT4gYDxpIGNsYXNzPVwiJHtjbGFzc2VzLmpvaW4oJyAnKX1cIj48L2k+YFxuICAgIH0sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgICB3cmFwcGVyQ2xhc3M6ICdmbGV4LW9iamVjdHMtcGFnaW5hdGlvbicsXG4gICAgICAgIGFjdGl2ZUNsYXNzOiAnYnV0dG9uIGFjdGl2ZScsXG4gICAgICAgIGRpc2FibGVkQ2xhc3M6ICdidXR0b24gZGlzYWJsZWQnLFxuICAgICAgICBwYWdlQ2xhc3M6ICdidXR0b24gcGFnZScsXG4gICAgICAgIGxpbmtDbGFzczogJ2J1dHRvbiBsaW5rJyxcbiAgICAgICAgaWNvbnM6IHtcbiAgICAgICAgICAgIGZpcnN0OiAnZmEgZmEtZncgZmEtYW5nbGUtZG91YmxlLWxlZnQnLFxuICAgICAgICAgICAgcHJldjogJ2ZhIGZhLWZ3IGZhLWNoZXZyb24tbGVmdCcsXG4gICAgICAgICAgICBuZXh0OiAnZmEgZmEtZncgZmEtY2hldnJvbi1yaWdodCcsXG4gICAgICAgICAgICBsYXN0OiAnZmEgZmEtZncgZmEtYW5nbGUtZG91YmxlLXJpZ2h0J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBwYWdpbmF0aW9uSW5mbzoge1xuICAgICAgICBpbmZvQ2xhc3M6ICcnXG4gICAgfVxufTtcbiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8dnVldGFibGUgcmVmPVwidnVldGFibGVcIlxuICAgICAgICAgICAgICAgICAgOmNzcz1cImNzcy50YWJsZVwiXG4gICAgICAgICAgICAgICAgICA6ZmllbGRzPVwic3RvcmUuZmllbGRzIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgIDpzZWFyY2hGaWVsZHM9XCJzdG9yZS5zZWFyY2hGaWVsZHMgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgOnNvcnRPcmRlcj1cInN0b3JlLnNvcnRPcmRlclwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGktc29ydD1cInRydWVcIlxuXG4gICAgICAgICAgICAgICAgICA6YXBpLW1vZGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIDphcGktdXJsPVwic3RvcmUuYXBpXCJcbiAgICAgICAgICAgICAgICAgIDpwZXItcGFnZT1cInBlclBhZ2VcIlxuICAgICAgICAgICAgICAgICAgOmFwcGVuZC1wYXJhbXM9XCJleHRyYVBhcmFtc1wiXG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uLXBhdGg9XCJsaW5rcy5wYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgIDpzaG93LXNvcnQtaWNvbnM9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIEB2dWV0YWJsZTpwYWdpbmF0aW9uLWRhdGE9XCJvblBhZ2luYXRpb25EYXRhXCJcbiAgICAgICAgICAgICAgICAgIEB2dWV0YWJsZTpsb2FkaW5nPVwib25WdWV0YWJsZUxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgQHZ1ZXRhYmxlOmxvYWQtc3VjY2Vzcz1cIm9uVnVlVGFibGVMb2FkU3VjY2Vzc1wiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbGlzdC1wYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICA8dnVldGFibGUtcGFnaW5hdGlvbi1pbmZvIHJlZj1cInBhZ2luYXRpb25JbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmluZm8tdGVtcGxhdGU9XCJzdG9yZS5wYWdpbmF0aW9uSW5mb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDppbmZvLW5vLWRhdGEtdGVtcGxhdGU9XCJzdG9yZS5lbXB0eVJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjc3M9XCJjc3MucGFnaW5hdGlvbkluZm9cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx2dWV0YWJsZS1wYWdpbmF0aW9uIHJlZj1cInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNzcz1cImNzcy5wYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB2dWV0YWJsZS1wYWdpbmF0aW9uOmNoYW5nZS1wYWdlPVwib25DaGFuZ2VQYWdlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG4gICAgaW1wb3J0IFZ1ZXRhYmxlIGZyb20gJ3Z1ZXRhYmxlLTIvc3JjL2NvbXBvbmVudHMvVnVldGFibGUudnVlJztcbiAgICBpbXBvcnQgVnVldGFibGVQYWdpbmF0aW9uIGZyb20gXCJ2dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbi52dWVcIjtcbiAgICBpbXBvcnQgVnVldGFibGVQYWdpbmF0aW9uSW5mbyBmcm9tICd2dWV0YWJsZS0yL3NyYy9jb21wb25lbnRzL1Z1ZXRhYmxlUGFnaW5hdGlvbkluZm8udnVlJztcbiAgICBpbXBvcnQgVnVldGFibGVDc3NDb25maWcgZnJvbSBcIi4uL1Z1ZXRhYmxlQ3NzQ29uZmlnLmpzXCI7XG5cbiAgICBpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBwcm9wczogWydzdG9yZScsICd2YWx1ZSddLFxuICAgICAgICBjb21wb25lbnRzOiB7VnVldGFibGUsIFZ1ZXRhYmxlUGFnaW5hdGlvbiwgVnVldGFibGVQYWdpbmF0aW9uSW5mb30sXG4gICAgICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBjc3M6IFZ1ZXRhYmxlQ3NzQ29uZmlnLFxuICAgICAgICAgICAgcGVyUGFnZTogMTAsXG4gICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIGV4dHJhUGFyYW1zOiB7fVxuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMucGVyUGFnZSA9IHRoaXMuc3RvcmUucGVyUGFnZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IE9iamVjdC52YWx1ZXModGhpcy5zdG9yZS5kYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMuJHJlZnMudnVldGFibGUuc2V0RGF0YSh0aGlzLnN0b3JlLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy4kZXZlbnRzLiRvbignZmlsdGVyLXNldCcsIGV2ZW50ID0+IHRoaXMub25GaWx0ZXJTZXQoZXZlbnQpKTtcbiAgICAgICAgICAgIHRoaXMuJGV2ZW50cy4kb24oJ2ZpbHRlci1yZXNldCcsIGV2ZW50ID0+IHRoaXMub25GaWx0ZXJSZXNldCgpKTtcbiAgICAgICAgICAgIHRoaXMuJGV2ZW50cy4kb24oJ2ZpbHRlci1wZXJQYWdlJywgZXZlbnQgPT4gdGhpcy5vbkZpbHRlclBlclBhZ2UoZXZlbnQpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgb25QYWdpbmF0aW9uRGF0YShwYWdpbmF0aW9uRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMucGFnaW5hdGlvbi5zZXRQYWdpbmF0aW9uRGF0YShwYWdpbmF0aW9uRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5wYWdpbmF0aW9uSW5mby5zZXRQYWdpbmF0aW9uRGF0YShwYWdpbmF0aW9uRGF0YSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25GaWx0ZXJTZXQgKGZpbHRlclRleHQpIHtcbiAgICAgICAgICAgICAgICBfLnNldCh0aGlzLmV4dHJhUGFyYW1zLCAnZmlsdGVyJywgZmlsdGVyVGV4dCk7XG4gICAgICAgICAgICAgICAgVnVlLm5leHRUaWNrKCgpID0+IHRoaXMuJHJlZnMudnVldGFibGUucmVmcmVzaCgpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkZpbHRlclJlc2V0ICgpIHtcbiAgICAgICAgICAgICAgICBfLnVuc2V0KHRoaXMuZXh0cmFQYXJhbXMsICdmaWx0ZXInKTtcbiAgICAgICAgICAgICAgICBWdWUubmV4dFRpY2soKCkgPT4gdGhpcy4kcmVmcy52dWV0YWJsZS5yZWZyZXNoKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRmlsdGVyUGVyUGFnZSAobGltaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25GaWx0ZXJQZXJQYWdlJywgbGltaXQsIHRoaXMuc3RvcmUuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJQYWdlID0gbGltaXQgfHwgdGhpcy4kcmVmcy5wYWdpbmF0aW9uSW5mby50YWJsZVBhZ2luYXRpb24udG90YWw7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kcmVmcy52dWV0YWJsZS5wZXJQYWdlID0gbGltaXQ7XG4gICAgICAgICAgICAgICAgVnVlLm5leHRUaWNrKCgpID0+IHRoaXMuJHJlZnMudnVldGFibGUucmVmcmVzaCgpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNoYW5nZVBhZ2UocGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudnVldGFibGUuY2hhbmdlUGFnZShwYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblZ1ZXRhYmxlTG9hZGluZygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVnVlVGFibGVMb2FkU3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00WzBdLnJ1bGVzWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9UYWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL1RhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xM2RlZGM4YyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9UYWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1RhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2RqYW1pbC9Qcm9qZWN0cy90cmlsYnkvX2dyYXYvZ3Jhdi1wbHVnaW4tZmxleC1vYmplY3RzL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzEzZGVkYzhjJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzEzZGVkYzhjJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzEzZGVkYzhjJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9UYWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTNkZWRjOGMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMTNkZWRjOGMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImFwcC9saXN0L2NvbXBvbmVudHMvVGFibGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInNlYXJjaC13cmFwcGVyXCIgfSwgW1xuICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbC50cmltXCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5maWx0ZXJUZXh0LFxuICAgICAgICAgIGV4cHJlc3Npb246IFwiZmlsdGVyVGV4dFwiLFxuICAgICAgICAgIG1vZGlmaWVyczogeyB0cmltOiB0cnVlIH1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcInNlYXJjaFwiLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJ0ZXh0XCIsIHBsYWNlaG9sZGVyOiBfdm0uc3RvcmUuc2VhcmNoUGxhY2Vob2xkZXIgfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uZmlsdGVyVGV4dCB9LFxuICAgICAgb246IHtcbiAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF92bS5maWx0ZXJUZXh0ID0gJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIF92bS5kb0ZpbHRlclxuICAgICAgICBdLFxuICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLiRmb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJzZWxlY3RcIixcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5zdG9yZS5wZXJQYWdlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzdG9yZS5wZXJQYWdlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImZpbHRlci1wZXJQYWdlXCIsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gICAgICAgICAgICAgICAgLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gby5zZWxlY3RlZFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgdmFsID0gXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgX3ZtLnN0b3JlLFxuICAgICAgICAgICAgICAgIFwicGVyUGFnZVwiLFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLmNoYW5nZVBlclBhZ2VcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdm0uX2wodGhpcy5wZXJQYWdlT3B0aW9ucywgZnVuY3Rpb24odmFsdWUsIHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICBcIm9wdGlvblwiLFxuICAgICAgICAgIHsgZG9tUHJvcHM6IHsgdmFsdWU6IHZhbHVlLCBzZWxlY3RlZDogX3ZtLnN0b3JlLnBlclBhZ2UgPT09IHZhbHVlIH0gfSxcbiAgICAgICAgICBbX3ZtLl92KF92bS5fcyh0aXRsZSkpXVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIDBcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInNlYXJjaFwiIDpwbGFjZWhvbGRlcj1cInN0b3JlLnNlYXJjaFBsYWNlaG9sZGVyXCIgdi1tb2RlbC50cmltPVwiZmlsdGVyVGV4dFwiIEBpbnB1dD1cImRvRmlsdGVyXCI+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmaWx0ZXItcGVyUGFnZVwiIHYtbW9kZWw9XCJzdG9yZS5wZXJQYWdlXCIgQGNoYW5nZT1cImNoYW5nZVBlclBhZ2VcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCIodmFsdWUsIHRpdGxlKSBpbiB0aGlzLnBlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgOnZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQ9XCJzdG9yZS5wZXJQYWdlID09PSB2YWx1ZVwiPnt7IHRpdGxlIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIHByb3BzOiBbJ3N0b3JlJ10sXG4gICAgICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiAnJyxcbiAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnRmlsdGVyLi4uJyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiAnJ1xuICAgICAgICB9KSxcbiAgICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIHBlclBhZ2VPcHRpb25zKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICcyNSc6IDI1LFxuICAgICAgICAgICAgICAgICAgICAnNTAnOiA1MCxcbiAgICAgICAgICAgICAgICAgICAgJzEwMCc6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgJzIwMCc6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgJ0FsbCc6ICcnXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc1t0aGlzLnN0b3JlLnBlclBhZ2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbdGhpcy5zdG9yZS5wZXJQYWdlXSA9IHRoaXMuc3RvcmUucGVyUGFnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZCgpIHtcbiAgICAgICAgICAgIHRoaXMuZG9GaWx0ZXIgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzLmZpcmUoJ2ZpbHRlci1zZXQnLCB0aGlzLmZpbHRlclRleHQpO1xuICAgICAgICAgICAgfSwgMjUwLCB7IGxlYWRpbmc6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBlclBhZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZXZlbnRzLmZpcmUoJ2ZpbHRlci1wZXJQYWdlJywgdGhpcy5zdG9yZS5wZXJQYWdlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIHJlc2V0RmlsdGVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuJGV2ZW50cy5maXJlKCdmaWx0ZXItcmVzZXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIC5zZWFyY2gtd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgLnNlYXJjaC13cmFwcGVyIHNlbGVjdCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9GaWx0ZXJCYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVlMTk1YTMyJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0ZpbHRlckJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vRmlsdGVyQmFyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTVlMTk1YTMyJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI1ZTE5NWEzMlwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9kamFtaWwvUHJvamVjdHMvdHJpbGJ5L19ncmF2L2dyYXYtcGx1Z2luLWZsZXgtb2JqZWN0cy9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc1ZTE5NWEzMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1ZTE5NWEzMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1ZTE5NWEzMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRmlsdGVyQmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZTE5NWEzMiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1ZTE5NWEzMicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2xpc3QvY29tcG9uZW50cy9GaWx0ZXJCYXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3R5bGU6IHsgaGVpZ2h0OiAzMDAsIHdpZHRoOiBcIjEwMCVcIiB9IH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImNvbnRlbnQtbG9hZGVyXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgaGVpZ2h0OiBfdm0uZml4ZWRBbW91bnQgKiBfdm0uY291bnQsXG4gICAgICAgICAgICB3aWR0aDogMTA2MCxcbiAgICAgICAgICAgIHNwZWVkOiAyLFxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yOiBcIiNkOWQ5ZDlcIixcbiAgICAgICAgICAgIHNlY29uZGFyeUNvbG9yOiBcIiNlY2ViZWJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fbChfdm0uY291bnQsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjEzXCIsXG4gICAgICAgICAgICAgICAgICB5OiBfdm0uZml4ZWRBbW91bnQgKiBpbmRleCArIF92bS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICByeDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICByeTogXCI2XCIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMjAwICogX3ZtLnJhbmRvbSgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjUzM1wiLFxuICAgICAgICAgICAgICAgICAgeTogX3ZtLmZpeGVkQW1vdW50ICogaW5kZXggKyBfdm0ub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgcng6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgcnk6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDYzICogX3ZtLnJhbmRvbSgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjY1M1wiLFxuICAgICAgICAgICAgICAgICAgeTogX3ZtLmZpeGVkQW1vdW50ICogaW5kZXggKyBfdm0ub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgcng6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgcnk6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDc4ICogX3ZtLnJhbmRvbSgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB4OiBcIjc1NVwiLFxuICAgICAgICAgICAgICAgICAgeTogX3ZtLmZpeGVkQW1vdW50ICogaW5kZXggKyBfdm0ub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgcng6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgcnk6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDExNyAqIF92bS5yYW5kb20oKSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgeDogXCI5MzhcIixcbiAgICAgICAgICAgICAgICAgIHk6IF92bS5maXhlZEFtb3VudCAqIGluZGV4ICsgX3ZtLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgIHJ4OiBcIjZcIixcbiAgICAgICAgICAgICAgICAgIHJ5OiBcIjZcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA4MyAqIF92bS5yYW5kb20oKSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgeDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICB5OiBfdm0uZml4ZWRBbW91bnQgKiBpbmRleCxcbiAgICAgICAgICAgICAgICAgIHJ4OiBcIjZcIixcbiAgICAgICAgICAgICAgICAgIHJ5OiBcIjZcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwNjBcIixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIuM1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBfbWVyZ2VKU1hQcm9wcyBmcm9tICdiYWJlbC1oZWxwZXItdnVlLWpzeC1tZXJnZS1wcm9wcyc7XG5cbnZhciB1aWQgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xufSk7XG5cbnZhciBDb250ZW50TG9hZGVyID0ge1xuICBuYW1lOiAnQ29udGVudExvYWRlcicsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgd2lkdGg6IHtcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICBcImRlZmF1bHRcIjogNDAwXG4gICAgfSxcbiAgICBoZWlnaHQ6IHtcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICBcImRlZmF1bHRcIjogMTMwXG4gICAgfSxcbiAgICBzcGVlZDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgXCJkZWZhdWx0XCI6IDJcbiAgICB9LFxuICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAneE1pZFlNaWQgbWVldCdcbiAgICB9LFxuICAgIGJhc2VVcmw6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAnJ1xuICAgIH0sXG4gICAgcHJpbWFyeUNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBcImRlZmF1bHRcIjogJyNmOWY5ZjknXG4gICAgfSxcbiAgICBzZWNvbmRhcnlDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgXCJkZWZhdWx0XCI6ICcjZWNlYmViJ1xuICAgIH0sXG4gICAgcHJpbWFyeU9wYWNpdHk6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIFwiZGVmYXVsdFwiOiAxXG4gICAgfSxcbiAgICBzZWNvbmRhcnlPcGFjaXR5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBcImRlZmF1bHRcIjogMVxuICAgIH0sXG4gICAgdW5pcXVlS2V5OiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9LFxuICAgIGFuaW1hdGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCwgX3JlZikge1xuICAgIHZhciBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICAgIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgICB2YXIgaWRDbGlwID0gcHJvcHMudW5pcXVlS2V5ID8gcHJvcHMudW5pcXVlS2V5ICsgXCItaWRDbGlwXCIgOiB1aWQoKTtcbiAgICB2YXIgaWRHcmFkaWVudCA9IHByb3BzLnVuaXF1ZUtleSA/IHByb3BzLnVuaXF1ZUtleSArIFwiLWlkR3JhZGllbnRcIiA6IHVpZCgpO1xuICAgIHJldHVybiBoKFwic3ZnXCIsIF9tZXJnZUpTWFByb3BzKFtkYXRhLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCBcIiArIHByb3BzLndpZHRoICsgXCIgXCIgKyBwcm9wcy5oZWlnaHQsXG4gICAgICAgIHZlcnNpb246IFwiMS4xXCIsXG4gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IHByb3BzLnByZXNlcnZlQXNwZWN0UmF0aW9cbiAgICAgIH1cbiAgICB9XSksIFtoKFwicmVjdFwiLCB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBmaWxsOiBcInVybChcIiArIHByb3BzLmJhc2VVcmwgKyBcIiNcIiArIGlkR3JhZGllbnQgKyBcIilcIlxuICAgICAgfSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiY2xpcC1wYXRoXCI6IFwidXJsKFwiICsgcHJvcHMuYmFzZVVybCArIFwiI1wiICsgaWRDbGlwICsgXCIpXCIsXG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjBcIixcbiAgICAgICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodFxuICAgICAgfVxuICAgIH0pLCBoKFwiZGVmc1wiLCBbaChcImNsaXBQYXRoXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGlkOiBpZENsaXBcbiAgICAgIH1cbiAgICB9LCBbY2hpbGRyZW4gfHwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIwXCIsXG4gICAgICAgIHk6IFwiMFwiLFxuICAgICAgICByeDogXCI1XCIsXG4gICAgICAgIHJ5OiBcIjVcIixcbiAgICAgICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodFxuICAgICAgfVxuICAgIH0pXSksIGgoXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBpZDogaWRHcmFkaWVudFxuICAgICAgfVxuICAgIH0sIFtoKFwic3RvcFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICAgICAgXCJzdG9wLWNvbG9yXCI6IHByb3BzLnByaW1hcnlDb2xvcixcbiAgICAgICAgXCJzdG9wLW9wYWNpdHlcIjogcHJvcHMucHJpbWFyeU9wYWNpdHlcbiAgICAgIH1cbiAgICB9LCBbcHJvcHMuYW5pbWF0ZSA/IGgoXCJhbmltYXRlXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGF0dHJpYnV0ZU5hbWU6IFwib2Zmc2V0XCIsXG4gICAgICAgIHZhbHVlczogXCItMjsgMVwiLFxuICAgICAgICBkdXI6IHByb3BzLnNwZWVkICsgXCJzXCIsXG4gICAgICAgIHJlcGVhdENvdW50OiBcImluZGVmaW5pdGVcIlxuICAgICAgfVxuICAgIH0pIDogbnVsbF0pLCBoKFwic3RvcFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBvZmZzZXQ6IFwiNTAlXCIsXG4gICAgICAgIFwic3RvcC1jb2xvclwiOiBwcm9wcy5zZWNvbmRhcnlDb2xvcixcbiAgICAgICAgXCJzdG9wLW9wYWNpdHlcIjogcHJvcHMuc2Vjb25kYXJ5T3BhY2l0eVxuICAgICAgfVxuICAgIH0sIFtwcm9wcy5hbmltYXRlID8gaChcImFuaW1hdGVcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgYXR0cmlidXRlTmFtZTogXCJvZmZzZXRcIixcbiAgICAgICAgdmFsdWVzOiBcIi0xLjU7IDEuNVwiLFxuICAgICAgICBkdXI6IHByb3BzLnNwZWVkICsgXCJzXCIsXG4gICAgICAgIHJlcGVhdENvdW50OiBcImluZGVmaW5pdGVcIlxuICAgICAgfVxuICAgIH0pIDogbnVsbF0pLCBoKFwic3RvcFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgICAgICBcInN0b3AtY29sb3JcIjogcHJvcHMucHJpbWFyeUNvbG9yLFxuICAgICAgICBcInN0b3Atb3BhY2l0eVwiOiBwcm9wcy5wcmltYXJ5T3BhY2l0eVxuICAgICAgfVxuICAgIH0sIFtwcm9wcy5hbmltYXRlID8gaChcImFuaW1hdGVcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgYXR0cmlidXRlTmFtZTogXCJvZmZzZXRcIixcbiAgICAgICAgdmFsdWVzOiBcIi0xOyAyXCIsXG4gICAgICAgIGR1cjogcHJvcHMuc3BlZWQgKyBcInNcIixcbiAgICAgICAgcmVwZWF0Q291bnQ6IFwiaW5kZWZpbml0ZVwiXG4gICAgICB9XG4gICAgfSkgOiBudWxsXSldKV0pXSk7XG4gIH1cbn07XG5cbnZhciBCdWxsZXRMaXN0TG9hZGVyID0ge1xuICBuYW1lOiAnQnVsbGV0TGlzdExvYWRlcicsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgsIF9yZWYpIHtcbiAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICByZXR1cm4gaChDb250ZW50TG9hZGVyLCBkYXRhLCBbaChcImNpcmNsZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBjeDogXCIxMFwiLFxuICAgICAgICBjeTogXCIyMFwiLFxuICAgICAgICByOiBcIjhcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjI1XCIsXG4gICAgICAgIHk6IFwiMTVcIixcbiAgICAgICAgcng6IFwiNVwiLFxuICAgICAgICByeTogXCI1XCIsXG4gICAgICAgIHdpZHRoOiBcIjIyMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwiY2lyY2xlXCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGN4OiBcIjEwXCIsXG4gICAgICAgIGN5OiBcIjUwXCIsXG4gICAgICAgIHI6IFwiOFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMjVcIixcbiAgICAgICAgeTogXCI0NVwiLFxuICAgICAgICByeDogXCI1XCIsXG4gICAgICAgIHJ5OiBcIjVcIixcbiAgICAgICAgd2lkdGg6IFwiMjIwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJjaXJjbGVcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgY3g6IFwiMTBcIixcbiAgICAgICAgY3k6IFwiODBcIixcbiAgICAgICAgcjogXCI4XCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIyNVwiLFxuICAgICAgICB5OiBcIjc1XCIsXG4gICAgICAgIHJ4OiBcIjVcIixcbiAgICAgICAgcnk6IFwiNVwiLFxuICAgICAgICB3aWR0aDogXCIyMjBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcImNpcmNsZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBjeDogXCIxMFwiLFxuICAgICAgICBjeTogXCIxMTBcIixcbiAgICAgICAgcjogXCI4XCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIyNVwiLFxuICAgICAgICB5OiBcIjEwNVwiLFxuICAgICAgICByeDogXCI1XCIsXG4gICAgICAgIHJ5OiBcIjVcIixcbiAgICAgICAgd2lkdGg6IFwiMjIwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSldKTtcbiAgfVxufTtcblxudmFyIENvZGVMb2FkZXIgPSB7XG4gIG5hbWU6ICdDb2RlTG9hZGVyJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCwgX3JlZikge1xuICAgIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICAgIHJldHVybiBoKENvbnRlbnRMb2FkZXIsIGRhdGEsIFtoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCI3MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjgwXCIsXG4gICAgICAgIHk6IFwiMFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMTAwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMTkwXCIsXG4gICAgICAgIHk6IFwiMFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMTBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIxNVwiLFxuICAgICAgICB5OiBcIjIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIxMzBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIxNTVcIixcbiAgICAgICAgeTogXCIyMFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMTMwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMTVcIixcbiAgICAgICAgeTogXCI0MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiOTBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIxMTVcIixcbiAgICAgICAgeTogXCI0MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiNjBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIxODVcIixcbiAgICAgICAgeTogXCI0MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiNjBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIwXCIsXG4gICAgICAgIHk6IFwiNjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjMwXCIsXG4gICAgICAgIGhlaWdodDogXCIxMFwiXG4gICAgICB9XG4gICAgfSldKTtcbiAgfVxufTtcblxudmFyIEZhY2Vib29rTG9hZGVyID0ge1xuICBuYW1lOiAnRmFjZWJvb2tMb2FkZXInLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgcmV0dXJuIGgoQ29udGVudExvYWRlciwgZGF0YSwgW2goXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiNzBcIixcbiAgICAgICAgeTogXCIxNVwiLFxuICAgICAgICByeDogXCI0XCIsXG4gICAgICAgIHJ5OiBcIjRcIixcbiAgICAgICAgd2lkdGg6IFwiMTE3XCIsXG4gICAgICAgIGhlaWdodDogXCI2LjRcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjcwXCIsXG4gICAgICAgIHk6IFwiMzVcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjg1XCIsXG4gICAgICAgIGhlaWdodDogXCI2LjRcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCI4MFwiLFxuICAgICAgICByeDogXCIzXCIsXG4gICAgICAgIHJ5OiBcIjNcIixcbiAgICAgICAgd2lkdGg6IFwiMzUwXCIsXG4gICAgICAgIGhlaWdodDogXCI2LjRcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCIxMDBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjM4MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiNi40XCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIwXCIsXG4gICAgICAgIHk6IFwiMTIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIyMDFcIixcbiAgICAgICAgaGVpZ2h0OiBcIjYuNFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJjaXJjbGVcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgY3g6IFwiMzBcIixcbiAgICAgICAgY3k6IFwiMzBcIixcbiAgICAgICAgcjogXCIzMFwiXG4gICAgICB9XG4gICAgfSldKTtcbiAgfVxufTtcblxudmFyIExpc3RMb2FkZXIgPSB7XG4gIG5hbWU6ICdMaXN0TG9hZGVyJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCwgX3JlZikge1xuICAgIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICAgIHJldHVybiBoKENvbnRlbnRMb2FkZXIsIGRhdGEsIFtoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgeTogXCIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIyNTBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIyMFwiLFxuICAgICAgICB5OiBcIjIwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIyMjBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIyMFwiLFxuICAgICAgICB5OiBcIjQwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCIxNzBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCIwXCIsXG4gICAgICAgIHk6IFwiNjBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjI1MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjIwXCIsXG4gICAgICAgIHk6IFwiODBcIixcbiAgICAgICAgcng6IFwiM1wiLFxuICAgICAgICByeTogXCIzXCIsXG4gICAgICAgIHdpZHRoOiBcIjIwMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pLCBoKFwicmVjdFwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB4OiBcIjIwXCIsXG4gICAgICAgIHk6IFwiMTAwXCIsXG4gICAgICAgIHJ4OiBcIjNcIixcbiAgICAgICAgcnk6IFwiM1wiLFxuICAgICAgICB3aWR0aDogXCI4MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTBcIlxuICAgICAgfVxuICAgIH0pXSk7XG4gIH1cbn07XG5cbnZhciBJbnN0YWdyYW1Mb2FkZXIgPSB7XG4gIG5hbWU6ICdJbnN0YWdyYW1Mb2FkZXInLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgcmV0dXJuIGgoQ29udGVudExvYWRlciwgX21lcmdlSlNYUHJvcHMoW2RhdGEsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGhlaWdodDogNDgwXG4gICAgICB9XG4gICAgfV0pLCBbaChcImNpcmNsZVwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBjeDogXCIzMFwiLFxuICAgICAgICBjeTogXCIzMFwiLFxuICAgICAgICByOiBcIjMwXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCI3NVwiLFxuICAgICAgICB5OiBcIjEzXCIsXG4gICAgICAgIHJ4OiBcIjRcIixcbiAgICAgICAgcnk6IFwiNFwiLFxuICAgICAgICB3aWR0aDogXCIxMDBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEzXCJcbiAgICAgIH1cbiAgICB9KSwgaChcInJlY3RcIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgeDogXCI3NVwiLFxuICAgICAgICB5OiBcIjM3XCIsXG4gICAgICAgIHJ4OiBcIjRcIixcbiAgICAgICAgcnk6IFwiNFwiLFxuICAgICAgICB3aWR0aDogXCI1MFwiLFxuICAgICAgICBoZWlnaHQ6IFwiOFwiXG4gICAgICB9XG4gICAgfSksIGgoXCJyZWN0XCIsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHg6IFwiMFwiLFxuICAgICAgICB5OiBcIjcwXCIsXG4gICAgICAgIHJ4OiBcIjVcIixcbiAgICAgICAgcnk6IFwiNVwiLFxuICAgICAgICB3aWR0aDogXCI0MDBcIixcbiAgICAgICAgaGVpZ2h0OiBcIjQwMFwiXG4gICAgICB9XG4gICAgfSldKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgQ29udGVudExvYWRlciwgQnVsbGV0TGlzdExvYWRlciwgQ29kZUxvYWRlciwgRmFjZWJvb2tMb2FkZXIsIExpc3RMb2FkZXIsIEluc3RhZ3JhbUxvYWRlciB9O1xuIiwiPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgOnN0eWxlPVwieyBoZWlnaHQ6IDMwMCwgd2lkdGg6ICcxMDAlJyB9XCI+PC9kaXY+XG4gICAgICAgIDxjb250ZW50LWxvYWRlclxuICAgICAgICAgICAgOmhlaWdodD1cImZpeGVkQW1vdW50ICogY291bnRcIlxuICAgICAgICAgICAgOndpZHRoPVwiMTA2MFwiXG4gICAgICAgICAgICA6c3BlZWQ9XCIyXCJcbiAgICAgICAgICAgIHByaW1hcnlDb2xvcj1cIiNkOWQ5ZDlcIlxuICAgICAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjZWNlYmViXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiaW5kZXggaW4gY291bnRcIj5cbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMTNcIiA6eT1cImZpeGVkQW1vdW50ICogaW5kZXggKyBvZmZzZXRcIiByeD1cIjZcIiByeT1cIjZcIiA6d2lkdGg9XCIyMDAgKiByYW5kb20oKVwiIGhlaWdodD1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNTMzXCIgOnk9XCJmaXhlZEFtb3VudCAqIGluZGV4ICsgb2Zmc2V0XCIgcng9XCI2XCIgcnk9XCI2XCIgOndpZHRoPVwiNjMgKiByYW5kb20oKVwiIGhlaWdodD1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNjUzXCIgOnk9XCJmaXhlZEFtb3VudCAqIGluZGV4ICsgb2Zmc2V0XCIgcng9XCI2XCIgcnk9XCI2XCIgOndpZHRoPVwiNzggKiByYW5kb20oKVwiIGhlaWdodD1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNzU1XCIgOnk9XCJmaXhlZEFtb3VudCAqIGluZGV4ICsgb2Zmc2V0XCIgcng9XCI2XCIgcnk9XCI2XCIgOndpZHRoPVwiMTE3ICogcmFuZG9tKClcIiBoZWlnaHQ9XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjkzOFwiIDp5PVwiZml4ZWRBbW91bnQgKiBpbmRleCArIG9mZnNldFwiIHJ4PVwiNlwiIHJ5PVwiNlwiIDp3aWR0aD1cIjgzICogcmFuZG9tKClcIiBoZWlnaHQ9XCIxMlwiIC8+XG5cbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMFwiIDp5PVwiZml4ZWRBbW91bnQgKiBpbmRleFwiIHJ4PVwiNlwiIHJ5PVwiNlwiIHdpZHRoPVwiMTA2MFwiIGhlaWdodD1cIi4zXCIgLz5cbiAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvY29udGVudC1sb2FkZXI+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICAgIGltcG9ydCB7IENvbnRlbnRMb2FkZXIgfSBmcm9tICd2dWUtY29udGVudC1sb2FkZXInO1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBwcm9wczogWydzdG9yZSddLFxuICAgICAgICBkYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgZml4ZWRBbW91bnQ6IDMxLFxuICAgICAgICAgICAgb2Zmc2V0OiAxMCxcbiAgICAgICAgICAgIHN0ZXBzOiBbMC43LCAwLjgsIDAuOSwgMV1cbiAgICAgICAgfSksXG4gICAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgICAgICBjb3VudCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5wZXJQYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICByYW5kb20oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5zdGVwcy5sZW5ndGgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgQ29udGVudExvYWRlclxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTRbMF0ucnVsZXNbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Db250ZW50TG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00WzBdLnJ1bGVzWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ29udGVudExvYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0NvbnRlbnRMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZkZGE1NjUwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0NvbnRlbnRMb2FkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9Db250ZW50TG9hZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2RqYW1pbC9Qcm9qZWN0cy90cmlsYnkvX2dyYXYvZ3Jhdi1wbHVnaW4tZmxleC1vYmplY3RzL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzZkZGE1NjUwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzZkZGE1NjUwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzZkZGE1NjUwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Db250ZW50TG9hZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZGRhNTY1MCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2ZGRhNTY1MCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2xpc3QvY29tcG9uZW50cy9Db250ZW50TG9hZGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8ZmxleC1maWx0ZXItYmFyIDpzdG9yZT1cInN0b3JlXCIgLz5cbiAgICAgICAgPGZsZXgtY29udGVudC1sb2FkZXIgOnN0b3JlPVwic3RvcmVcIiB2LXNob3c9XCJsb2FkaW5nXCIgLz5cbiAgICAgICAgPGZsZXgtdGFibGUgOnN0b3JlPVwic3RvcmVcIiB2LW1vZGVsPVwibG9hZGluZ1wiIHYtc2hvdz1cIiFsb2FkaW5nXCIgLz5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0IEZsZXhUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvVGFibGUudnVlJztcbiAgICBpbXBvcnQgRmxleEZpbHRlckJhciBmcm9tICcuL2NvbXBvbmVudHMvRmlsdGVyQmFyLnZ1ZSc7XG4gICAgaW1wb3J0IEZsZXhDb250ZW50TG9hZGVyIGZyb20gJy4vY29tcG9uZW50cy9Db250ZW50TG9hZGVyLnZ1ZSc7XG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIHByb3BzOiBbJ2luaXRpYWxTdG9yZSddLFxuICAgICAgICBjb21wb25lbnRzOiB7RmxleFRhYmxlLCBGbGV4RmlsdGVyQmFyLCBGbGV4Q29udGVudExvYWRlcn0sXG4gICAgICAgIGRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBwZXJQYWdlOiAxMCxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWVcbiAgICAgICAgfSksXG4gICAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgICAgICBzdG9yZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmluaXRpYWxTdG9yZSB8fCAne30nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00WzBdLnJ1bGVzWzBdIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC00WzBdLnJ1bGVzWzBdIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NGIxMTBjYyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvZGphbWlsL1Byb2plY3RzL3RyaWxieS9fZ3Jhdi9ncmF2LXBsdWdpbi1mbGV4LW9iamVjdHMvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNTRiMTEwY2MnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNTRiMTEwY2MnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNTRiMTEwY2MnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTRiMTEwY2MmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNTRiMTEwY2MnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImFwcC9saXN0L0FwcC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgVnVlRXZlbnRzIGZyb20gJ3Z1ZS1ldmVudHMnO1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnO1xuXG5WdWUudXNlKFZ1ZUV2ZW50cyk7XG5cbmNvbnN0IElEID0gJyNmbGV4LW9iamVjdHMtbGlzdCc7XG5jb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihJRCk7XG5cbmlmIChlbGVtZW50KSB7XG4gICAgY29uc3QgaW5pdGlhbFN0b3JlID0gZWxlbWVudC5kYXRhc2V0LmluaXRpYWxTdG9yZTtcblxuICAgIG5ldyBWdWUoeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgICBlbDogSUQsXG4gICAgICAgIHJlbmRlcjogaCA9PiBoKEFwcCwge1xuICAgICAgICAgICAgcHJvcHM6IHtpbml0aWFsU3RvcmV9XG4gICAgICAgIH0pXG4gICAgfSk7XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0galF1ZXJ5OyIsIi8qKlxuICogKGMpIFRyaWxieSBNZWRpYSwgTExDXG4gKiBBdXRob3IgRGphbWlsIExlZ2F0b1xuICpcbiAqIEJhc2VkIG9uIE1hcmsgTWF0eWFzJ3MgRmluZGVyanNcbiAqIE1JVCBMaWNlbnNlXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUUyA9IHtcbiAgICBsYWJlbEtleTogJ25hbWUnLFxuICAgIHZhbHVlS2V5OiAndmFsdWUnLCAvLyBuZXdcbiAgICBjaGlsZEtleTogJ2NoaWxkcmVuJyxcbiAgICBpY29uS2V5OiAnaWNvbicsIC8vIG5ld1xuICAgIGl0ZW1LZXk6ICdpdGVtLWtleScsIC8vIG5ld1xuICAgIGl0ZW1UcmlnZ2VyOiBudWxsLFxuICAgIHBhdGhCYXI6IHRydWUsXG4gICAgY2xhc3NOYW1lOiB7XG4gICAgICAgIGNvbnRhaW5lcjogJ2Zqcy1jb250YWluZXInLFxuICAgICAgICBwYXRoQmFyOiAnZmpzLXBhdGgtYmFyJyxcbiAgICAgICAgY29sOiAnZmpzLWNvbCcsXG4gICAgICAgIGxpc3Q6ICdmanMtbGlzdCcsXG4gICAgICAgIGl0ZW06ICdmanMtaXRlbScsXG4gICAgICAgIGFjdGl2ZTogJ2Zqcy1hY3RpdmUnLFxuICAgICAgICBjaGlsZHJlbjogJ2Zqcy1oYXMtY2hpbGRyZW4nLFxuICAgICAgICB1cmw6ICdmanMtdXJsJyxcbiAgICAgICAgaXRlbVByZXBlbmQ6ICdmanMtaXRlbS1wcmVwZW5kJyxcbiAgICAgICAgaXRlbUNvbnRlbnQ6ICdmanMtaXRlbS1jb250ZW50JyxcbiAgICAgICAgaXRlbUFwcGVuZDogJ2Zqcy1pdGVtLWFwcGVuZCdcbiAgICB9XG59O1xuXG5jbGFzcyBGaW5kZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgZGF0YSwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLiRlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9ICQoY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBERUZBVUxUUywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLm9mZignY2xpY2suZmluZGVyIGtleWRvd24uZmluZGVyJyk7XG5cbiAgICAgICAgLy8gZG9tIGV2ZW50c1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5vbignY2xpY2suZmluZGVyJywgdGhpcy5jbGlja0V2ZW50LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigna2V5ZG93bi5maW5kZXInLCB0aGlzLmtleWRvd25FdmVudC5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyBpbnRlcm5hbCBldmVudHNcbiAgICAgICAgdGhpcy4kZW1pdHRlci5vbignaXRlbS1zZWxlY3RlZCcsIHRoaXMuaXRlbVNlbGVjdGVkLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLiRlbWl0dGVyLm9uKCdjcmVhdGUtY29sdW1uJywgdGhpcy5hZGRDb2x1bW4uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuJGVtaXR0ZXIub24oJ25hdmlnYXRlJywgdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy4kZW1pdHRlci5vbignZ28tdG8nLCB0aGlzLmdvVG8uYmluZCh0aGlzLCB0aGlzLmRhdGEpKTtcblxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmNvbmZpZy5jbGFzc05hbWUuY29udGFpbmVyKS5hdHRyKCd0YWJpbmRleCcsIDApO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uKHRoaXMuZGF0YSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnBhdGhCYXIpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aEJhciA9IHRoaXMuY3JlYXRlUGF0aEJhcigpO1xuICAgICAgICAgICAgdGhpcy5wYXRoQmFyLm9uKCdjbGljay5maW5kZXInLCAnW2RhdGEtYnJlYWRjcnVtYi1ub2RlXScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JyZWFkY3J1bWJOb2RlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvKHRoaXMuZGF0YSwgbG9jYXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAnJyBpcyA8Um9vdD5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlZmF1bHRQYXRoIHx8IHRoaXMuY29uZmlnLmRlZmF1bHRQYXRoID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5nb1RvKHRoaXMuZGF0YSwgdGhpcy5jb25maWcuZGVmYXVsdFBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsb2FkKGRhdGEgPSB0aGlzLmRhdGEpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW4oZGF0YSk7XG5cbiAgICAgICAgLy8gJycgaXMgPFJvb3Q+XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5kZWZhdWx0UGF0aCB8fCB0aGlzLmNvbmZpZy5kZWZhdWx0UGF0aCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuZ29UbyhkYXRhLCB0aGlzLmNvbmZpZy5kZWZhdWx0UGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVDb2x1bW4oZGF0YSwgcGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKGRhdGEpID0+IHRoaXMuY3JlYXRlQ29sdW1uKGRhdGEsIHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBkYXRhLmNhbGwodGhpcywgcGFyZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gQXJyYXkuZnJvbShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNvbmZpZy5jcmVhdGVMaXN0IHx8IHRoaXMuY3JlYXRlTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9ICQoJzxkaXYgLz4nKTtcbiAgICAgICAgICAgIGRpdi5hcHBlbmQobGlzdC5jYWxsKHRoaXMsIGRhdGEpKS5hZGRDbGFzcyh0aGlzLmNvbmZpZy5jbGFzc05hbWUuY29sKTtcbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnY3JlYXRlLWNvbHVtbicsIGRpdik7XG5cbiAgICAgICAgICAgIHJldHVybiBkaXY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZGF0YSB0eXBlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVQYXRoQmFyKCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5zaWJsaW5ncyhgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLnBhdGhCYXJ9YCkucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IHBhdGhCYXIgPSAkKGA8ZGl2IGNsYXNzPVwiJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUucGF0aEJhcn1cIiAvPmApO1xuICAgICAgICBwYXRoQmFyLmluc2VydEFmdGVyKHRoaXMuY29udGFpbmVyKTtcblxuICAgICAgICByZXR1cm4gcGF0aEJhcjtcbiAgICB9XG5cbiAgICBjbGlja0V2ZW50KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGFyZ2V0LmNsb3Nlc3QoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5jb2x9YCk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQuY2xvc2VzdChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLml0ZW19YCk7XG4gICAgICAgIGNvbnN0IHByZXZlbnQgPSB0YXJnZXQuaXMoJ1tkYXRhLWZsZXhwYWdlcy1wcmV2ZW50XScpID8gdGFyZ2V0IDogdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWZsZXhwYWdlcy1wcmV2ZW50XScpO1xuXG4gICAgICAgIGlmIChwcmV2ZW50LmRhdGEoJ2ZsZXhwYWdlc1ByZXZlbnQnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5pdGVtVHJpZ2dlcikge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5pcyh0aGlzLmNvbmZpZy5pdGVtVHJpZ2dlcikgfHwgdGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcuaXRlbVRyaWdnZXIpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ2l0ZW0tc2VsZWN0ZWQnLCB7Y29sdW1uLCBpdGVtfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ2l0ZW0tc2VsZWN0ZWQnLCB7IGNvbHVtbiwgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGtleWRvd25FdmVudChldmVudCkge1xuICAgICAgICBjb25zdCBjb2RlcyA9IHsgMzc6ICdsZWZ0JywgMzg6ICd1cCcsIDM5OiAncmlnaHQnLCA0MDogJ2Rvd24nLCAxMzogJ2VudGVyJyB9O1xuXG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlIGluIGNvZGVzKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnbmF2aWdhdGUnLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBjb2Rlc1tldmVudC5rZXlDb2RlXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpdGVtU2VsZWN0ZWQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHZhbHVlLml0ZW07XG4gICAgICAgIGlmICghZWxlbWVudC5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50WzBdLl9pdGVtO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZS5jb2x1bW47XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpdGVtW3RoaXMuY29uZmlnLmNoaWxkS2V5XSB8fCB0aGlzLmRhdGE7IC8vIFRPRE86IHRoaXMuZGF0YSBmb3IgY29uc3RhbnQgcmVmcmVzaFxuICAgICAgICBjb25zdCBhY3RpdmUgPSAkKGNvbHVtbikuZmluZChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmFjdGl2ZX1gKTtcblxuICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0aXZlLnJlbW92ZUNsYXNzKHRoaXMuY29uZmlnLmNsYXNzTmFtZS5hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcyh0aGlzLmNvbmZpZy5jbGFzc05hbWUuYWN0aXZlKTtcbiAgICAgICAgY29sdW1uLm5leHRBbGwoKS5yZW1vdmUoKTsgLy8gPyE/IT9cblxuICAgICAgICB0aGlzLmNvbnRhaW5lclswXS5mb2N1cygpO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8od2luZG93LnBhZ2VYT2Zmc2V0LCB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUGF0aEJhcigpO1xuXG4gICAgICAgIGxldCBuZXdDb2x1bW47XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBuZXdDb2x1bW4gPSB0aGlzLmNyZWF0ZUNvbHVtbihkYXRhLCBpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnaW50ZXJpb3Itc2VsZWN0ZWQnLCBpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXR0ZXIuZW1pdCgnbGVhZi1zZWxlY3RlZCcsIGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgICB9XG5cbiAgICBhZGRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChjb2x1bW4pO1xuICAgICAgICB0aGlzLiRlbWl0dGVyLmVtaXQoJ2NvbHVtbi1jcmVhdGVkJywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmZpbmRMYXN0QWN0aXZlKCk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZhbHVlLmRpcmVjdGlvbjtcbiAgICAgICAgbGV0IGNvbHVtbjtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIGxldCB0YXJnZXQ7XG5cbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgaXRlbSA9IGFjdGl2ZS5pdGVtO1xuICAgICAgICAgICAgY29sdW1uID0gYWN0aXZlLmNvbHVtbjtcblxuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJyAmJiBpdGVtLnByZXYoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBpdGVtLnByZXYoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZG93bicgJiYgaXRlbS5uZXh0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gaXRlbS5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyAmJiBjb2x1bW4ubmV4dCgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gY29sdW1uLmZpbmQoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5pdGVtfWApLmZpcnN0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnICYmIGNvbHVtbi5wcmV2KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gY29sdW1uLnByZXYoKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBjb2x1bW4uZmluZChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmFjdGl2ZX1gKS5maXJzdCgpIHx8IGNvbHVtbi5maW5kKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUuaXRlbX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29udGFpbmVyLmZpbmQoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5jb2x9YCkuZmlyc3QoKTtcbiAgICAgICAgICAgIHRhcmdldCA9IGNvbHVtbi5maW5kKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUuaXRlbX1gKS5maXJzdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZSAmJiBkaXJlY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBhY3RpdmUuaXRlbS5maW5kKCdhJykucHJvcCgnaHJlZicpO1xuICAgICAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBocmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdHRlci5lbWl0KCdpdGVtLXNlbGVjdGVkJywge1xuICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICBpdGVtOiB0YXJnZXRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJblZpZXcodGFyZ2V0LCBjb2x1bW4sIHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXcodGFyZ2V0WzBdLCBjb2x1bW5bMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ29UbyhkYXRhLCBwYXRoKSB7XG4gICAgICAgIHBhdGggPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy8nKS5tYXAoYml0ID0+IGJpdC50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNoaWxkcmVuKCkucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGRhdGEuY2FsbCh0aGlzLCBudWxsLCAoZGF0YSkgPT4gdGhpcy5zZWxlY3RQYXRoKHBhdGgsIGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGF0aChwYXRoLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFBhdGgocGF0aCwgZGF0YSwgY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbiA9IGNvbHVtbiB8fCAocGF0aC5sZW5ndGggPyB0aGlzLmNyZWF0ZUNvbHVtbihkYXRhKSA6IHRoaXMuY29udGFpbmVyLmZpbmQoYD4gLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmNvbH1gKSk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbMF0gfHwgJyc7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5maW5kKChpdGVtKSA9PiBpdGVtW3RoaXMuY29uZmlnLml0ZW1LZXldID09PSBjdXJyZW50KTtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNvbHVtbi5maW5kKGBbZGF0YS1manMtaXRlbT1cIiR7Y3VycmVudH1cIl1gKS5maXJzdCgpO1xuICAgICAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLml0ZW1TZWxlY3RlZCh7XG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBpdGVtXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0luVmlldyhpdGVtLCBjb2x1bW4sIHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlldyhpdGVtWzBdLCBjb2x1bW5bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0aC5zaGlmdCgpO1xuXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCAmJiBjaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYXRoKHBhdGgsIGNoaWxkcmVuW3RoaXMuY29uZmlnLmNoaWxkS2V5XSwgbmV3Q29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRMYXN0QWN0aXZlKCkge1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNvbnRhaW5lci5maW5kKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWUuYWN0aXZlfWApO1xuICAgICAgICBpZiAoIWFjdGl2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IGFjdGl2ZS5sYXN0KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGl0ZW0uY2xvc2VzdChgLiR7dGhpcy5jb25maWcuY2xhc3NOYW1lLmNvbH1gKTtcblxuICAgICAgICByZXR1cm4geyBpdGVtLCBjb2x1bW4gfTtcbiAgICB9XG5cbiAgICBjcmVhdGVMaXN0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9ICQoJzx1bCAvPicpO1xuICAgICAgICBjb25zdCBjcmVhdGVJdGVtID0gdGhpcy5jb25maWcuY3JlYXRlSXRlbSB8fCB0aGlzLmNyZWF0ZUl0ZW07XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5tYXAoKGl0ZW0pID0+IGNyZWF0ZUl0ZW0uY2FsbCh0aGlzLCBpdGVtKSk7XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gaXRlbXMucmVkdWNlKChmcmFnbWVudCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudFswXSB8fCBjdXJyZW50KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgICAgICB9LCBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuXG4gICAgICAgIGxpc3QuYXBwZW5kKGZyYWdtZW50cykuYWRkQ2xhc3ModGhpcy5jb25maWcuY2xhc3NOYW1lLmxpc3QpO1xuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGNyZWF0ZUl0ZW0oaXRlbSkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9ICQoJzxsaSAvPicpO1xuICAgICAgICBjb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBbdGhpcy5jb25maWcuY2xhc3NOYW1lLml0ZW1dO1xuICAgICAgICBjb25zdCBsaW5rID0gJChgPGEgaHJlZj1cIiR7aXRlbS5ocmVmIHx8ICcnfVwiIC8+YCk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUl0ZW1Db250ZW50ID0gdGhpcy5jb25maWcuY3JlYXRlSXRlbUNvbnRlbnQgfHwgdGhpcy5jcmVhdGVJdGVtQ29udGVudDtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVJdGVtQ29udGVudC5jYWxsKHRoaXMsIGl0ZW0pO1xuICAgICAgICBsaW5rLmFwcGVuZChmcmFnbWVudClcbiAgICAgICAgICAgIC5hdHRyKCdocmVmJywgJycpXG4gICAgICAgICAgICAuYXR0cigndGFiaW5kZXgnLCAtMSk7XG5cbiAgICAgICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICAgICAgICBsaW5rLmF0dHIoJ2hyZWYnLCBpdGVtLnVybCk7XG4gICAgICAgICAgICBsaXN0SXRlbUNsYXNzZXMucHVzaChpdGVtLmNsYXNzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbVt0aGlzLmNvbmZpZy5jaGlsZEtleV0pIHtcbiAgICAgICAgICAgIGxpc3RJdGVtQ2xhc3Nlcy5wdXNoKHRoaXMuY29uZmlnLmNsYXNzTmFtZVt0aGlzLmNvbmZpZy5jaGlsZEtleV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdEl0ZW0uYWRkQ2xhc3MobGlzdEl0ZW1DbGFzc2VzLmpvaW4oJyAnKSk7XG4gICAgICAgIGxpc3RJdGVtLmFwcGVuZChsaW5rKVxuICAgICAgICAgICAgLmF0dHIoJ2RhdGEtZmpzLWl0ZW0nLCBpdGVtW3RoaXMuY29uZmlnLml0ZW1LZXldKTtcblxuICAgICAgICBsaXN0SXRlbVswXS5faXRlbSA9IGl0ZW07XG5cbiAgICAgICAgcmV0dXJuIGxpc3RJdGVtO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhdGhCYXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcucGF0aEJhcikgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtcyA9IHRoaXMuY29udGFpbmVyLmZpbmQoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZS5hY3RpdmV9YCk7XG4gICAgICAgIGxldCBpdGVtS2V5cyA9ICcnO1xuICAgICAgICB0aGlzLnBhdGhCYXIuZW1wdHkoKTtcbiAgICAgICAgYWN0aXZlSXRlbXMuZWFjaCgoaW5kZXgsIGFjdGl2ZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhY3RpdmVJdGVtLl9pdGVtO1xuICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gKGluZGV4ICsgMSkgPT09IGFjdGl2ZUl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIGl0ZW1LZXlzICs9IGAvJHtpdGVtW3RoaXMuY29uZmlnLml0ZW1LZXldfWA7XG4gICAgICAgICAgICB0aGlzLnBhdGhCYXIuYXBwZW5kKGBcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFkY3J1bWItbm9kZSAke2l0ZW0uaWNvbn1cIiAke2l0ZW0udHlwZSA9PT0gJ2RpcicgfHwgaXRlbS5jaGlsZF9jb3VudCA+IDAgPyBgZGF0YS1icmVhZGNydW1iLW5vZGU9XCIke2l0ZW1LZXlzfVwiYCA6ICcnfT5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIke2l0ZW0uaWNvbn1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYi1ub2RlLW5hbWVcIj4keyQoJzxkaXYgLz4nKS50ZXh0KGl0ZW1bdGhpcy5jb25maWcubGFiZWxLZXldKS5odG1sKCl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAkeyFpc0xhc3QgPyAnPGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9pPicgOiAnJ31cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SWNvbih0eXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncm9vdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmYS1zaXRlbWFwJztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZmEtZmlsZS1vJztcbiAgICAgICAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnZmEtZm9sZGVyJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5WaWV3KGVsZW1lbnQsIGNvbnRhaW5lciwgcGFydGlhbCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQubGVuZ3RoIHx8ICFjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5oZWlnaHQoKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvcCA9ICQoZWxlbWVudCkub2Zmc2V0KCkudG9wIC0gY29udGFpbmVyLm9mZnNldCgpLnRvcDtcbiAgICAgICAgY29uc3QgZWxlbWVudEJvdHRvbSA9IGVsZW1lbnRUb3AgKyAkKGVsZW1lbnQpLmhlaWdodCgpO1xuXG4gICAgICAgIGNvbnN0IGlzVG90YWwgPSAoZWxlbWVudFRvcCA+PSAwICYmIGVsZW1lbnRCb3R0b20gPD0gY29udGFpbmVySGVpZ2h0KTtcbiAgICAgICAgY29uc3QgaXNQYXJ0aWFsID0gKChlbGVtZW50VG9wIDwgMCAmJiBlbGVtZW50Qm90dG9tID4gMCkgfHwgKGVsZW1lbnRUb3AgPiAwICYmIGVsZW1lbnRUb3AgPD0gY29udGFpbmVyLmhlaWdodCgpKSkgJiYgcGFydGlhbDtcblxuICAgICAgICByZXR1cm4gaXNUb3RhbCB8fCBpc1BhcnRpYWw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9WaWV3KGVsZW1lbnQsIGNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCB0b3AgPSBwYXJzZUludChjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLCAxMCk7XG4gICAgICAgIGNvbnN0IGJvdCA9IHBhcnNlSW50KGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sIDEwKTtcblxuICAgICAgICBjb25zdCBub3dfdG9wID0gcGFyc2VJbnQoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsIDEwKTtcbiAgICAgICAgY29uc3Qgbm93X2JvdCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLCAxMCk7XG5cbiAgICAgICAgbGV0IHNjcm9sbF9ieSA9IDA7XG4gICAgICAgIGlmIChub3dfdG9wIDwgdG9wKSB7XG4gICAgICAgICAgICBzY3JvbGxfYnkgPSAtKHRvcCAtIG5vd190b3ApO1xuICAgICAgICB9IGVsc2UgaWYgKG5vd19ib3QgPiBib3QpIHtcbiAgICAgICAgICAgIHNjcm9sbF9ieSA9IG5vd19ib3QgLSBib3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Nyb2xsX2J5ICE9PSAwKSB7XG4gICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wICs9IHNjcm9sbF9ieTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmluZGVyO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBGaW5kZXIgZnJvbSAnLi4vdXRpbHMvZmluZGVyJztcbmltcG9ydCB7IGdldEluaXRpYWxSb3V0ZSwgZ2V0U3RvcmUsIHNldEluaXRpYWxSb3V0ZSB9IGZyb20gJy4vaW5kZXgnO1xuLy8gaW1wb3J0IGdldEZpbHRlcnMgZnJvbSAnLi4vdXRpbHMvZ2V0LWZpbHRlcnMnO1xuXG5sZXQgWEhSVVVJRCA9IDA7XG5jb25zdCBHUkFWX0NPTkZJRyA9IHR5cGVvZiBnbG9iYWwuR3JhdkNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwuR3JhdkNvbmZpZyA6IGdsb2JhbC5HcmF2QWRtaW4uY29uZmlnO1xuXG5leHBvcnQgY29uc3QgSW5zdGFuY2VzID0ge307XG5cbmNvbnN0IGlzSW5WaWV3cG9ydCA9IChlbGVtKSA9PiB7XG4gICAgY29uc3QgYm91bmRpbmcgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRpdGxlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RpdGxlYmFyJyk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGl0bGViYXIgPyB0aXRsZWJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiAwO1xuICAgIHJldHVybiAoXG4gICAgICAgIGJvdW5kaW5nLnRvcCA+PSBvZmZzZXQgJiZcbiAgICAgICAgYm91bmRpbmcubGVmdCA+PSAwICYmXG4gICAgICAgIGJvdW5kaW5nLmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmXG4gICAgICAgIGJvdW5kaW5nLnJpZ2h0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBGbGV4UGFnZXMge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgZGF0YSkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9ICQoY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgY29uc3QgZGF0YUxvYWQgPSB0aGlzLmRhdGFMb2FkO1xuXG4gICAgICAgIHRoaXMuZmluZGVyID0gbmV3IEZpbmRlcihcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLFxuICAgICAgICAgICAgKHBhcmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUxvYWQuY2FsbCh0aGlzLCBwYXJlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWxLZXk6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFBhdGg6IGdldEluaXRpYWxSb3V0ZSgpLFxuICAgICAgICAgICAgICAgIGl0ZW1UcmlnZ2VyOiAnW2RhdGEtZmxleHBhZ2VzLWV4cGFuZF0nLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUl0ZW06IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZsZXhQYWdlcy5jcmVhdGVJdGVtKHRoaXMuY29uZmlnLCBpdGVtLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNyZWF0ZUl0ZW1Db250ZW50OiBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGbGV4UGFnZXMuY3JlYXRlSXRlbUNvbnRlbnQodGhpcy5jb25maWcsIGl0ZW0sIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmZpbmRlci4kZW1pdHRlci5vbignbGVhZi1zZWxlY3RlZCcsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzZXRJbml0aWFsUm91dGUoe1xuICAgICAgICAgICAgICAgIHJvdXRlOiBpdGVtLnJvdXRlLnJhd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmluZGVyLiRlbWl0dGVyLm9uKCdpbnRlcmlvci1zZWxlY3RlZCcsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzZXRJbml0aWFsUm91dGUoe1xuICAgICAgICAgICAgICAgIHJvdXRlOiBpdGVtLnJvdXRlLnJhd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMuZmluZGVyLiRlbWl0dGVyLm9uKCdsZWFmLXNlbGVjdGVkJywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZCcsIGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5maW5kZXIuZW1pdCgnY3JlYXRlLWNvbHVtbicsICgpID0+IHRoaXMuY3JlYXRlU2ltcGxlQ29sdW1uKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maW5kZXIuJGVtaXR0ZXIub24oJ2l0ZW0tc2VsZWN0ZWQnLCAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgIC8vIGZvciBmdXR1cmUgdXNlIG9ubHkgLSBjcmVhdGUgY29sdW1uLWNhcmQgY3JlYXRpb24gZm9yIGZpbGUgd2l0aCBkZXRhaWxzIGxpa2UgaW4gbWFjT1MgZmluZGVyXG4gICAgICAgICAgICAvLyB0aGlzLmZpbmRlci4kZW1pdHRlcignY3JlYXRlLWNvbHVtbicsICgpID0+IHRoaXMuY3JlYXRlU2ltcGxlQ29sdW1uKHNlbGVjdGVkKSk7XG4gICAgICAgIH0pOyAqL1xuXG4gICAgICAgIHRoaXMuZmluZGVyLiRlbWl0dGVyLm9uKCdjb2x1bW4tY3JlYXRlZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyWzBdLnNjcm9sbExlZnQgPSB0aGlzLmNvbnRhaW5lclswXS5zY3JvbGxXaWR0aCAtIHRoaXMuY29udGFpbmVyWzBdLmNsaWVudFdpZHRoO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlSXRlbShjb25maWcsIGl0ZW0sIGZpbmRlcikge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9ICQoJzxsaSAvPicpO1xuICAgICAgICBjb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBbY29uZmlnLmNsYXNzTmFtZS5pdGVtXTtcbiAgICAgICAgLy8gY29uc3QgaHJlZiA9IGAke0dSQVZfQ09ORklHLmN1cnJlbnRfdXJsfS8ke2l0ZW0ucm91dGUucmF3fWAucmVwbGFjZSgnLy8nLCAnLycpO1xuICAgICAgICBjb25zdCBsaW5rID0gJCgnPGRpdiBjbGFzcz1cImZqcy1pdGVtLXdyYXBwZXJcIiAvPicpO1xuICAgICAgICBjb25zdCBjcmVhdGVJdGVtQ29udGVudCA9IGNvbmZpZy5jcmVhdGVJdGVtQ29udGVudCB8fCBmaW5kZXIuY3JlYXRlSXRlbUNvbnRlbnQ7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlSXRlbUNvbnRlbnQuY2FsbCh0aGlzLCBpdGVtKTtcbiAgICAgICAgbGluay5hcHBlbmQoZnJhZ21lbnQpXG4gICAgICAgIC8vIC5hdHRyKCdocmVmJywgaHJlZilcbiAgICAgICAgICAgIC5hdHRyKCd0YWJpbmRleCcsIC0xKTtcblxuICAgICAgICBpZiAoaXRlbS51cmwpIHtcbiAgICAgICAgICAgIGxpbmsuYXR0cignaHJlZicsIGl0ZW0udXJsKTtcbiAgICAgICAgICAgIGxpc3RJdGVtQ2xhc3Nlcy5wdXNoKGl0ZW0uY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtW2NvbmZpZy5jaGlsZEtleV0pIHtcbiAgICAgICAgICAgIGxpc3RJdGVtQ2xhc3Nlcy5wdXNoKGNvbmZpZy5jbGFzc05hbWVbY29uZmlnLmNoaWxkS2V5XSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5maWx0ZXJzX2hpdCkge1xuICAgICAgICAgICAgbGlzdEl0ZW1DbGFzc2VzLnB1c2goJ2ZpbHRlcnMtaGl0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0SXRlbS5hZGRDbGFzcyhsaXN0SXRlbUNsYXNzZXMuam9pbignICcpKTtcbiAgICAgICAgbGlzdEl0ZW0uYXBwZW5kKGxpbmspXG4gICAgICAgICAgICAuYXR0cignZGF0YS1manMtaXRlbScsIGl0ZW1bY29uZmlnLml0ZW1LZXldKTtcblxuICAgICAgICBsaXN0SXRlbVswXS5faXRlbSA9IGl0ZW07XG5cbiAgICAgICAgcmV0dXJuIGxpc3RJdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVJdGVtQ29udGVudChjb25maWcsIGl0ZW0pIHtcbiAgICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3Qgcm91dGUgPSBgJHtHUkFWX0NPTkZJRy5jdXJyZW50X3VybH0vJHtpdGVtLnJvdXRlLnJhd31gLnJlcGxhY2UoJy8vJywgJy8nKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSAkKCc8ZGl2IGNsYXNzPVwiZmpzLXRpdGxlXCIgLz4nKTtcbiAgICAgICAgY29uc3QgbGluayA9ICQoYDxhIGhyZWY9XCIke3JvdXRlfVwiIC8+YCk7XG4gICAgICAgIGNvbnN0IGljb24gPSAkKGA8c3BhbiBjbGFzcz1cImZqcy1pY29uICR7aXRlbS5pY29ufSBiYWRnZS0ke2l0ZW0uZXh0cmFzICYmIGl0ZW0uZXh0cmFzLnB1Ymxpc2hlZCA/ICdwdWJsaXNoZWQnIDogJ3VucHVibGlzaGVkJ31cIiAvPmApO1xuXG4gICAgICAgIGlmIChpdGVtLmV4dHJhcyAmJiBpdGVtLmV4dHJhcy5sYW5nKSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gJyc7XG4gICAgICAgICAgICBpZiAoaXRlbS5leHRyYXMudHJhbnNsYXRlZCkge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICd0cmFuc2xhdGVkJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uZXh0cmFzLmxhbmcgPT09ICduL2EnKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gJ25vdC1hdmFpbGFibGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYW5nID0gJChgPHNwYW4gY2xhc3M9XCJiYWRnZS1sYW5nICR7c3RhdHVzfVwiPiR7aXRlbS5leHRyYXMubGFuZ308L3NwYW4+YCk7XG4gICAgICAgICAgICBsYW5nLmFwcGVuZFRvKGljb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uZXh0cmFzICYmIGl0ZW0uZXh0cmFzICYmIChpdGVtLmV4dHJhcy5wdWJsaXNoZWRfZGF0ZSB8fCBpdGVtLmV4dHJhcy51bnB1Ymxpc2hlZF9kYXRlKSkge1xuICAgICAgICAgICAgY29uc3QgY2xvY2sgPSAkKCc8c3BhbiBjbGFzcz1cImJhZGdlLWNsb2NrXCIgLz4nKTtcbiAgICAgICAgICAgIGNsb2NrLmFwcGVuZFRvKGljb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5mbyA9ICQoYDxzcGFuIGNsYXNzPVwiZmpzLWluZm9cIj48YiB0aXRsZT1cIiR7aXRlbS50aXRsZX1cIj4ke2l0ZW0udGl0bGV9PC9iPiA8ZW0gdGl0bGU9XCIke2l0ZW0ucm91dGUuZGlzcGxheX1cIj4ke2l0ZW0ucm91dGUuZGlzcGxheX08L2VtPjwvc3Bhbj5gKTtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9ICQoJzxzcGFuIGNsYXNzPVwiZmpzLWFjdGlvbnNcIiAvPicpO1xuXG4gICAgICAgIGxldCBkb3Rkb3Rkb3QgPSBudWxsO1xuICAgICAgICBpZiAoaXRlbS5leHRyYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IExBTkdfVVJMID0gJCgnW2RhdGEtbGFuZy11cmxdJykuZGF0YSgnbGFuZ1VybCcpO1xuICAgICAgICAgICAgZG90ZG90ZG90ID0gJCgnPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiIGRhdGEtZmxleHBhZ2VzLWRvdHgzIGRhdGEtZmxleHBhZ2VzLXByZXZlbnQ+PGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCI+PGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12IGZqcy1hY3Rpb24tdG9nZ2xlXCI+PC9pPjwvYnV0dG9uPjwvZGl2PicpO1xuICAgICAgICAgICAgZG90ZG90ZG90Lm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZG90ZG90ZG90LmZpbmQoJy5kcm9wZG93bi1tZW51JykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWdzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsYW5ncyA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXh0cmFzLnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdzICs9IGA8c3BhbiBjbGFzcz1cImJhZGdlIHRhZyB0YWctJHt0YWd9XCI+JHt0YWd9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGl0ZW0uZXh0cmFzLmxhbmdzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2goKGxhbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0cmFuc2xhdGlvbnNbbGFuZ107XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ncyArPSBgPGEgY2xhc3M9XCJsYW5nXCIgaHJlZj1cIiR7TEFOR19VUkwucmVwbGFjZSgvJUxBTkclL2csIGxhbmcpLnJlcGxhY2UoJy8vJywgJy8nKX0ke2l0ZW0ucm91dGUucmF3fVwiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgbGFuZy0ke2xhbmcgPyBsYW5nIDogJ2RlZmF1bHQnfSBsYW5nLSR7dHJhbnNsYXRlZCA/ICd0cmFuc2xhdGVkJyA6ICdub24tdHJhbnNsYXRlZCd9XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1jaXJjbGVcIj48L2k+ICR7bGFuZyA/IGxhbmcgOiAnZGVmYXVsdCd9PC9zcGFuPjwvYT5gO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5QcmV2aWV3ID0gaXRlbS5leHRyYXMuYWN0aW9ucy5pbmNsdWRlcygncHJldmlldycpICYmICghKGl0ZW0uZXh0cmFzLnRhZ3MuaW5jbHVkZXMoJ25vbi1yb3V0YWJsZScpIHx8IGl0ZW0uZXh0cmFzLnRhZ3MuaW5jbHVkZXMoJ3VucHVibGlzaGVkJykpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuRWRpdCA9IGl0ZW0uZXh0cmFzLmFjdGlvbnMuaW5jbHVkZXMoJ2VkaXQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQ29weSA9IGl0ZW0uZXh0cmFzLmFjdGlvbnMuaW5jbHVkZXMoJ2NvcHknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuTW92ZSA9IGZhbHNlOyAvLyBpdGVtLmV4dHJhcy5hY3Rpb25zLmluY2x1ZGVzKCdtb3ZlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGl0ZW0uZXh0cmFzLmFjdGlvbnMuaW5jbHVkZXMoJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bCA9ICQoYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1iYXJcIj5cbiAgICAgICAgJHtjYW5QcmV2aWV3ID8gYDxhIGhyZWY9XCIke3JvdXRlfS86cHJldmlld1wiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHRpdGxlPVwiUHJldmlld1wiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZXllXCI+PC9pPjwvYT5gIDogJyd9XG4gICAgICAgICR7Y2FuRWRpdCA/IGA8YSBocmVmPVwiJHtyb3V0ZX1cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0aXRsZT1cIkVkaXRcIj48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLXBlbmNpbFwiPjwvaT48L2E+YCA6ICcnfVxuICAgICAgICAke2NhbkNvcHkgPyBgPGEgaHJlZj1cIiR7cm91dGV9L3Rhc2s6Y29weS9hZG1pbi1ub25jZToke0dSQVZfQ09ORklHLmFkbWluX25vbmNlfVwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHRpdGxlPVwiRHVwbGljYXRlXCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1jb3B5XCI+PC9pPjwvYT5gIDogJyd9XG4gICAgICAgICR7Y2FuTW92ZSA/ICc8YSBocmVmPVwiI1wiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHRpdGxlPVwiTW92ZSAoY29taW5nIHNvb24pXCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1hcnJvd3NcIj48L2k+PC9hPicgOiAnJ31cbiAgICAgICAgJHtjYW5EZWxldGUgPyBgPGEgaHJlZj1cIiNkZWxldGVcIiBkYXRhLXJlbW9kYWwtdGFyZ2V0PVwiZGVsZXRlXCIgZGF0YS1kZWxldGUtdXJsPVwiJHtyb3V0ZX0vdGFzazpkZWxldGUvYWRtaW4tbm9uY2U6JHtHUkFWX0NPTkZJRy5hZG1pbl9ub25jZX1cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZGFuZ2VyXCIgdGl0bGU9XCJEZWxldGVcIj48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLXRyYXNoLW9cIj48L2k+PC9hPmAgOiAnJ31cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0YWdzXCI+JHt0YWdzfTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XG4gICAgJHtpdGVtLmV4dHJhcy5sYW5nIHx8IHR5cGVvZiBpdGVtLmV4dHJhcy5sYW5ncyAhPT0gJ3VuZGVmaW5lZCcgPyBgPGRpdiBjbGFzcz1cImxhbmdzXCI+JHtsYW5nc308L2Rpdj48ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PmAgOiAnJ31cbiAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mb3NcIj5cbiAgICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Yj5yb3V0ZTwvYj48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+JHtpdGVtLnJvdXRlLmRpc3BsYXl9PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxiPnRlbXBsYXRlPC9iPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD4ke2l0ZW0uZXh0cmFzLnRlbXBsYXRlfTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAke2l0ZW0uZXh0cmFzICYmIGl0ZW0uZXh0cmFzLnB1Ymxpc2hlZF9kYXRlID8gYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxiPnB1Ymxpc2g8L2I+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPiR7aXRlbS5leHRyYXMucHVibGlzaGVkX2RhdGV9PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIGAgOiAnJ31cbiAgICAgICAgICAgICAgICAke2l0ZW0uZXh0cmFzICYmIGl0ZW0uZXh0cmFzLnVucHVibGlzaGVkX2RhdGUgPyBgXG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+dW5wdWJsaXNoPC9iPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD4ke2l0ZW0uZXh0cmFzLnVucHVibGlzaGVkX2RhdGV9PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIGAgOiAnJ31cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Yj5tb2RpZmllZDwvYj48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+JHtpdGVtLm1vZGlmaWVkfTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgICAgIHVsLmFwcGVuZFRvKGRvdGRvdGRvdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5jaGlsZF9jb3VudCkge1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gJCgnPGJ1dHRvbiBjbGFzcz1cImZqcy1jaGlsZHJlblwiIGRhdGEtZmxleHBhZ2VzLWV4cGFuZCBkYXRhLWZsZXhwYWdlcy1wcmV2ZW50IC8+Jyk7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9ICQoYDxzcGFuIGNsYXNzPVwiYmFkZ2UgY2hpbGQtY291bnRcIj4ke3R5cGVvZiBpdGVtLmNvdW50ICE9PSAndW5kZWZpbmVkJyA/IGAke2l0ZW0uY291bnR9IC8gYCA6ICcnfSR7aXRlbS5jaGlsZF9jb3VudH08L3NwYW4+YCk7XG4gICAgICAgICAgICBjb25zdCBhcnJvdyA9ICQoJzxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodFwiPjwvaT4nKTtcbiAgICAgICAgICAgIGNvdW50LmFwcGVuZFRvKGJ1dHRvbik7XG4gICAgICAgICAgICBhcnJvdy5hcHBlbmRUbyhidXR0b24pO1xuICAgICAgICAgICAgYnV0dG9uLmFwcGVuZFRvKGFjdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWNvbi5hcHBlbmRUbyh0aXRsZSk7XG4gICAgICAgIGRvdGRvdGRvdC5hcHBlbmRUbyh0aXRsZSk7XG4gICAgICAgIGxpbmsuYXBwZW5kVG8odGl0bGUpO1xuICAgICAgICBpbmZvLmFwcGVuZFRvKGxpbmspO1xuXG4gICAgICAgIHRpdGxlLmFwcGVuZFRvKGZyYWcpO1xuICAgICAgICBhY3Rpb25zLmFwcGVuZFRvKGZyYWcpO1xuXG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVMb2FkaW5nQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gJChgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmpzLWNvbCBsZWFmLWNvbFwiIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlbjtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVhZi1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXYtbG9hZGluZ1wiPjxkaXYgY2xhc3M9XCJncmF2LWxvYWRlclwiPkxvYWRpbmcuLi48L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlRXJyb3JDb2x1bW4oZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICQoYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZqcy1jb2wgbGVhZi1jb2xcIiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlYWYtcm93IGVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZncgZmEtd2FybmluZ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JHtlcnJvcn08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2ltcGxlQ29sdW1uKGl0ZW0pIHt9XG5cbiAgICBkYXRhTG9hZChwYXJlbnQsIGNhbGxiYWNrLCBmaWx0ZXJzID0gZ2V0U3RvcmUoKS5maWx0ZXJzIHx8IHt9KSB7XG4gICAgICAgIC8qIGlmICghcGFyZW50ICYmIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyZW50ID0geyBjaGlsZF9jb3VudDogMSwgcm91dGU6IHsgcmF3OiAnJyB9IH07XG4gICAgICAgIH0qL1xuXG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50LmNoaWxkX2NvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBVVUlEID0gKytYSFJVVUlEO1xuICAgICAgICB0aGlzLnN0YXJ0TG9hZGVyKCk7XG5cbiAgICAgICAgY29uc3Qgd2l0aEZpbHRlcnMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPyB7IC4uLmZpbHRlcnMgfSA6IHt9O1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IGAke0dSQVZfQ09ORklHLmN1cnJlbnRfdXJsfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgICAgICAgICByb3V0ZTogYjY0X2VuY29kZV91bmljb2RlKHBhcmVudC5yb3V0ZS5yYXcpLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2xpc3RMZXZlbCdcbiAgICAgICAgICAgIH0sIHdpdGhGaWx0ZXJzKSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcExvYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRlci4kZW1pdHRlci5lbWl0KCdjcmVhdGUtY29sdW1uJywgRmxleFBhZ2VzLmNyZWF0ZUVycm9yQ29sdW1uKHJlc3BvbnNlLm1lc3NhZ2UpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdGFsZSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgaWYgKFVVSUQgIT09IFhIUlVVSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhcnRMb2FkZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5maW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nSW5kaWNhdG9yID0gRmxleFBhZ2VzLmNyZWF0ZUxvYWRpbmdDb2x1bW4oKTtcbiAgICAgICAgdGhpcy5maW5kZXIuJGVtaXR0ZXIuZW1pdCgnY3JlYXRlLWNvbHVtbicsIHRoaXMubG9hZGluZ0luZGljYXRvclswXSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0luZGljYXRvcjtcbiAgICB9XG5cbiAgICBzdG9wTG9hZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nSW5kaWNhdG9yICYmIHRoaXMubG9hZGluZ0luZGljYXRvci5yZW1vdmUoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBiNjRfZW5jb2RlX3VuaWNvZGUgPSAoc3RyKSA9PiB7XG4gICAgcmV0dXJuIGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxcbiAgICAgICAgZnVuY3Rpb24gdG9Tb2xpZEJ5dGVzKG1hdGNoLCBwMSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoJzB4JyArIHAxKTtcbiAgICAgICAgfSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGI2NF9kZWNvZGVfdW5pY29kZSA9IChzdHIpID0+IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xuICAgIH0pLmpvaW4oJycpKTtcbn07XG5cbmNvbnN0IHVwZGF0ZVBvc2l0aW9uID0gKHNjcm9sbGluZ0NvbHVtbiwgcGFnZUNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBncm91cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYWdlcy1jb2x1bW5zIC5idXR0b24tZ3JvdXAub3BlbicpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgICBjb25zdCBidXR0b24gPSBncm91cC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScpO1xuICAgICAgICBjb25zdCBkcm9wZG93biA9IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi1tZW51Jyk7XG4gICAgICAgIGNvbnN0IGJ1dHRvbkluVmlldyA9IGlzSW5WaWV3cG9ydChidXR0b24pO1xuXG4gICAgICAgIGlmIChidXR0b24gJiYgZHJvcGRvd24pIHtcbiAgICAgICAgICAgIGlmICghYnV0dG9uSW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgJChkcm9wZG93bikuY3NzKHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKGRyb3Bkb3duKS5jc3MoeyBkaXNwbGF5OiAnaW5oZXJpdCcgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b25DbGllbnRSZWN0ID0gYnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duQ2xpZW50UmVjdCA9IGRyb3Bkb3duLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9ICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGJ1dHRvbkNsaWVudFJlY3QuaGVpZ2h0ICsgYnV0dG9uQ2xpZW50UmVjdC50b3AgKyBzY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSBidXR0b25DbGllbnRSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0OyAvLyAgLSBkcm9wZG93bkNsaWVudFJlY3Qud2lkdGhcblxuICAgICAgICAgICAgICAgIGlmIChsZWZ0ICsgZHJvcGRvd25DbGllbnRSZWN0LndpZHRoID4gd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZHJvcGRvd25DbGllbnRSZWN0LndpZHRoIC0gNTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkKGRyb3Bkb3duKS5jc3MoeyB0b3AsIGxlZnQgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENsaWVudFJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgodG9wIDwgdGFyZ2V0Q2xpZW50UmVjdC50b3AgKyBzY3JvbGxUb3ApIHx8ICh0b3AgPiB0YXJnZXRDbGllbnRSZWN0LnRvcCArIHNjcm9sbFRvcCArIHRhcmdldENsaWVudFJlY3QuaGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChkcm9wZG93bikuY3NzKHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2VDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENsaWVudFJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgobGVmdCA8IHRhcmdldENsaWVudFJlY3QubGVmdCArIHNjcm9sbExlZnQpIHx8IChsZWZ0ID4gdGFyZ2V0Q2xpZW50UmVjdC5sZWZ0ICsgc2Nyb2xsTGVmdCArIHRhcmdldENsaWVudFJlY3Qud2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGRyb3Bkb3duKS5jc3MoeyBkaXNwbGF5OiAnbm9uZScgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCBjbG9zZUdob3N0RHJvcGRvd25zID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5lZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwYWdlcy1jb2x1bW5zIC5idXR0b24tZ3JvdXA6bm90KC5vcGVuKSAuZHJvcGRvd24tbWVudScpIHx8IFtdO1xuICAgIG9wZW5lZC5mb3JFYWNoKChpdGVtKSA9PiB7IGl0ZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSk7XG59O1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ICYmICFldmVudC50YXJnZXQuY2xhc3NMaXN0KSB7IHJldHVybiB0cnVlOyB9XG4gICAgY29uc3Qgc2Nyb2xsaW5nRG9jdW1lbnQgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdnbS1zY3JvbGwtdmlldycpIHx8IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbnRlbnQtd3JhcHBlcicpO1xuICAgIGNvbnN0IHNjcm9sbGluZ0NvbHVtbiA9IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zqcy1jb2wnKTtcbiAgICBjb25zdCBwYWdlQ29sdW1ucyA9IGV2ZW50LnRhcmdldC5pZCA9PT0gJ3BhZ2VzLWNvbHVtbnMnO1xuXG4gICAgaWYgKHNjcm9sbGluZ0RvY3VtZW50IHx8IHNjcm9sbGluZ0NvbHVtbiB8fCBwYWdlQ29sdW1ucykge1xuICAgICAgICBjbG9zZUdob3N0RHJvcGRvd25zKCk7XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uKHNjcm9sbGluZ0NvbHVtbiwgcGFnZUNvbHVtbnMpO1xuICAgIH1cbn0sIHRydWUpO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgIGNsb3NlR2hvc3REcm9wZG93bnMoKTtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmRhdGFzZXQudG9nZ2xlIHx8IGV2ZW50LnRhcmdldC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNjcm9sbGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdtLXNjcm9sbC12aWV3Jyk7XG5cbiAgICAgICAgKChjb250YWluZXJTY3JvbGxlci5sZW5ndGggPyBjb250YWluZXJTY3JvbGxlciA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb250ZW50LXdyYXBwZXInKSkgfHwgW10pLmZvckVhY2goKHNjcm9sbCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsRXZlbnQgPSBuZXcgRXZlbnQoJ3Njcm9sbCcpO1xuICAgICAgICAgICAgc2Nyb2xsLmRpc3BhdGNoRXZlbnQoc2Nyb2xsRXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnRhcmdldC5jbGFzc0xpc3QgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZHJvcGRvd24tbWVudScpKSB8fCAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bi1tZW51JykpKSB7XG4gICAgICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5kcm9wZG93bi1tZW51JykuZmluZChldmVudC50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8vIFByZXZlbnQgZHJvcGRvd25zIGZyb20gY2xvc2luZyB3aGVuIGNsaWNraW5nIHdpdGhpblxuJChkb2N1bWVudCkub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgJy5manMtaXRlbS13cmFwcGVyIC5kcm9wZG93bi1tZW51JywgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59KTtcbiIsImZ1bmN0aW9uIGhhc093bihvYmosIGtleSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn0gLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycy5cblxuXG5mdW5jdGlvbiBlc2NhcGVSZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14kfFtcXF0oKXt9XFxcXC1dL2csICdcXFxcJCYnKTtcbn0gLy8gUmV0dXJuIGEgZnV0dXJlIGRhdGUgYnkgdGhlIGdpdmVuIHN0cmluZy5cblxuXG5mdW5jdGlvbiBjb21wdXRlRXhwaXJlcyhzdHIpIHtcbiAgdmFyIGxhc3RDaCA9IHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpO1xuICB2YXIgdmFsdWUgPSBwYXJzZUludChzdHIsIDEwKTtcbiAgdmFyIGV4cGlyZXMgPSBuZXcgRGF0ZSgpO1xuXG4gIHN3aXRjaCAobGFzdENoKSB7XG4gICAgY2FzZSAnWSc6XG4gICAgICBleHBpcmVzLnNldEZ1bGxZZWFyKGV4cGlyZXMuZ2V0RnVsbFllYXIoKSArIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnTSc6XG4gICAgICBleHBpcmVzLnNldE1vbnRoKGV4cGlyZXMuZ2V0TW9udGgoKSArIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnRCc6XG4gICAgICBleHBpcmVzLnNldERhdGUoZXhwaXJlcy5nZXREYXRlKCkgKyB2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2gnOlxuICAgICAgZXhwaXJlcy5zZXRIb3VycyhleHBpcmVzLmdldEhvdXJzKCkgKyB2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ20nOlxuICAgICAgZXhwaXJlcy5zZXRNaW51dGVzKGV4cGlyZXMuZ2V0TWludXRlcygpICsgdmFsdWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzJzpcbiAgICAgIGV4cGlyZXMuc2V0U2Vjb25kcyhleHBpcmVzLmdldFNlY29uZHMoKSArIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGV4cGlyZXMgPSBuZXcgRGF0ZShzdHIpO1xuICB9XG5cbiAgcmV0dXJuIGV4cGlyZXM7XG59IC8vIENvbnZlcnQgYW4gb2JqZWN0IHRvIGEgY29va2llIG9wdGlvbiBzdHJpbmcuXG5cblxuZnVuY3Rpb24gY29udmVydChvcHRzKSB7XG4gIHZhciByZXMgPSAnJzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgZm9yICh2YXIga2V5IGluIG9wdHMpIHtcbiAgICBpZiAoaGFzT3duKG9wdHMsIGtleSkpIHtcbiAgICAgIGlmICgvXmV4cGlyZXMkL2kudGVzdChrZXkpKSB7XG4gICAgICAgIHZhciBleHBpcmVzID0gb3B0c1trZXldO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBleHBpcmVzICs9IHR5cGVvZiBleHBpcmVzID09PSAnbnVtYmVyJyA/ICdEJyA6ICcnO1xuICAgICAgICAgIGV4cGlyZXMgPSBjb21wdXRlRXhwaXJlcyhleHBpcmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyArPSBcIjtcIiArIGtleSArIFwiPVwiICsgZXhwaXJlcy50b1VUQ1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmICgvXnNlY3VyZSQvLnRlc3Qoa2V5KSkge1xuICAgICAgICBpZiAob3B0c1trZXldKSB7XG4gICAgICAgICAgcmVzICs9IFwiO1wiICsga2V5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMgKz0gXCI7XCIgKyBrZXkgKyBcIj1cIiArIG9wdHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWhhc093bihvcHRzLCAncGF0aCcpKSB7XG4gICAgcmVzICs9ICc7cGF0aD0vJztcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCB7IGhhc093biwgZXNjYXBlUmUsIGNvbXB1dGVFeHBpcmVzLCBjb252ZXJ0IH07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuaW1wb3J0IHsgZXNjYXBlUmUsIGNvbnZlcnQgfSBmcm9tICcuL3V0aWwnOyAvLyBDaGVjayBpZiB0aGUgYnJvd3NlciBjb29raWUgaXMgZW5hYmxlZC5cblxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICB2YXIga2V5ID0gJ0BrZXlAJztcbiAgdmFyIHZhbHVlID0gJzEnO1xuICB2YXIgcmUgPSBuZXcgUmVnRXhwKFwiKD86Xnw7IClcIiArIGtleSArIFwiPVwiICsgdmFsdWUgKyBcIig/Ojt8JClcIik7XG4gIGRvY3VtZW50LmNvb2tpZSA9IGtleSArIFwiPVwiICsgdmFsdWUgKyBcIjtwYXRoPS9cIjtcbiAgdmFyIGVuYWJsZWQgPSByZS50ZXN0KGRvY3VtZW50LmNvb2tpZSk7XG5cbiAgaWYgKGVuYWJsZWQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICByZW1vdmUoa2V5KTtcbiAgfVxuXG4gIHJldHVybiBlbmFibGVkO1xufSAvLyBHZXQgdGhlIGNvb2tpZSB2YWx1ZSBieSBrZXkuXG5cblxuZnVuY3Rpb24gZ2V0KGtleSwgZGVjb2Rlcikge1xuICBpZiAoZGVjb2RlciA9PT0gdm9pZCAwKSB7XG4gICAgZGVjb2RlciA9IGRlY29kZVVSSUNvbXBvbmVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJyB8fCAha2V5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcmVLZXkgPSBuZXcgUmVnRXhwKFwiKD86Xnw7IClcIiArIGVzY2FwZVJlKGtleSkgKyBcIig/Oj0oW147XSopKT8oPzo7fCQpXCIpO1xuICB2YXIgbWF0Y2ggPSByZUtleS5leGVjKGRvY3VtZW50LmNvb2tpZSk7XG5cbiAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIGRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBkZWNvZGVyKG1hdGNoWzFdKSA6IG1hdGNoWzFdO1xufSAvLyBUaGUgYWxsIGNvb2tpZXNcblxuXG5mdW5jdGlvbiBnZXRBbGwoZGVjb2Rlcikge1xuICBpZiAoZGVjb2RlciA9PT0gdm9pZCAwKSB7XG4gICAgZGVjb2RlciA9IGRlY29kZVVSSUNvbXBvbmVudDtcbiAgfVxuXG4gIHZhciByZUtleSA9IC8oPzpefDsgKShbXj1dKz8pKD86PShbXjtdKikpPyg/Ojt8JCkvZztcbiAgdmFyIGNvb2tpZXMgPSB7fTtcbiAgdmFyIG1hdGNoO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG4gIHdoaWxlIChtYXRjaCA9IHJlS2V5LmV4ZWMoZG9jdW1lbnQuY29va2llKSkge1xuICAgIHJlS2V5Lmxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2gubGVuZ3RoIC0gMTtcbiAgICBjb29raWVzW21hdGNoWzFdXSA9IHR5cGVvZiBkZWNvZGVyID09PSAnZnVuY3Rpb24nID8gZGVjb2RlcihtYXRjaFsyXSkgOiBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiBjb29raWVzO1xufSAvLyBTZXQgYSBjb29raWUuXG5cblxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUsIGVuY29kZXIsIG9wdGlvbnMpIHtcbiAgaWYgKGVuY29kZXIgPT09IHZvaWQgMCkge1xuICAgIGVuY29kZXIgPSBlbmNvZGVVUklDb21wb25lbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuY29kZXIgPT09ICdvYmplY3QnICYmIGVuY29kZXIgIT09IG51bGwpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICAgIG9wdGlvbnMgPSBlbmNvZGVyO1xuICAgIGVuY29kZXIgPSBlbmNvZGVVUklDb21wb25lbnQ7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICB9XG5cbiAgdmFyIGF0dHJzU3RyID0gY29udmVydChvcHRpb25zIHx8IHt9KTtcbiAgdmFyIHZhbHVlU3RyID0gdHlwZW9mIGVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBlbmNvZGVyKHZhbHVlKSA6IHZhbHVlO1xuICB2YXIgbmV3Q29va2llID0ga2V5ICsgXCI9XCIgKyB2YWx1ZVN0ciArIGF0dHJzU3RyO1xuICBkb2N1bWVudC5jb29raWUgPSBuZXdDb29raWU7XG59IC8vIFJlbW92ZSBhIGNvb2tpZSBieSB0aGUgc3BlY2lmaWVkIGtleS5cblxuXG5mdW5jdGlvbiByZW1vdmUoa2V5LCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0ge1xuICAgIGV4cGlyZXM6IC0xXG4gIH07XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRzID0gX2V4dGVuZHMoe30sIG9wdGlvbnMsIG9wdHMpO1xuICB9XG5cbiAgcmV0dXJuIHNldChrZXksICdhJywgb3B0cyk7XG59IC8vIEdldCB0aGUgY29va2llJ3MgdmFsdWUgd2l0aG91dCBkZWNvZGluZy5cblxuXG5mdW5jdGlvbiBnZXRSYXcoa2V5KSB7XG4gIHJldHVybiBnZXQoa2V5LCBudWxsKTtcbn0gLy8gU2V0IGEgY29va2llIHdpdGhvdXQgZW5jb2RpbmcgdGhlIHZhbHVlLlxuXG5cbmZ1bmN0aW9uIHNldFJhdyhrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIHJldHVybiBzZXQoa2V5LCB2YWx1ZSwgbnVsbCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCB7IGlzRW5hYmxlZCwgZ2V0LCBnZXRBbGwsIHNldCwgZ2V0UmF3LCBzZXRSYXcsIHJlbW92ZSwgaXNFbmFibGVkIGFzIGlzQ29va2llRW5hYmxlZCwgZ2V0IGFzIGdldENvb2tpZSwgZ2V0QWxsIGFzIGdldEFsbENvb2tpZXMsIHNldCBhcyBzZXRDb29raWUsIGdldFJhdyBhcyBnZXRSYXdDb29raWUsIHNldFJhdyBhcyBzZXRSYXdDb29raWUsIHJlbW92ZSBhcyByZW1vdmVDb29raWUgfTsiLCJleHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3BhZ2VzLWZpbHRlcnMgaW5wdXRbbmFtZV0nKTtcbiAgICBjb25zdCBmaWx0ZXJzID0ge307XG4gICAgY29uc3QgdHJhY2tNdWx0aSA9IFtdO1xuXG4gICAgaW5wdXRzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuaW5kZXRlcm1pbmF0ZSB8fCBmaWx0ZXIuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIubmFtZS5tYXRjaCgvXFxbXSQvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gZmlsdGVyLm5hbWUucmVwbGFjZSgvXFxbXSQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1tuYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmFja011bHRpLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFja011bHRpLnB1c2gobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzW25hbWVdLnB1c2goZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzW2ZpbHRlci5uYW1lXSA9IGZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgICAgICBmaWx0ZXJzW2ZpbHRlci5uYW1lXSA9IGZpbHRlci52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJhY2tNdWx0aS5mb3JFYWNoKChtdWx0aSkgPT4ge1xuICAgICAgICBmaWx0ZXJzW211bHRpXSA9IGZpbHRlcnNbbXVsdGldLmpvaW4oJywnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWx0ZXJzO1xufTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgeyBiNjRfZGVjb2RlX3VuaWNvZGUsIGI2NF9lbmNvZGVfdW5pY29kZSwgRmxleFBhZ2VzIH0gZnJvbSAnLi9maW5kZXInO1xuaW1wb3J0IHsgaXNFbmFibGVkLCBnZXRDb29raWUsIHNldENvb2tpZSB9IGZyb20gJ3RpbnktY29va2llJztcbmltcG9ydCBnZXRGaWx0ZXJzIGZyb20gJy4uL3V0aWxzL2dldC1maWx0ZXJzJztcblxuY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BhZ2VzLWNvbnRlbnQtd3JhcHBlcicpO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcmUgPSAoKSA9PiB7XG4gICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBKU09OLnBhcnNlKGI2NF9kZWNvZGVfdW5pY29kZShnZXRDb29raWUoJ2dyYXYtYWRtaW4tZmxleHBhZ2VzJykgfHwgJ2UzMD0nKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0U3RvcmUgPSAoc3RvcmUgPSB7fSwgb3B0aW9ucyA9IHsgZXhwaXJlczogJzFZJywgc2FtZXNpdGU6ICdMYXgnIH0pID0+IHtcbiAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldENvb2tpZSgnZ3Jhdi1hZG1pbi1mbGV4cGFnZXMnLCBiNjRfZW5jb2RlX3VuaWNvZGUoSlNPTi5zdHJpbmdpZnkoc3RvcmUpKSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW5pdGlhbFJvdXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IGdldFN0b3JlKCk7XG4gICAgcmV0dXJuIHBhcnNlZC5yb3V0ZSB8fCAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJbml0aWFsUm91dGUgPSAoeyByb3V0ZSA9ICcnLCBmaWx0ZXJzID0gZ2V0U3RvcmUoKS5maWx0ZXJzIHx8IHt9LCBvcHRpb25zID0geyBleHBpcmVzOiAnMVknIH19ID0ge30pID0+IHtcbiAgICByZXR1cm4gc2V0U3RvcmUoeyByb3V0ZSwgZmlsdGVycyB9LCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBsZXQgRmxleFBhZ2VzSW5zdGFuY2UgPSBudWxsO1xuXG5leHBvcnQgY29uc3QgUmVMb2FkID0gKGZyZXNoID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBzZWFyY2ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcGFnZXMtZmlsdGVycyBbbmFtZT1cImZpbHRlcnNbc2VhcmNoXVwiXScpO1xuICAgIGNvbnN0IGxvYWRlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuZ3Jhdi1sb2FkaW5nJyk7XG4gICAgY29uc3QgY29udGVudCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjcGFnZXMtY29sdW1ucycpO1xuICAgIGNvbnN0IGdyYXZDb25maWcgPSB0eXBlb2YgZ2xvYmFsLkdyYXZDb25maWcgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsLkdyYXZDb25maWcgOiBnbG9iYWwuR3JhdkFkbWluLmNvbmZpZztcblxuICAgIGlmIChmcmVzaCAmJiBzZWFyY2gpIHtcbiAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRlciAmJiBjb250ZW50KSB7XG4gICAgICAgIGxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gZnJlc2ggPyBnZXRTdG9yZSgpLmZpbHRlcnMgfHwge30gOiBnZXRGaWx0ZXJzKCk7XG4gICAgICAgIGNvbnN0IHdpdGhGaWx0ZXJzID0gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID8geyAuLi5maWx0ZXJzLCBpbml0aWFsOiB0cnVlIH0gOiB7fTtcblxuICAgICAgICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKCk7XG4gICAgICAgIHN0b3JlLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICBzZXRTdG9yZShzdG9yZSk7XG5cbiAgICAgICAgbGV0IGlzU2VhcmNoRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgICBpc1NlYXJjaEZvY3VzZWQgPSBzZWFyY2ggPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50LXdyYXBwZXIgLmdtLXNjcm9sbC12aWV3Jyk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0ge1xuICAgICAgICAgICAgdG9wOiBjb250ZW50V3JhcHBlciA/IGNvbnRlbnRXcmFwcGVyLnNjcm9sbFRvcCA6IDAsXG4gICAgICAgICAgICBsZWZ0OiBjb250ZW50V3JhcHBlciA/IGNvbnRlbnRXcmFwcGVyLnNjcm9sbExlZnQgOiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogYCR7Z3JhdkNvbmZpZy5jdXJyZW50X3VybH1gLFxuICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAgICAgcm91dGU6IGI2NF9lbmNvZGVfdW5pY29kZShnZXRJbml0aWFsUm91dGUoKSksXG4gICAgICAgICAgICAgICAgaW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdsaXN0TGV2ZWwnXG4gICAgICAgICAgICB9LCB3aXRoRmlsdGVycyksXG4gICAgICAgICAgICBzdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbG9hZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgRmxleFBhZ2VzSW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIEZsZXhQYWdlc0luc3RhbmNlID0gbmV3IEZsZXhQYWdlcyhjb250ZW50LCByZXNwb25zZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgaXNTZWFyY2hGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50V3JhcHBlcikge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50V3JhcHBlci5zY3JvbGxUbyhzY3JvbGxQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZsZXhQYWdlc0luc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5pZiAoY29udGFpbmVyKSB7XG4gICAgUmVMb2FkKHRydWUpO1xufVxuIiwiaW1wb3J0ICcuLi91dGlscy9pbmRldGVybWluYXRlJztcbmltcG9ydCAnLi9wYW5lbCc7XG5pbXBvcnQgeyBSZUxvYWQgfSBmcm9tICcuLi9jb2x1bW5zJztcbmltcG9ydCB0aHJvdHRsZSBmcm9tICdsb2Rhc2gvdGhyb3R0bGUnO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlclR5cGUgPSBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmRhdGFzZXQuZmlsdGVycztcblxuICAgIGlmIChmaWx0ZXJUeXBlID09PSAncmVzZXQnKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBldmVudC50YXJnZXQuY2xvc2VzdCgnI3BhZ2VzLWZpbHRlcnMnKTtcbiAgICAgICAgKGZpbHRlcnMucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInRleHRcIl0nKSB8fCBbXSkuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIChmaWx0ZXJzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpIHx8IFtdKS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IGlucHV0LmNsb3Nlc3QoJy5jaGVja2JveGVzJyk7XG4gICAgICAgICAgICBpZiAod3JhcHBlcikge1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnc3RhdHVzLWNoZWNrZWQnLCAnc3RhdHVzLXVuY2hlY2tlZCcsICdzdGF0dXMtaW5kZXRlcm1pbmF0ZScpO1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuZGF0YXNldC5fY2hlY2tTdGF0dXMgPSAnMCc7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdzdGF0dXMtdW5jaGVja2VkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gJ2FwcGx5Jykge1xuICAgICAgICBSZUxvYWQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0pO1xuXG5jb25zdCB0aHJvdHRsZWRSZWxvYWQgPSB0aHJvdHRsZSgoKSA9PiB7XG4gICAgUmVMb2FkKCk7XG59LCAzNTAsIHsgbGVhZGluZzogZmFsc2UgfSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnbmFtZScpID09PSAnZmlsdGVyc1tzZWFyY2hdJykge1xuICAgICAgICB0aHJvdHRsZWRSZWxvYWQuY2FuY2VsKCk7XG4gICAgICAgIHRocm90dGxlZFJlbG9hZCgpO1xuICAgIH1cbn0pO1xuIiwiaW1wb3J0ICcuL2xpc3QnO1xuaW1wb3J0ICcuL2NvbHVtbnMnO1xuaW1wb3J0ICcuL2ZpbHRlcnMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7510\n");
+eval("\n;// CONCATENATED MODULE: ./node_modules/vue/dist/vue.runtime.esm.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Vue.js v2.6.12\n * (c) 2014-2020 Evan You\n * Released under the MIT License.\n */\n\n/* */\nvar emptyObject = Object.freeze({}); // These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\n\nfunction isUndef(v) {\n return v === undefined || v === null;\n}\n\nfunction isDef(v) {\n return v !== undefined && v !== null;\n}\n\nfunction isTrue(v) {\n return v === true;\n}\n\nfunction isFalse(v) {\n return v === false;\n}\n/**\n * Check if value is primitive.\n */\n\n\nfunction isPrimitive(value) {\n return typeof value === 'string' || typeof value === 'number' || // $flow-disable-line\n _typeof(value) === 'symbol' || typeof value === 'boolean';\n}\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\n\n\nfunction isObject(obj) {\n return obj !== null && _typeof(obj) === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\n\n\nvar _toString = Object.prototype.toString;\n\nfunction toRawType(value) {\n return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\n\n\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\n\nfunction isRegExp(v) {\n return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\n\n\nfunction isValidArrayIndex(val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\n\nfunction isPromise(val) {\n return isDef(val) && typeof val.then === 'function' && typeof val.catch === 'function';\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\n\n\nfunction vue_runtime_esm_toString(val) {\n return val == null ? '' : Array.isArray(val) || isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, null, 2) : String(val);\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\n\n\nfunction toNumber(val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\n\n\nfunction makeMap(str, expectsLowerCase) {\n var map = Object.create(null);\n var list = str.split(',');\n\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n\n return expectsLowerCase ? function (val) {\n return map[val.toLowerCase()];\n } : function (val) {\n return map[val];\n };\n}\n/**\n * Check if a tag is a built-in tag.\n */\n\n\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\n\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\n\nfunction remove(arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n\n if (index > -1) {\n return arr.splice(index, 1);\n }\n }\n}\n/**\n * Check whether an object has the property.\n */\n\n\nvar vue_runtime_esm_hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction hasOwn(obj, key) {\n return vue_runtime_esm_hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\n\n\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\n\n\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) {\n return c ? c.toUpperCase() : '';\n });\n});\n/**\n * Capitalize a string.\n */\n\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\n\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\n\nfunction polyfillBind(fn, ctx) {\n function boundFn(a) {\n var l = arguments.length;\n return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);\n }\n\n boundFn._length = fn.length;\n return boundFn;\n}\n\nfunction nativeBind(fn, ctx) {\n return fn.bind(ctx);\n}\n\nvar bind = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\n\nfunction toArray(list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n\n while (i--) {\n ret[i] = list[i + start];\n }\n\n return ret;\n}\n/**\n * Mix properties into target object.\n */\n\n\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n\n return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\n\n\nfunction toObject(arr) {\n var res = {};\n\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n\n return res;\n}\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\n\n\nfunction noop(a, b, c) {}\n/**\n * Always return false.\n */\n\n\nvar no = function no(a, b, c) {\n return false;\n};\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\n\n\nvar identity = function identity(_) {\n return _;\n};\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\n\n\nfunction looseEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i]);\n });\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key]);\n });\n } else {\n /* istanbul ignore next */\n return false;\n }\n } catch (e) {\n /* istanbul ignore next */\n return false;\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n } else {\n return false;\n }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\n\n\nfunction looseIndexOf(arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) {\n return i;\n }\n }\n\n return -1;\n}\n/**\n * Ensure a function is called only once.\n */\n\n\nfunction once(fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n };\n}\n\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch'];\n/* */\n\nvar config = {\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"production\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"production\" !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n};\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\n\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\n\nfunction isReserved(str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F;\n}\n/**\n * Define a property.\n */\n\n\nfunction def(obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n/**\n * Parse simple path.\n */\n\n\nvar bailRE = new RegExp(\"[^\" + unicodeRegExp.source + \".$_\\\\d]\");\n\nfunction parsePath(path) {\n if (bailRE.test(path)) {\n return;\n }\n\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) {\n return;\n }\n\n obj = obj[segments[i]];\n }\n\n return obj;\n };\n}\n/* */\n// can we use __proto__?\n\n\nvar hasProto = ('__proto__' in {}); // Browser environment sniffing\n\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = UA && UA.indexOf('android') > 0 || weexPlatform === 'android';\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA) || weexPlatform === 'ios';\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/); // Firefox has a \"watch\" function on Object.prototype...\n\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\n\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', {\n get: function get() {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n }); // https://github.com/facebook/flow/issues/285\n\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n} // this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\n\n\nvar _isServer;\n\nvar isServerRendering = function isServerRendering() {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof __webpack_require__.g !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n\n return _isServer;\n}; // detect devtools\n\n\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\n\nfunction isNative(Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\n\nvar hasSymbol = typeof Symbol !== 'undefined' && isNative(Symbol) && typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */\n// $flow-disable-line\n\n\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/function () {\n function Set() {\n this.set = Object.create(null);\n }\n\n Set.prototype.has = function has(key) {\n return this.set[key] === true;\n };\n\n Set.prototype.add = function add(key) {\n this.set[key] = true;\n };\n\n Set.prototype.clear = function clear() {\n this.set = Object.create(null);\n };\n\n return Set;\n }();\n}\n/* */\n\n\nvar warn = noop;\nvar tip = (/* unused pure expression or super */ null && (noop));\nvar generateComponentTrace = (/* unused pure expression or super */ null && (noop)); // work around flow check\n\nvar formatComponentName = (/* unused pure expression or super */ null && (noop));\n\nif (false) { var repeat, classify, classifyRE, hasConsole; }\n/* */\n\n\nvar uid = 0;\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\n\nvar Dep = function Dep() {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub(sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub(sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend() {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify() {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n\n if (false) {}\n\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n}; // The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\n\n\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget(target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget() {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n/* */\n\n\nvar VNode = function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = {\n child: {\n configurable: true\n }\n}; // DEPRECATED: alias for componentInstance for backwards compat.\n\n/* istanbul ignore next */\n\nprototypeAccessors.child.get = function () {\n return this.componentInstance;\n};\n\nObject.defineProperties(VNode.prototype, prototypeAccessors);\n\nvar createEmptyVNode = function createEmptyVNode(text) {\n if (text === void 0) text = '';\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node;\n};\n\nfunction createTextVNode(val) {\n return new VNode(undefined, undefined, undefined, String(val));\n} // optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\n\n\nfunction cloneVNode(vnode) {\n var cloned = new VNode(vnode.tag, vnode.data, // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned;\n}\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'];\n/**\n * Intercept mutating methods and emit events\n */\n\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break;\n\n case 'splice':\n inserted = args.slice(2);\n break;\n }\n\n if (inserted) {\n ob.observeArray(inserted);\n } // notify change\n\n\n ob.dep.notify();\n return result;\n });\n});\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\n\nvar shouldObserve = true;\n\nfunction toggleObserving(value) {\n shouldObserve = value;\n}\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\n\n\nvar Observer = function Observer(value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\n\n\nObserver.prototype.walk = function walk(obj) {\n var keys = Object.keys(obj);\n\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n/**\n * Observe a list of Array items.\n */\n\n\nObserver.prototype.observeArray = function observeArray(items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n}; // helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\n\n\nfunction protoAugment(target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n\n/* istanbul ignore next */\n\n\nfunction copyAugment(target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\n\n\nfunction observe(value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return;\n }\n\n var ob;\n\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (shouldObserve && !isServerRendering() && (Array.isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue) {\n ob = new Observer(value);\n }\n\n if (asRootData && ob) {\n ob.vmCount++;\n }\n\n return ob;\n}\n/**\n * Define a reactive property on an Object.\n */\n\n\nfunction defineReactive$$1(obj, key, val, customSetter, shallow) {\n var dep = new Dep();\n var property = Object.getOwnPropertyDescriptor(obj, key);\n\n if (property && property.configurable === false) {\n return;\n } // cater for pre-defined getter/setters\n\n\n var getter = property && property.get;\n var setter = property && property.set;\n\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter() {\n var value = getter ? getter.call(obj) : val;\n\n if (Dep.target) {\n dep.depend();\n\n if (childOb) {\n childOb.dep.depend();\n\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n\n return value;\n },\n set: function reactiveSetter(newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n\n if (newVal === value || newVal !== newVal && value !== value) {\n return;\n }\n /* eslint-enable no-self-compare */\n\n\n if (false) {} // #7981: for accessor properties without setter\n\n\n if (getter && !setter) {\n return;\n }\n\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\n\n\nfunction set(target, key, val) {\n if (false) {}\n\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val;\n }\n\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val;\n }\n\n var ob = target.__ob__;\n\n if (target._isVue || ob && ob.vmCount) {\n false && 0;\n return val;\n }\n\n if (!ob) {\n target[key] = val;\n return val;\n }\n\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val;\n}\n/**\n * Delete a property and trigger change if necessary.\n */\n\n\nfunction del(target, key) {\n if (false) {}\n\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return;\n }\n\n var ob = target.__ob__;\n\n if (target._isVue || ob && ob.vmCount) {\n false && 0;\n return;\n }\n\n if (!hasOwn(target, key)) {\n return;\n }\n\n delete target[key];\n\n if (!ob) {\n return;\n }\n\n ob.dep.notify();\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\n\n\nfunction dependArray(value) {\n for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\n\n\nvar strats = config.optionMergeStrategies;\n/**\n * Options with restrictions\n */\n\nif (false) {}\n/**\n * Helper that recursively merges two data objects together.\n */\n\n\nfunction mergeData(to, from) {\n if (!from) {\n return to;\n }\n\n var key, toVal, fromVal;\n var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i]; // in case the object is already observed...\n\n if (key === '__ob__') {\n continue;\n }\n\n toVal = to[key];\n fromVal = from[key];\n\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal)) {\n mergeData(toVal, fromVal);\n }\n }\n\n return to;\n}\n/**\n * Data\n */\n\n\nfunction mergeDataOrFn(parentVal, childVal, vm) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal;\n }\n\n if (!parentVal) {\n return childVal;\n } // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n\n\n return function mergedDataFn() {\n return mergeData(typeof childVal === 'function' ? childVal.call(this, this) : childVal, typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal);\n };\n } else {\n return function mergedInstanceDataFn() {\n // instance merge\n var instanceData = typeof childVal === 'function' ? childVal.call(vm, vm) : childVal;\n var defaultData = typeof parentVal === 'function' ? parentVal.call(vm, vm) : parentVal;\n\n if (instanceData) {\n return mergeData(instanceData, defaultData);\n } else {\n return defaultData;\n }\n };\n }\n}\n\nstrats.data = function (parentVal, childVal, vm) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n false && 0;\n return parentVal;\n }\n\n return mergeDataOrFn(parentVal, childVal);\n }\n\n return mergeDataOrFn(parentVal, childVal, vm);\n};\n/**\n * Hooks and props are merged as arrays.\n */\n\n\nfunction mergeHook(parentVal, childVal) {\n var res = childVal ? parentVal ? parentVal.concat(childVal) : Array.isArray(childVal) ? childVal : [childVal] : parentVal;\n return res ? dedupeHooks(res) : res;\n}\n\nfunction dedupeHooks(hooks) {\n var res = [];\n\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n\n return res;\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\n\nfunction mergeAssets(parentVal, childVal, vm, key) {\n var res = Object.create(parentVal || null);\n\n if (childVal) {\n false && 0;\n return extend(res, childVal);\n } else {\n return res;\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\n\nstrats.watch = function (parentVal, childVal, vm, key) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) {\n parentVal = undefined;\n }\n\n if (childVal === nativeWatch) {\n childVal = undefined;\n }\n /* istanbul ignore if */\n\n\n if (!childVal) {\n return Object.create(parentVal || null);\n }\n\n if (false) {}\n\n if (!parentVal) {\n return childVal;\n }\n\n var ret = {};\n extend(ret, parentVal);\n\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n\n ret[key$1] = parent ? parent.concat(child) : Array.isArray(child) ? child : [child];\n }\n\n return ret;\n};\n/**\n * Other object hashes.\n */\n\n\nstrats.props = strats.methods = strats.inject = strats.computed = function (parentVal, childVal, vm, key) {\n if (childVal && \"production\" !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n\n if (!parentVal) {\n return childVal;\n }\n\n var ret = Object.create(null);\n extend(ret, parentVal);\n\n if (childVal) {\n extend(ret, childVal);\n }\n\n return ret;\n};\n\nstrats.provide = mergeDataOrFn;\n/**\n * Default strategy.\n */\n\nvar defaultStrat = function defaultStrat(parentVal, childVal) {\n return childVal === undefined ? parentVal : childVal;\n};\n/**\n * Validate component names\n */\n\n\nfunction checkComponents(options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName(name) {\n if (!new RegExp(\"^[a-zA-Z][\\\\-\\\\.0-9_\" + unicodeRegExp.source + \"]*$\").test(name)) {\n warn('Invalid component name: \"' + name + '\". Component names ' + 'should conform to valid custom element name in html5 specification.');\n }\n\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + name);\n }\n}\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\n\n\nfunction normalizeProps(options, vm) {\n var props = options.props;\n\n if (!props) {\n return;\n }\n\n var res = {};\n var i, val, name;\n\n if (Array.isArray(props)) {\n i = props.length;\n\n while (i--) {\n val = props[i];\n\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = {\n type: null\n };\n } else if (false) {}\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val) ? val : {\n type: val\n };\n }\n } else if (false) {}\n\n options.props = res;\n}\n/**\n * Normalize all injections into Object-based format\n */\n\n\nfunction normalizeInject(options, vm) {\n var inject = options.inject;\n\n if (!inject) {\n return;\n }\n\n var normalized = options.inject = {};\n\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = {\n from: inject[i]\n };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val) ? extend({\n from: key\n }, val) : {\n from: val\n };\n }\n } else if (false) {}\n}\n/**\n * Normalize raw function directives into object format.\n */\n\n\nfunction normalizeDirectives(options) {\n var dirs = options.directives;\n\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n\n if (typeof def$$1 === 'function') {\n dirs[key] = {\n bind: def$$1,\n update: def$$1\n };\n }\n }\n }\n}\n\nfunction assertObjectType(name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" + \"but got \" + toRawType(value) + \".\", vm);\n }\n}\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\n\n\nfunction mergeOptions(parent, child, vm) {\n if (false) {}\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child); // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n\n for (key in parent) {\n mergeField(key);\n }\n\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n\n function mergeField(key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n\n return options;\n}\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\n\n\nfunction resolveAsset(options, type, id, warnMissing) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return;\n }\n\n var assets = options[type]; // check local registration variations first\n\n if (hasOwn(assets, id)) {\n return assets[id];\n }\n\n var camelizedId = camelize(id);\n\n if (hasOwn(assets, camelizedId)) {\n return assets[camelizedId];\n }\n\n var PascalCaseId = capitalize(camelizedId);\n\n if (hasOwn(assets, PascalCaseId)) {\n return assets[PascalCaseId];\n } // fallback to prototype chain\n\n\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n\n if (false) {}\n\n return res;\n}\n/* */\n\n\nfunction validateProp(key, propOptions, propsData, vm) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key]; // boolean casting\n\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n } // check default value\n\n\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key); // since the default value is a fresh copy,\n // make sure to observe it.\n\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n\n if (false) {}\n\n return value;\n}\n/**\n * Get the default value of a prop.\n */\n\n\nfunction getPropDefaultValue(vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined;\n }\n\n var def = prop.default; // warn against non-factory defaults for Object & Array\n\n if (false) {} // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n\n\n if (vm && vm.$options.propsData && vm.$options.propsData[key] === undefined && vm._props[key] !== undefined) {\n return vm._props[key];\n } // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n\n\n return typeof def === 'function' && getType(prop.type) !== 'Function' ? def.call(vm) : def;\n}\n/**\n * Assert whether a prop is valid.\n */\n\n\nfunction assertProp(prop, name, value, vm, absent) {\n if (prop.required && absent) {\n warn('Missing required prop: \"' + name + '\"', vm);\n return;\n }\n\n if (value == null && !prop.required) {\n return;\n }\n\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(getInvalidTypeMessage(name, value, expectedTypes), vm);\n return;\n }\n\n var validator = prop.validator;\n\n if (validator) {\n if (!validator(value)) {\n warn('Invalid prop: custom validator check failed for prop \"' + name + '\".', vm);\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType(value, type) {\n var valid;\n var expectedType = getType(type);\n\n if (simpleCheckRE.test(expectedType)) {\n var t = _typeof(value);\n\n valid = t === expectedType.toLowerCase(); // for primitive wrapper objects\n\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n\n return {\n valid: valid,\n expectedType: expectedType\n };\n}\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\n\n\nfunction getType(fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : '';\n}\n\nfunction isSameType(a, b) {\n return getType(a) === getType(b);\n}\n\nfunction getTypeIndex(type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1;\n }\n\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" + \" Expected \" + expectedTypes.map(capitalize).join(', ');\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType); // check if we need to specify expected value\n\n if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n\n message += \", got \" + receivedType + \" \"; // check if we need to specify received value\n\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n\n return message;\n}\n\nfunction styleValue(value, type) {\n if (type === 'String') {\n return \"\\\"\" + value + \"\\\"\";\n } else if (type === 'Number') {\n return \"\" + Number(value);\n } else {\n return \"\" + value;\n }\n}\n\nfunction isExplicable(value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) {\n return value.toLowerCase() === elem;\n });\n}\n\nfunction isBoolean() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return args.some(function (elem) {\n return elem.toLowerCase() === 'boolean';\n });\n}\n/* */\n\n\nfunction handleError(err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n\n try {\n if (vm) {\n var cur = vm;\n\n while (cur = cur.$parent) {\n var hooks = cur.$options.errorCaptured;\n\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n\n if (capture) {\n return;\n }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling(handler, context, args, vm, info) {\n var res;\n\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) {\n return handleError(e, vm, info + \" (Promise/async)\");\n }); // issue #9511\n // avoid catch triggering multiple times when nested calls\n\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n\n return res;\n}\n\nfunction globalHandleError(err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info);\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n\n logError(err, vm, info);\n}\n\nfunction logError(err, vm, info) {\n if (false) {}\n /* istanbul ignore else */\n\n\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err;\n }\n}\n/* */\n\n\nvar isUsingMicroTask = false;\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n} // Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\n\n\nvar timerFunc; // The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n\n/* istanbul ignore next, $flow-disable-line */\n\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n\n timerFunc = function timerFunc() {\n p.then(flushCallbacks); // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n\n if (isIOS) {\n setTimeout(noop);\n }\n };\n\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (isNative(MutationObserver) || // PhantomJS and iOS 7.x\nMutationObserver.toString() === '[object MutationObserverConstructor]')) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n\n timerFunc = function timerFunc() {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function timerFunc() {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function timerFunc() {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick(cb, ctx) {\n var _resolve;\n\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n\n if (!pending) {\n pending = true;\n timerFunc();\n } // $flow-disable-line\n\n\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n });\n }\n}\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\n\nvar initProxy;\n\nif (false) { var getHandler, hasHandler, isBuiltInModifier, hasProxy, warnReservedPrefix, warnNonPresent, allowedGlobals; }\n/* */\n\n\nvar seenObjects = new _Set();\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\n\nfunction traverse(val) {\n _traverse(val, seenObjects);\n\n seenObjects.clear();\n}\n\nfunction _traverse(val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n\n if (!isA && !isObject(val) || Object.isFrozen(val) || val instanceof VNode) {\n return;\n }\n\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n\n if (seen.has(depId)) {\n return;\n }\n\n seen.add(depId);\n }\n\n if (isA) {\n i = val.length;\n\n while (i--) {\n _traverse(val[i], seen);\n }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n\n while (i--) {\n _traverse(val[keys[i]], seen);\n }\n }\n}\n\nvar mark;\nvar measure;\n\nif (false) { var perf; }\n/* */\n\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n };\n});\n\nfunction createFnInvoker(fns, vm) {\n function invoker() {\n var arguments$1 = arguments;\n var fns = invoker.fns;\n\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n }\n }\n\n invoker.fns = fns;\n return invoker;\n}\n\nfunction updateListeners(on, oldOn, add, remove$$1, createOnceHandler, vm) {\n var name, def$$1, cur, old, event;\n\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n\n if (isUndef(cur)) {\n false && 0;\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n/* */\n\n\nfunction mergeVNodeHook(def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook() {\n hook.apply(this, arguments); // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n/* */\n\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n\n if (isUndef(propOptions)) {\n return;\n }\n\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n\n if (false) { var keyInLowerCase; }\n\n checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false);\n }\n }\n\n return res;\n}\n\nfunction checkProp(res, hash, key, altKey, preserve) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n\n if (!preserve) {\n delete hash[key];\n }\n\n return true;\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n\n if (!preserve) {\n delete hash[altKey];\n }\n\n return true;\n }\n }\n\n return false;\n}\n/* */\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array