{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/@appstractdk/as-core/base.js","node_modules/@appstractdk/as-core/index.js","node_modules/@appstractdk/as-core/view.js","node_modules/whatwg-fetch/dist/fetch.umd.js","src/scripts/app.js","src/scripts/components/accordion.js","src/scripts/components/dropdown.js","src/scripts/components/header.js","src/scripts/components/misc/position-dropdown.js","src/scripts/es6.js","src/scripts/libs/stringToHTML.js","src/scripts/libs/template-polyfill.js"],"names":[],"mappings":"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","file":"es6.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\r\n\t\t\tif(typeof(attribute)==='string') {\r\n\t\t\t\tattribute.split(' ').forEach(className => elem.classList.add(className));\r\n\t\t\t} else if (attribute instanceof Node || attribute instanceof Array ) {\r\n\t\t\t\t[].concat(attribute).forEach(node => {\r\n\t\t\t\t\tif (node) elem.appendChild((typeof node === 'string' || typeof node === 'number') ? document.createTextNode(node) : node);\r\n\t\t\t\t});\r\n\t\t\t} else if(typeof(attribute)==='object') {\r\n\t\t\t\tfor(const k in attribute) {\r\n\t\t\t\t\telem[k] = attribute[k];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn elem;\r\n\t}\r\n\r\n\tmatches(element, selector) {\r\n\t\tif (element.matches) {\r\n\t\t\treturn element.matches(selector);\r\n\t\t} else if (element.matchesSelector) {\r\n\t\t\treturn element.matchesSelector(selector);\r\n\t\t} else if (element.msMatchesSelector) {\r\n\t\t\treturn element.msMatchesSelector(selector);\r\n\t\t} else if (element.webkitMatchesSelector) {\r\n\t\t\treturn element.webkitMatchesSelector(selector);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsubscribe(eventName, listener, context) {\r\n\t\t(this.listeners[eventName] = this.listeners[eventName] || []).push({\r\n\t\t\tfunc: listener,\r\n\t\t\tcontext: context\r\n\t\t});\r\n\t}\r\n\r\n\temit(eventName, ...arg) {\r\n\t\tfor(const listener of (this.listeners[eventName] || [])) {\r\n\t\t\tlistener.func.apply(listener.context, arg);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Base;\r\n","import Base from './base';\r\nimport View from './view';\r\n\r\nexport { default as Base} from './base';\r\nexport { default as View} from './view';\r\n\r\nexport default {\r\n\tBase,\r\n\tView\r\n};\r\n","import Base from './base';\r\n\r\nclass View extends Base {\r\n\tconstructor(...args) {\r\n\t\tsuper();\r\n\t\tthis.el = typeof(args[0])==='string' ? this.makeElement(...arguments) : args[0];\r\n\t}\r\n\r\n\tquery(query) {\r\n\t\treturn Array.from(this.el.querySelectorAll(query));\r\n\t}\r\n\r\n\taddListener(type, match, method) {\r\n\t\t\r\n\t\tlet elem = this.el;\r\n\t\tlet callback = method;\r\n\t\tlet matchSelector = match;\r\n\r\n\t\tif(typeof(match) === 'function') {\r\n\t\t\tcallback = match;\r\n\t\t\tmatchSelector = null;\r\n\t\t} else if(match === document || match == window ) {\r\n\t\t\telem = match;\r\n\t\t\tmatchSelector = null;\r\n\t\t} else if (match === 'body') {\r\n\t\t\telem = document.body;\r\n\t\t\tmatchSelector = null;\r\n\t\t} else if (match instanceof Element) {\r\n\t\t\telem = match;\r\n\t\t\tmatchSelector = null;\r\n\t\t}\r\n\r\n\t\tconst eventListener = e => {\r\n\t\t\tif (!matchSelector) {\r\n\t\t\t\treturn callback.call(this, e, this.el);\r\n\t\t\t}\r\n\t\t\tconst elements = this.query(matchSelector);\r\n\t\t\tconst element = elements.find( item => item.contains(e.target));\r\n\t\t\tif (element) {\r\n\t\t\t\treturn callback.call(this, e, element);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\telem.addEventListener(type, eventListener);\t\t\t\r\n\t}\r\n\r\n\tremove() {\r\n\t\tthis.el.parentNode.removeChild(this.el);\r\n\t}\r\n}\r\n\r\nexport default View;\r\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.WHATWGFetch = {})));\n}(this, (function (exports) { 'use strict';\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","import \"whatwg-fetch\";\r\nimport './libs/template-polyfill';\r\nimport { View } from '@appstractdk/as-core';\r\nimport Header from './components/header';\r\nimport Accordion from './components/accordion';\r\nimport Dropdown from './components/dropdown';\r\n\r\nclass App extends View {\r\n\tconstructor(el) {\r\n\t\tsuper(el);\r\n\t\tif (!document.querySelector(\".dark-font\")) {\r\n\t\t\tdocument.querySelector(\".header\").classList.add(\"white-font\");\r\n\t\t}\r\n\r\n\t\tthis.data = {};\r\n\t\tthis.data[\"dropdowns\"] = {};\r\n\r\n\t\tconst components = [];\r\n\t\tconst componentsWithHandler = [Header];\r\n\t\tthis.load(components);\r\n\t\tthis.loadWithHandler(componentsWithHandler);\r\n\t\tAccordion.init();\r\n\t}\r\n\r\n\tload(components) {\r\n\t\tif (components.length) {\r\n\t\t\tcomponents.forEach(c => c.init && c.init());\r\n\t\t}\r\n\t}\r\n\tloadWithHandler(componentsWithHandler) {\r\n\t\tif (componentsWithHandler.length) {\r\n\t\t\tcomponentsWithHandler.forEach(c => c.init && c.init(this));\r\n\t\t}\r\n\t}\r\n\r\n\tifDropdownAlreadyExistsInHandlerRenameIt(dropdowns, name) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(dropdowns, name)) {\r\n\t\t\tname = name + \"B\";\r\n\t\t\treturn this.ifDropdownAlreadyExistsInHandlerRenameIt(dropdowns, name);\r\n\t\t}\r\n\r\n\t\treturn name;\r\n\t}\r\n\r\n\r\n\tinitDropdown(dropdown, library, keepOpenOnSelectOption, hasSearch) {\r\n\t\tif (!dropdown) { return }\r\n\r\n\t\tconst selectField = dropdown.querySelector(\".js-select-field\");\r\n\t\tlet optionsName = selectField.getAttribute(\"data-options-name\");\r\n\r\n\t\tlet fields = [];\r\n\t\tlet dropdowns = this.data[\"dropdowns\"];\r\n\r\n\t\tconst name = this.ifDropdownAlreadyExistsInHandlerRenameIt(dropdowns, optionsName);\r\n\r\n\t\tdropdowns[name] = {};\r\n\t\tdropdowns[name][\"markup\"] = [];\r\n\r\n\t\tif (selectField.options.length < 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < selectField.options.length; i++) {\r\n\t\t\tconst selectFieldOption = selectField.options[i];\r\n\r\n\t\t\tif (selectFieldOption.disabled) { continue; }\r\n\t\t\tif (selectFieldOption.selected) {\r\n\t\t\t\tdropdowns[name][\"selected\"] = selectFieldOption.getAttribute(\"data-id\");\r\n\t\t\t}\r\n\r\n\t\t\tlet obj = {};\r\n\t\t\tobj.Value = selectFieldOption.value;\r\n\t\t\tobj.Text = selectFieldOption.innerHTML;\r\n\t\t\tobj.Name = selectField.getAttribute(\"data-options-name\");\r\n\r\n\t\t\t// Add all datatypes to our dropdown object\r\n\t\t\tfor (let i in selectFieldOption.dataset) {\r\n\t\t\t\tobj[i] = selectFieldOption.dataset[i];\r\n\t\t\t}\r\n\r\n\t\t\tfields.push(obj);\r\n\t\t}\r\n\r\n\t\tconst init = new Dropdown(dropdown, fields, this, library, keepOpenOnSelectOption, hasSearch);\r\n\r\n\t\tdropdowns[name][\"class\"] = init;\r\n\t}\r\n\r\n}\r\n\r\nexport default App;\r\n","import { View } from '@appstractdk/as-core';\r\n\r\nconst defaultOptions = {\r\n\taccordionFoldContainerSelector: '.accordion-fold-container',\r\n\taccordionFoldSelector: '.accordion-fold',\r\n\taccordionActiveClass: 'active',\r\n\taccordionLink: 'accordion-item-link'\r\n}\r\nclass Accordion extends View {\r\n\r\n\tconstructor(el, options) {\r\n\t\tsuper(el);\r\n\t\tthis.options = options ? options : defaultOptions;\r\n\t\tconst fold = this.el.querySelector(this.options.accordionFoldSelector);\r\n\t\tif (!fold) { return; }\r\n\r\n\t\tthis.accordionButton = this.el.children[1];\r\n\t\tconst isTimelineType = this.accordionButton.classList.contains(this.options.accordionLink);\r\n\t\tconst minAccordionHeight = window.innerWidth < 768 ? 46 : 46;\r\n\t\tthis.heightLimit = isTimelineType ? minAccordionHeight : 0;\r\n\r\n\t\tthis.addListener('click', '.accordion-button', this.onAccordionToggle.bind(this));\r\n\r\n\t\tif (this.el.classList.contains(\"active\")) {\r\n\t\t\tthis.toggleAccordion(true);\r\n\t\t}\r\n\t}\r\n\r\n\tonAccordionToggle() {\r\n\t\tif (this.el.classList.contains(\"open\")) {\r\n\t\t\tthis.el.classList.remove(\"open\");\r\n\t\t\tthis.toggleAccordion(false);\r\n\t\t} else {\r\n\t\t\tthis.toggleAccordion();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\ttoggleAccordion(open) {\r\n\t\tconst accordionFoldContainer = this.el.querySelector(this.options.accordionFoldContainerSelector);\r\n\t\tlet addedPaddingOnAccordionHeight;\r\n\r\n\t\tif (open === undefined || open) {\r\n\t\t\tconst accordionHeight = [...this.el.querySelectorAll(this.options.accordionFoldSelector)].map(container => parseInt(container.offsetHeight)).reduce((total, amount) => total + amount);\r\n\t\t\taddedPaddingOnAccordionHeight = accordionHeight + 50;\r\n\t\t}\r\n\r\n\t\tif (open === undefined) {\r\n\t\t\tthis.el.classList.toggle(this.options.accordionActiveClass);\r\n\t\t} else if (open) {\r\n\t\t\tthis.el.classList.add(this.options.accordionActiveClass);\r\n\t\t} else {\r\n\t\t\tthis.el.classList.remove(this.options.accordionActiveClass);\r\n\t\t}\r\n\r\n\t\tconst isActive = this.el.classList.contains(this.options.accordionActiveClass);\r\n\t\taccordionFoldContainer.style.maxHeight = `${isActive ? addedPaddingOnAccordionHeight : this.heightLimit}px`;\r\n\t}\r\n\r\n\r\n\texposeButton(height, limit) {\r\n\t\tif (height > limit) {\r\n\t\t\tthis.accordionButton.classList.remove(\"hidden\");\r\n\t\t}\r\n\t}\r\n\r\n\tstatic init(selector = '.accordion:not(.self-mount)', base = document, options = defaultOptions) {\r\n\t\treturn [...base.querySelectorAll(selector)].map(node => new Accordion(node, options));\r\n\t}\r\n}\r\n\r\n\r\nexport default Accordion;\r\n","import { View } from '@appstractdk/as-core';\r\nimport stringToHTML from '../libs/stringToHTML';\r\nimport positionDropdown from './misc/position-dropdown';\r\n\r\nexport default class Dropdown extends View {\r\n\tconstructor(el, data, handler, library, keepOpenOnSelectOption = false, hasSearch = true, withoutListeners = false) {\r\n\t\tsuper(el);\r\n\t\tconst dictionaryTemplateNode = document.importNode(document.querySelector(\"#default-dictionary-template\").content, true).querySelector(\".default-dictionary-template\");\r\n\t\tthis.dictionaryTemplate = dictionaryTemplateNode.cloneNode(true);\r\n\r\n\t\tthis.data = data;\r\n\t\tthis.handler = handler;\r\n\t\tthis.library = library;\r\n\t\tthis.hasSearch = hasSearch;\r\n\t\tthis.withoutListeners = withoutListeners;\r\n\t\tthis.keepOpenOnSelectOption = keepOpenOnSelectOption;\r\n\t\tthis.dropdownType = this.el.getAttribute(\"data-type\") || 'default';\r\n\t\t\r\n\t\tthis.hasDropdown = false;\r\n\t\tthis.isActive = false;\r\n\t\tthis.checkedAllState = true;\r\n\t\tthis.options = [];\r\n\t\tthis.select = this.el.querySelector(\".js-select-field\");\r\n\t\tthis.optionName = this.select.getAttribute(\"data-options-name\");\r\n\t\tthis.arrowStyle = this.el.classList.contains(\"simple\") ? \r\n\t\t`\r\n\t\t\t\r\n\t\t`\r\n\t\t: \r\n\t\t`\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t`;\r\n\r\n\r\n\t\tthis.toggleDropdown = this.toggleDropdown.bind(this);\r\n\t\tthis.removeDropdown = this.removeDropdown.bind(this);\r\n\t\tthis.selectOption = this.selectOption.bind(this);\r\n\r\n\t\tthis.initSelectOptions();\r\n\t\tthis.presetOptionValue();\r\n\r\n\r\n\t\tif(this.withoutListeners) { return; }\r\n\r\n\t\tthis.el.querySelector(\".niceform-select\").addEventListener(\"click\", this.toggleDropdown, true);\r\n\t\t// document.body.addEventListener(\"click\", this.removeDropdown, true);\r\n\t\t[...this.el.querySelectorAll(\".dropdown-selection\")].forEach(option => {\r\n\t\t\toption.addEventListener(\"click\", this.selectOption, true);\r\n\t\t});\r\n\r\n\t\tthis.addListener(\"click\", \"body\", this.removeDropdown);\r\n\t\t//this.addListener(\"click\", \".dropdown-selection\", this.selectOption);\r\n\r\n\t\twindow.addEventListener(\"resize\", this.debounce(this.onResize.bind(this), 50), true);\r\n\t}\r\n\r\n\tselectOption(e, target) {\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\r\n\t\ttarget = e.currentTarget;\r\n\t\t\r\n\t\tif(this.handler.isLoading) { return; }\r\n\t\t\r\n\t\tconst activeSelection = this.el.querySelector(\".dropdown-selection.selected\");\r\n\t\tif (activeSelection) { activeSelection.classList.remove(\"selected\"); }\r\n\t\tthis.updateElem(target, target.dataset.idx);\r\n\t\t\r\n\t\tthis.library.emit(\"OnDropdownSelect\", target, this.el);\r\n\r\n\t\tif(this.dropdownType === 'locations') {\r\n\t\t\tthis.library.emit(\"OnLocationDropdownItemSelect\", target);\r\n\t\t}\r\n\r\n\t\tif(this.dropdownType === 'countries') {\r\n\t\t\tthis.library.emit(\"OnCountriesDropdownItemSelect\", target);\r\n\t\t}\r\n\r\n\r\n\t\tif(this.keepOpenOnSelectOption) { return; }\r\n\r\n\t\tthis.toggleDropdown(e);\r\n\r\n\t\tif(this.el.getAttribute(\"data-reload-url\")) {\r\n\t\t\twindow.location.href = window.location.origin + target.getAttribute(\"data-value\");\r\n\t\t}\r\n\t}\r\n\r\n\tinitSelectOptions() {\r\n\t\t//this.data.forEach(obj => this.select.appendChild(stringToHTML(``)));\r\n\t\tthis.options = [...this.select.querySelectorAll(\"option\")];\r\n\t}\r\n\r\n\tpresetOptionValue() {\r\n\t\tconst value = this.handler.data[\"dropdowns\"][this.optionName][\"selected\"];\r\n\r\n\t\tthis.createDropdown();\r\n\r\n\t\tlet dropdownOption = [...this.el.querySelectorAll(\".dropdown-selection\")].find(opt => opt.dataset.idx === value);\r\n\t\tif (!dropdownOption) {\r\n\t\t\tdropdownOption = [...this.el.querySelectorAll(\".dropdown-selection\")][0];\r\n\t\t}\r\n\r\n\t\tthis.updateElem(dropdownOption, value);\r\n\t}\r\n\r\n\tcreateDropdown() {\r\n\t\tconst placeholder = this.el.querySelector(\".niceform-select-wrapper\");\r\n\t\tif(placeholder) {\r\n\t\t\tplaceholder.parentNode.removeChild(placeholder);\r\n\t\t}\r\n\r\n\t\tconst markup = `\r\n
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t${this.arrowStyle}\t\t\t\t\t\r\n
\r\n
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t${this.hasSearch ? \r\n\t\t\t\t\t\t\t`
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
`\r\n\t\t\t\t\t\t\t: \r\n\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t${this.data.map(obj => this[this.dropdownType](obj)).join(\"\")}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n
\r\n
\r\n `;\r\n\t\tthis.el.appendChild(stringToHTML(markup));\r\n\r\n\t\tthis.searchInput = this.el.querySelector(\".niceform-option-search-input\");\r\n\t\tthis.optionsList = this.el.querySelector(\".niceform-options-holder-scrollbar-container.options-holder\");\r\n\t\tthis.dropdownContainer = this.el.querySelector(\".niceform-options-holder\");\r\n\r\n\t\tif(this.searchInput) {\r\n\t\t\tthis.searchInput.addEventListener('keyup', this.filterOptionListWhenType.bind(this));\r\n\t\t}\r\n\t\t\r\n\r\n\t\tthis.selectedPlaceHolderText = this.el.querySelector(\".niceform-select-text-container\");\r\n\t\tthis.hasDropdown = true;\r\n\t}\r\n\r\n\tonResize() {\r\n\t\tif (!this.isActive) { return; }\r\n\r\n\t\tpositionDropdown(this.dropdownContainer, this.el, false);\r\n\t}\r\n\r\n\tdebounce(func, wait, immediate) {\r\n if (immediate === void 0) { immediate = false; }\r\n var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n timeout !== null && clearTimeout(timeout);\r\n timeout = window.setTimeout(function () {\r\n timeout = null;\r\n if (!immediate)\r\n func.apply(context, args);\r\n }, wait);\r\n if (immediate && !timeout)\r\n func.apply(context, args);\r\n };\r\n }\r\n\r\n\tfilterOptionListWhenType(event) {\r\n\t\tconst keyword = this.searchInput.value.toLowerCase();\r\n\t\tlet filtered = this.handler.data.dropdowns[this.optionName].markup\r\n\t\t\t.filter(obj => {\r\n\t\t\t\tlet title = obj.title.toLowerCase();\r\n\t\t\t\tif(title.indexOf(keyword) > -1){\r\n\t\t\t\t\treturn obj;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\r\n\t\tthis.renderList(filtered);\r\n\r\n\t}\r\n\r\n\trenderList(list){\r\n\t\tif(list.length === 0) {\r\n\t\t\t\r\n\t\t\tthis.optionsList.innerHTML = \r\n\t\t\t\t`
\r\n\t\t\t\t\t

${this.dictionaryTemplate.querySelector(\".no-dropdown-search-results-found\").innerHTML}

\r\n\t\t\t\t
`;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.optionsList.innerHTML = list.map(item => item.value).join(\"\");\r\n\r\n\t\t// Add event listeners again...\r\n\t\t[...this.el.querySelectorAll(\".dropdown-selection\")].forEach(option => {\r\n\t\t\toption.addEventListener(\"click\", this.selectOption, true);\r\n\t\t});\r\n\t}\r\n\r\n\tlocations(obj) {\r\n\t\tconst markup = `
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t

${obj.Text}

\r\n\t\t\t\t\t\t\t\t

${obj.description}

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
`;\r\n\r\n\t\tthis.handler.data[\"dropdowns\"][this.optionName][\"markup\"].push({ title: obj.Text, value: markup });\r\n\r\n\t\treturn markup;\r\n\t}\r\n\r\n\tcountries(obj) {\r\n\t\tconst markup = `
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t${obj.id ? \r\n\t\t\t\t\t\t\t\t\t`
`\r\n\t\t\t\t\t\t\t\t\t: \r\n\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t

${obj.Text}

\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t${obj.countryCurrency ? `

${obj.countryCurrency}

` : ``}\r\n\t\t\t\t\t\t
`;\r\n\r\n\t\tthis.handler.data[\"dropdowns\"][this.optionName][\"markup\"].push({ title: obj.Text, value: markup });\r\n\t\treturn markup;\r\n\t}\r\n\r\n\tdefault(obj) {\r\n\t\treturn `
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

${obj.Text}

\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
`;\r\n\t}\r\n\r\n\ttoggleDropdown(e) {\r\n\t\te.stopPropagation();\r\n\t\tif (!this.hasDropdown) { this.createDropdown(); }\r\n\r\n\t\t// Loop through the other Dropdowns and close them\r\n\t\t// this.data.dropdowns = [] from app.js\r\n\r\n\t\tObject.values(this.handler.data[\"dropdowns\"])\r\n\t\t\t.map(obj => {\r\n\t\t\t\tconst inst = obj.class;\r\n\r\n\t\t\t\tif(!inst) { return; }\r\n\r\n\t\t\t\tif (inst.el !== this.el) {\r\n\t\t\t\t\tinst.el.classList.remove(\"active\");\r\n\t\t\t\t\tinst.isActive = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.el.classList.toggle(\"active\");\r\n\t\tthis.isActive = !this.isActive;\r\n\r\n\t\tif(this.isActive) {\r\n\t\t\tpositionDropdown(this.dropdownContainer, this.el, false);\r\n\t\t}\r\n\t}\r\n\r\n\tremoveDropdown(e) {\r\n\t\tif (e.target.classList.contains(\"options-holder\")) { return; }\r\n\t\tif (this.hasDropdown && this.isActive) { this.toggleDropdown(e); }\r\n\t}\r\n\r\n\tupdateElem(elem, optIndx) {\r\n\t\tconst option = this.options.find(option => option.getAttribute(\"data-id\") === optIndx);\r\n\t\tconst value = elem.querySelector(\".dropdown-option-item-left-container\");\r\n\t\telem.classList.add(\"selected\");\r\n\t\r\n\t\tthis.selectedPlaceHolderText.innerHTML = value.innerHTML;\r\n\t\t\r\n\t\r\n\t\tif(!option) { return; }\r\n\t\toption.selected = true;\r\n\r\n\t\t//this.handler.setProperty(this.optionName + \"-selected\", optIndx);\r\n\t\tthis.handler.data[\"dropdowns\"][this.optionName][\"selected\"] = optIndx;\r\n\t}\r\n\r\n}","import { View } from '@appstractdk/as-core';\r\n\r\nclass Header extends View {\r\n\tconstructor(el, handler) {\r\n\t\tsuper(el);\r\n\t\tthis.handler = handler;\r\n\t\tthis.menuActive = false;\r\n\r\n\t\t[...this.el.querySelectorAll(\".js-select\")].forEach(dropdown => this.handler.initDropdown(dropdown, this, false, false));\r\n\r\n\t\tthis.addListener(\"click\", \".burger-menu-wrapper\", this.onMenuToggle);\r\n\t}\r\n\r\n\r\n\tonMenuToggle() {\r\n\t\tif (this.el.classList.contains(\"menu-open\")) {\r\n\t\t\tdocument.body.classList.remove(\"fixed\");\r\n\t\t\tthis.el.classList.remove(\"menu-open\");\r\n\t\t} else {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.el.classList.add(\"menu-open\");\r\n\t\t\t\tdocument.body.classList.add(\"fixed\");\r\n\t\t\t}, 100);\r\n\t\t}\r\n\r\n\t\tif (!this.menuActive) {\r\n\t\t\tthis.el.classList.add(\"is-menu-open\");\r\n\t\t\tthis.el.classList.remove(\"is-menu-closed\");\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.el.classList.add(\"has-fixed-inner-header\");\r\n\t\t\t}, 200);\r\n\t\t} else {\r\n\t\t\tthis.el.classList.remove(\"is-menu-open\");\r\n\t\t\tthis.el.classList.add(\"is-menu-closed\");\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.el.classList.remove(\"has-fixed-inner-header\");\r\n\t\t\t}, 300);\r\n\t\t}\r\n\r\n\t\tthis.menuActive = !this.menuActive;\r\n\r\n\t}\r\n\r\n\r\n\tstatic init(handler, selector = \".header\", base = document) {\r\n\t\treturn [...base.querySelectorAll(selector)].map(node => new Header(node, handler));\r\n\t}\r\n\r\n}\r\n\r\nexport default Header;\r\n","const positionDropdown = (container, element, setTop = true) => {\r\n\tconst dropdownHeight = container.offsetHeight;\r\n\tconst dropdownWidth = container.offsetWidth;\r\n\tconst inputBounds = element.getBoundingClientRect();\r\n\r\n\tvar top = window.pageYOffset + inputBounds.top + element.offsetHeight + 2 + 8;\r\n\tvar left = window.pageXOffset + inputBounds.left;\r\n\tvar right = window.document.body.offsetWidth - inputBounds.right;\r\n\tvar rightMost = left + dropdownWidth > window.document.body.offsetWidth;\r\n\tvar centerMost = right + dropdownWidth > window.document.body.offsetWidth;\r\n\r\n\tif (setTop) {\r\n\t\tcontainer.style.top = top + \"px\";\r\n\t}\r\n\r\n\tif (!rightMost) {\r\n\t\tcontainer.style.left = setTop ? left + \"px\" : 0;\r\n\t\tcontainer.style.right = \"auto\";\r\n\t}\r\n\telse if (!centerMost) {\r\n\t\tcontainer.style.left = \"auto\";\r\n\t\tcontainer.style.right = setTop ? right + \"px\" : 0;\r\n\t} else {\r\n\t\tvar bodyWidth = window.document.body.offsetWidth;\r\n\t\tvar centerLeft = Math.max(0, bodyWidth / 2 - dropdownWidth / 2);\r\n\t\tif (setTop) {\r\n\t\t\tcontainer.style.left = centerLeft + \"px\";\r\n\t\t}\r\n\t\tcontainer.style.right = \"auto\";\r\n\t}\r\n}\r\n\r\n\r\n\r\nexport default positionDropdown;","import App from \"./app\";\r\n\r\n\r\nwindow.addEventListener('load', () => {\r\n\tnew App(document.body);\r\n});\r\n","\r\nconst stringToHTML = string => {\r\n\tconst doc = new DOMParser().parseFromString(string, \"text/html\");\r\n\treturn doc.body.firstChild;\r\n};\r\n\r\nexport default stringToHTML;","// IIFE as we want to polyfill ASAP\r\n\r\nconst enhanceTemplateTag = node => {\r\n\tconst content = node.childNodes;\r\n\tconst fragment = document.createDocumentFragment();\r\n\twhile(content[0]) {\r\n\t\tfragment.appendChild(content[0]);\r\n\t}\r\n\tnode.content = fragment;\r\n};\r\n\r\n\r\n(() => {\r\n\tif ('content' in document.createElement('template')) {\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tconst templates = [...document.getElementsByTagName('template')];\r\n\r\n\ttemplates.forEach(enhanceTemplateTag);\r\n\r\n\tconst observer = new MutationObserver(mutations => {\r\n\t\tmutations.forEach(mutation => {\r\n\t\t\tconst addedNodes = [...mutation.addedNodes].filter(node => node.nodeType === 1);\r\n\t\t\taddedNodes.forEach(newNode => {\r\n\t\t\t\tconst newTemplates = [...newNode.querySelectorAll('template')];\r\n\t\t\t\tnewTemplates.forEach(enhanceTemplateTag);\r\n\t\t\t});\r\n\t\t});\r\n\t});\r\n\r\n\tconst observerConfig = { childList: true, subtree: true };\r\n\r\n\tobserver.observe(document, observerConfig);\r\n})();\r\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvQGFwcHN0cmFjdGRrL2FzLWNvcmUvYmFzZS5qcyIsIm5vZGVfbW9kdWxlcy9AYXBwc3RyYWN0ZGsvYXMtY29yZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9AYXBwc3RyYWN0ZGsvYXMtY29yZS92aWV3LmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9kaXN0L2ZldGNoLnVtZC5qcyIsInNyYy9zY3JpcHRzL2FwcC5qcyIsInNyYy9zY3JpcHRzL2NvbXBvbmVudHMvYWNjb3JkaW9uLmpzIiwic3JjL3NjcmlwdHMvY29tcG9uZW50cy9kcm9wZG93bi5qcyIsInNyYy9zY3JpcHRzL2NvbXBvbmVudHMvaGVhZGVyLmpzIiwic3JjL3NjcmlwdHMvY29tcG9uZW50cy9taXNjL3Bvc2l0aW9uLWRyb3Bkb3duLmpzIiwic3JjL3NjcmlwdHMvZXM2LmpzIiwic3JjL3NjcmlwdHMvbGlicy9zdHJpbmdUb0hUTUwuanMiLCJzcmMvc2NyaXB0cy9saWJzL3RlbXBsYXRlLXBvbHlmaWxsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FDQUEsTUFBTSxTQUFTLEdBQWYsNEJBQUE7O0FBQ0EsTUFBQSxJQUFBLENBQVc7QUFDVixFQUFBLFdBQVcsR0FBRztBQUNiLFNBQUEsU0FBQSxHQUFBLEVBQUE7QUFDQTs7QUFDRCxFQUFBLFdBQVcsQ0FBQSxJQUFBLEVBQW1CO0FBQzdCLFFBQUEsSUFBQTs7QUFENkIsc0NBQW5CLE9BQW1CO0FBQW5CLE1BQUEsT0FBbUI7QUFBQTs7QUFFN0IsUUFBSyxPQUFPLElBQUksT0FBTyxDQUFsQixDQUFrQixDQUFsQixJQUF5QixPQUFPLENBQVAsQ0FBTyxDQUFQLENBQTFCLEtBQUMsSUFBK0MsSUFBSSxJQUFJLElBQUksQ0FBSixXQUFBLE9BQTVELEtBQUEsRUFBMkY7QUFDMUYsWUFBTSxNQUFNLEdBQUcsT0FBTyxD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LFlBQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBYixFQUF5QixNQUF6QixDQUFnQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQUwsS0FBa0IsQ0FBMUQsQ0FBbkI7QUFDQSxNQUFBLFVBQVUsQ0FBQyxPQUFYLENBQW1CLE9BQU8sSUFBSTtBQUM3QixjQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLGdCQUFSLENBQXlCLFVBQXpCLENBQUosQ0FBckI7QUFDQSxRQUFBLFlBQVksQ0FBQyxPQUFiLENBQXFCLGtCQUFyQjtBQUNBLE9BSEQ7QUFJQSxLQU5EO0FBT0EsR0FSZ0IsQ0FBakI7QUFVQSxRQUFNLGNBQWMsR0FBRztBQUFFLElBQUEsU0FBUyxFQUFFLElBQWI7QUFBbUIsSUFBQSxPQUFPLEVBQUU7QUFBNUIsR0FBdkI7QUFFQSxFQUFBLFFBQVEsQ0FBQyxPQUFULENBQWlCLFFBQWpCLEVBQTJCLGNBQTNCO0FBQ0EsQ0F0QkQiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJjb25zdCBkZWZhdWx0TnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xyXG5jbGFzcyBCYXNlIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMubGlzdGVuZXJzID0ge307XHJcblx0fVx0XHJcblx0bWFrZUVsZW1lbnQobmFtZSwgLi4uYXR0cmlicykge1xyXG5cdFx0bGV0IGVsZW07XHJcblx0XHRpZiAoKGF0dHJpYnMgJiYgYXR0cmlic1swXSAmJiBhdHRyaWJzWzBdLnhtbG5zKSB8fCAobmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzdmcnKSkge1xyXG5cdFx0XHRjb25zdCBhdHRyTnMgPSBhdHRyaWJzWzBdLnhtbG5zO1xyXG5cdFx0XHRjb25zdCBucyA9IHR5cGVvZiBhdHRyTnMgPT09ICdzdHJpbmcnID8gYXR0ck5zIDogZGVmYXVsdE5zO1xyXG5cdFx0XHRlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCBuYW1lKTtcclxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgYXR0ck5zKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGF0dHJpYnMuc2xpY2UoMCkuZm9yRWFjaChhdHRyaWJ1dGUgPT4ge1xyXG5cdFx0XHRpZih0eXBlb2YoYXR0cmlidXRlKT09PSdzdHJpbmcnKSB7XHJcblx0XHRcdFx0YXR0cmlidXRlLnNwbGl0KCcgJykuZm9yRWFjaChjbGFzc05hbWUgPT4gZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSkpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGF0dHJpYnV0ZSBpbnN0YW5jZW9mIE5vZGUgfHwgYXR0cmlidXRlIGluc3RhbmNlb2YgQXJyYXkgKSB7XHJcblx0XHRcdFx0W10uY29uY2F0KGF0dHJpYnV0ZSkuZm9yRWFjaChub2RlID0+IHtcclxuXHRcdFx0XHRcdGlmIChub2RlKSBlbGVtLmFwcGVuZENoaWxkKCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5vZGUgPT09ICdudW1iZXInKSA/IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGUpIDogbm9kZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gZWxzZSBpZih0eXBlb2YoYXR0cmlidXRlKT09PSdvYmplY3QnKSB7XHJcblx0XHRcdFx0Zm9yKGNvbnN0IGsgaW4gYXR0cmlidXRlKSB7XHJcblx0XHRcdFx0XHRlbGVtW2tdID0gYXR0cmlidXRlW2tdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGVsZW07XHJcblx0fVxyXG5cclxuXHRtYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcblx0XHRpZiAoZWxlbWVudC5tYXRjaGVzKSB7XHJcblx0XHRcdHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xyXG5cdFx0fSBlbHNlIGlmIChlbGVtZW50Lm1hdGNoZXNTZWxlY3Rvcikge1xyXG5cdFx0XHRyZXR1cm4gZWxlbWVudC5tYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG5cdFx0fSBlbHNlIGlmIChlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yKSB7XHJcblx0XHRcdHJldHVybiBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcclxuXHRcdH0gZWxzZSBpZiAoZWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3IpIHtcclxuXHRcdFx0cmV0dXJuIGVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHN1YnNjcmliZShldmVudE5hbWUsIGxpc3RlbmVyLCBjb250ZXh0KSB7XHJcblx0XHQodGhpcy5saXN0ZW5lcnNbZXZlbnROYW1lXSA9IHRoaXMubGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW10pLnB1c2goe1xyXG5cdFx0XHRmdW5jOiBsaXN0ZW5lcixcclxuXHRcdFx0Y29udGV4dDogY29udGV4dFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRlbWl0KGV2ZW50TmFtZSwgLi4uYXJnKSB7XHJcblx0XHRmb3IoY29uc3QgbGlzdGVuZXIgb2YgKHRoaXMubGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW10pKSB7XHJcblx0XHRcdGxpc3RlbmVyLmZ1bmMuYXBwbHkobGlzdGVuZXIuY29udGV4dCwgYXJnKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2U7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vYmFzZSc7XHJcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XHJcblxyXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2V9IGZyb20gJy4vYmFzZSc7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmlld30gZnJvbSAnLi92aWV3JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRCYXNlLFxyXG5cdFZpZXdcclxufTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlJztcclxuXHJcbmNsYXNzIFZpZXcgZXh0ZW5kcyBCYXNlIHtcclxuXHRjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5lbCA9IHR5cGVvZihhcmdzWzBdKT09PSdzdHJpbmcnID8gdGhpcy5tYWtlRWxlbWVudCguLi5hcmd1bWVudHMpIDogYXJnc1swXTtcclxuXHR9XHJcblxyXG5cdHF1ZXJ5KHF1ZXJ5KSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpKTtcclxuXHR9XHJcblxyXG5cdGFkZExpc3RlbmVyKHR5cGUsIG1hdGNoLCBtZXRob2QpIHtcclxuXHRcdFxyXG5cdFx0bGV0IGVsZW0gPSB0aGlzLmVsO1xyXG5cdFx0bGV0IGNhbGxiYWNrID0gbWV0aG9kO1xyXG5cdFx0bGV0IG1hdGNoU2VsZWN0b3IgPSBtYXRjaDtcclxuXHJcblx0XHRpZih0eXBlb2YobWF0Y2gpID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGNhbGxiYWNrID0gbWF0Y2g7XHJcblx0XHRcdG1hdGNoU2VsZWN0b3IgPSBudWxsO1xyXG5cdFx0fSBlbHNlIGlmKG1hdGNoID09PSBkb2N1bWVudCB8fCBtYXRjaCA9PSB3aW5kb3cgKSB7XHJcblx0XHRcdGVsZW0gPSBtYXRjaDtcclxuXHRcdFx0bWF0Y2hTZWxlY3RvciA9IG51bGw7XHJcblx0XHR9IGVsc2UgaWYgKG1hdGNoID09PSAnYm9keScpIHtcclxuXHRcdFx0ZWxlbSA9IGRvY3VtZW50LmJvZHk7XHJcblx0XHRcdG1hdGNoU2VsZWN0b3IgPSBudWxsO1xyXG5cdFx0fSBlbHNlIGlmIChtYXRjaCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuXHRcdFx0ZWxlbSA9IG1hdGNoO1xyXG5cdFx0XHRtYXRjaFNlbGVjdG9yID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBldmVudExpc3RlbmVyID0gZSA9PiB7XHJcblx0XHRcdGlmICghbWF0Y2hTZWxlY3Rvcikge1xyXG5cdFx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIGUsIHRoaXMuZWwpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5xdWVyeShtYXRjaFNlbGVjdG9yKTtcclxuXHRcdFx0Y29uc3QgZWxlbWVudCA9IGVsZW1lbnRzLmZpbmQoIGl0ZW0gPT4gaXRlbS5jb250YWlucyhlLnRhcmdldCkpO1xyXG5cdFx0XHRpZiAoZWxlbWVudCkge1xyXG5cdFx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIGUsIGVsZW1lbnQpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudExpc3RlbmVyKTtcdFx0XHRcclxuXHR9XHJcblxyXG5cdHJlbW92ZSgpIHtcclxuXHRcdHRoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZpZXc7XHJcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5XSEFUV0dGZXRjaCA9IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBzdXBwb3J0ID0ge1xuICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICBibG9iOlxuICAgICAgJ0ZpbGVSZWFkZXInIGluIHNlbGYgJiZcbiAgICAgICdCbG9iJyBpbiBzZWxmICYmXG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3IEJsb2IoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gc2VsZixcbiAgICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBzZWxmXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgfVxuXG4gIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgXTtcblxuICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgIH1cbiAgICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgfVxuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuICBmdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICAgIHZhciBpdGVyYXRvciA9IHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpO1xuICAgICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvclxuICB9XG5cbiAgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdGhpcy5tYXAgPSB7fTtcblxuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV07XG4gICAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWU7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGl0ZW1zLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfTtcblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICAgIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gICAgfVxuICAgIGJvZHkuYm9keVVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICAgIH07XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKTtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gIH1cblxuICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpO1xuICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSk7XG4gICAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBCb2R5KCkge1xuICAgIHRoaXMuYm9keVVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5O1xuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpO1xuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gY29uc3VtZWQodGhpcykgfHwgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxuICB2YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXTtcblxuICBmdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gICAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG4gIH1cblxuICBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHk7XG5cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgIH1cbiAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsO1xuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzO1xuICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycyk7XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZDtcbiAgICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGU7XG4gICAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbDtcbiAgICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0O1xuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbic7XG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJyk7XG4gICAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsO1xuICAgIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWw7XG4gICAgdGhpcy5yZWZlcnJlciA9IG51bGw7XG5cbiAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgfVxuICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpO1xuICB9XG5cbiAgUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbiAgfTtcblxuICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgYm9keVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCcmJylcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gICAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJyk7XG4gICAgcHJlUHJvY2Vzc2VkSGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpO1xuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpO1xuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKTtcblxuICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0JztcbiAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1cztcbiAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICdzdGF0dXNUZXh0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXNUZXh0IDogJ09LJztcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJyc7XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpO1xuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSk7XG5cbiAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfTtcblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pO1xuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InO1xuICAgIHJldHVybiByZXNwb25zZVxuICB9O1xuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XTtcblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9O1xuXG4gIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gc2VsZi5ET01FeGNlcHRpb247XG4gIHRyeSB7XG4gICAgbmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKTtcbiAgICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICB9O1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBleHBvcnRzLkRPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBleHBvcnRzLkRPTUV4Y2VwdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cblxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJyk7XG4gICAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IGV4cG9ydHMuRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpO1xuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyICYmIHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpO1xuICAgIH0pXG4gIH1cblxuICBmZXRjaC5wb2x5ZmlsbCA9IHRydWU7XG5cbiAgaWYgKCFzZWxmLmZldGNoKSB7XG4gICAgc2VsZi5mZXRjaCA9IGZldGNoO1xuICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnM7XG4gICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdDtcbiAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIH1cblxuICBleHBvcnRzLkhlYWRlcnMgPSBIZWFkZXJzO1xuICBleHBvcnRzLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICBleHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG4gIGV4cG9ydHMuZmV0Y2ggPSBmZXRjaDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwiaW1wb3J0IFwid2hhdHdnLWZldGNoXCI7XHJcbmltcG9ydCAnLi9saWJzL3RlbXBsYXRlLXBvbHlmaWxsJztcclxuaW1wb3J0IHsgVmlldyB9IGZyb20gJ0BhcHBzdHJhY3Rkay9hcy1jb3JlJztcclxuaW1wb3J0IEhlYWRlciBmcm9tICcuL2NvbXBvbmVudHMvaGVhZGVyJztcclxuaW1wb3J0IEFjY29yZGlvbiBmcm9tICcuL2NvbXBvbmVudHMvYWNjb3JkaW9uJztcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9kcm9wZG93bic7XHJcblxyXG5jbGFzcyBBcHAgZXh0ZW5kcyBWaWV3IHtcclxuXHRjb25zdHJ1Y3RvcihlbCkge1xyXG5cdFx0c3VwZXIoZWwpO1xyXG5cdFx0aWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmRhcmstZm9udFwiKSkge1xyXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmhlYWRlclwiKS5jbGFzc0xpc3QuYWRkKFwid2hpdGUtZm9udFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmRhdGEgPSB7fTtcclxuXHRcdHRoaXMuZGF0YVtcImRyb3Bkb3duc1wiXSA9IHt9O1xyXG5cclxuXHRcdGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcclxuXHRcdGNvbnN0IGNvbXBvbmVudHNXaXRoSGFuZGxlciA9IFtIZWFkZXJdO1xyXG5cdFx0dGhpcy5sb2FkKGNvbXBvbmVudHMpO1xyXG5cdFx0dGhpcy5sb2FkV2l0aEhhbmRsZXIoY29tcG9uZW50c1dpdGhIYW5kbGVyKTtcclxuXHRcdEFjY29yZGlvbi5pbml0KCk7XHJcblx0fVxyXG5cclxuXHRsb2FkKGNvbXBvbmVudHMpIHtcclxuXHRcdGlmIChjb21wb25lbnRzLmxlbmd0aCkge1xyXG5cdFx0XHRjb21wb25lbnRzLmZvckVhY2goYyA9PiBjLmluaXQgJiYgYy5pbml0KCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRsb2FkV2l0aEhhbmRsZXIoY29tcG9uZW50c1dpdGhIYW5kbGVyKSB7XHJcblx0XHRpZiAoY29tcG9uZW50c1dpdGhIYW5kbGVyLmxlbmd0aCkge1xyXG5cdFx0XHRjb21wb25lbnRzV2l0aEhhbmRsZXIuZm9yRWFjaChjID0+IGMuaW5pdCAmJiBjLmluaXQodGhpcykpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWZEcm9wZG93bkFscmVhZHlFeGlzdHNJbkhhbmRsZXJSZW5hbWVJdChkcm9wZG93bnMsIG5hbWUpIHtcclxuXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZHJvcGRvd25zLCBuYW1lKSkge1xyXG5cdFx0XHRuYW1lID0gbmFtZSArIFwiQlwiO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5pZkRyb3Bkb3duQWxyZWFkeUV4aXN0c0luSGFuZGxlclJlbmFtZUl0KGRyb3Bkb3ducywgbmFtZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5hbWU7XHJcblx0fVxyXG5cclxuXHJcblx0aW5pdERyb3Bkb3duKGRyb3Bkb3duLCBsaWJyYXJ5LCBrZWVwT3Blbk9uU2VsZWN0T3B0aW9uLCBoYXNTZWFyY2gpIHtcclxuXHRcdGlmICghZHJvcGRvd24pIHsgcmV0dXJuIH1cclxuXHJcblx0XHRjb25zdCBzZWxlY3RGaWVsZCA9IGRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoXCIuanMtc2VsZWN0LWZpZWxkXCIpO1xyXG5cdFx0bGV0IG9wdGlvbnNOYW1lID0gc2VsZWN0RmllbGQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcHRpb25zLW5hbWVcIik7XHJcblxyXG5cdFx0bGV0IGZpZWxkcyA9IFtdO1xyXG5cdFx0bGV0IGRyb3Bkb3ducyA9IHRoaXMuZGF0YVtcImRyb3Bkb3duc1wiXTtcclxuXHJcblx0XHRjb25zdCBuYW1lID0gdGhpcy5pZkRyb3Bkb3duQWxyZWFkeUV4aXN0c0luSGFuZGxlclJlbmFtZUl0KGRyb3Bkb3ducywgb3B0aW9uc05hbWUpO1xyXG5cclxuXHRcdGRyb3Bkb3duc1tuYW1lXSA9IHt9O1xyXG5cdFx0ZHJvcGRvd25zW25hbWVdW1wibWFya3VwXCJdID0gW107XHJcblxyXG5cdFx0aWYgKHNlbGVjdEZpZWxkLm9wdGlvbnMubGVuZ3RoIDwgMSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RGaWVsZC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IHNlbGVjdEZpZWxkT3B0aW9uID0gc2VsZWN0RmllbGQub3B0aW9uc1tpXTtcclxuXHJcblx0XHRcdGlmIChzZWxlY3RGaWVsZE9wdGlvbi5kaXNhYmxlZCkgeyBjb250aW51ZTsgfVxyXG5cdFx0XHRpZiAoc2VsZWN0RmllbGRPcHRpb24uc2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRkcm9wZG93bnNbbmFtZV1bXCJzZWxlY3RlZFwiXSA9IHNlbGVjdEZpZWxkT3B0aW9uLmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBvYmogPSB7fTtcclxuXHRcdFx0b2JqLlZhbHVlID0gc2VsZWN0RmllbGRPcHRpb24udmFsdWU7XHJcblx0XHRcdG9iai5UZXh0ID0gc2VsZWN0RmllbGRPcHRpb24uaW5uZXJIVE1MO1xyXG5cdFx0XHRvYmouTmFtZSA9IHNlbGVjdEZpZWxkLmdldEF0dHJpYnV0ZShcImRhdGEtb3B0aW9ucy1uYW1lXCIpO1xyXG5cclxuXHRcdFx0Ly8gQWRkIGFsbCBkYXRhdHlwZXMgdG8gb3VyIGRyb3Bkb3duIG9iamVjdFxyXG5cdFx0XHRmb3IgKGxldCBpIGluIHNlbGVjdEZpZWxkT3B0aW9uLmRhdGFzZXQpIHtcclxuXHRcdFx0XHRvYmpbaV0gPSBzZWxlY3RGaWVsZE9wdGlvbi5kYXRhc2V0W2ldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmaWVsZHMucHVzaChvYmopO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGluaXQgPSBuZXcgRHJvcGRvd24oZHJvcGRvd24sIGZpZWxkcywgdGhpcywgbGlicmFyeSwga2VlcE9wZW5PblNlbGVjdE9wdGlvbiwgaGFzU2VhcmNoKTtcclxuXHJcblx0XHRkcm9wZG93bnNbbmFtZV1bXCJjbGFzc1wiXSA9IGluaXQ7XHJcblx0fVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXBwO1xyXG4iLCLvu79pbXBvcnQgeyBWaWV3IH0gZnJvbSAnQGFwcHN0cmFjdGRrL2FzLWNvcmUnO1xyXG5cclxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XHJcblx0YWNjb3JkaW9uRm9sZENvbnRhaW5lclNlbGVjdG9yOiAnLmFjY29yZGlvbi1mb2xkLWNvbnRhaW5lcicsXHJcblx0YWNjb3JkaW9uRm9sZFNlbGVjdG9yOiAnLmFjY29yZGlvbi1mb2xkJyxcclxuXHRhY2NvcmRpb25BY3RpdmVDbGFzczogJ2FjdGl2ZScsXHJcblx0YWNjb3JkaW9uTGluazogJ2FjY29yZGlvbi1pdGVtLWxpbmsnXHJcbn1cclxuY2xhc3MgQWNjb3JkaW9uIGV4dGVuZHMgVmlldyB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGVsLCBvcHRpb25zKSB7XHJcblx0XHRzdXBlcihlbCk7XHJcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8gb3B0aW9ucyA6IGRlZmF1bHRPcHRpb25zO1xyXG5cdFx0Y29uc3QgZm9sZCA9IHRoaXMuZWwucXVlcnlTZWxlY3Rvcih0aGlzLm9wdGlvbnMuYWNjb3JkaW9uRm9sZFNlbGVjdG9yKTtcclxuXHRcdGlmICghZm9sZCkgeyByZXR1cm47IH1cclxuXHJcblx0XHR0aGlzLmFjY29yZGlvbkJ1dHRvbiA9IHRoaXMuZWwuY2hpbGRyZW5bMV07XHJcblx0XHRjb25zdCBpc1RpbWVsaW5lVHlwZSA9IHRoaXMuYWNjb3JkaW9uQnV0dG9uLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLm9wdGlvbnMuYWNjb3JkaW9uTGluayk7XHJcblx0XHRjb25zdCBtaW5BY2NvcmRpb25IZWlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCA/IDQ2IDogNDY7XHJcblx0XHR0aGlzLmhlaWdodExpbWl0ID0gaXNUaW1lbGluZVR5cGUgPyBtaW5BY2NvcmRpb25IZWlnaHQgOiAwO1xyXG5cclxuXHRcdHRoaXMuYWRkTGlzdGVuZXIoJ2NsaWNrJywgJy5hY2NvcmRpb24tYnV0dG9uJywgdGhpcy5vbkFjY29yZGlvblRvZ2dsZS5iaW5kKHRoaXMpKTtcclxuXHJcblx0XHRpZiAodGhpcy5lbC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcclxuXHRcdFx0dGhpcy50b2dnbGVBY2NvcmRpb24odHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvbkFjY29yZGlvblRvZ2dsZSgpIHtcclxuXHRcdGlmICh0aGlzLmVsLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHRcdFx0dGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcclxuXHRcdFx0dGhpcy50b2dnbGVBY2NvcmRpb24oZmFsc2UpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy50b2dnbGVBY2NvcmRpb24oKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHR0b2dnbGVBY2NvcmRpb24ob3Blbikge1xyXG5cdFx0Y29uc3QgYWNjb3JkaW9uRm9sZENvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3Rvcih0aGlzLm9wdGlvbnMuYWNjb3JkaW9uRm9sZENvbnRhaW5lclNlbGVjdG9yKTtcclxuXHRcdGxldCBhZGRlZFBhZGRpbmdPbkFjY29yZGlvbkhlaWdodDtcclxuXHJcblx0XHRpZiAob3BlbiA9PT0gdW5kZWZpbmVkIHx8IG9wZW4pIHtcclxuXHRcdFx0Y29uc3QgYWNjb3JkaW9uSGVpZ2h0ID0gWy4uLnRoaXMuZWwucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuYWNjb3JkaW9uRm9sZFNlbGVjdG9yKV0ubWFwKGNvbnRhaW5lciA9PiBwYXJzZUludChjb250YWluZXIub2Zmc2V0SGVpZ2h0KSkucmVkdWNlKCh0b3RhbCwgYW1vdW50KSA9PiB0b3RhbCArIGFtb3VudCk7XHJcblx0XHRcdGFkZGVkUGFkZGluZ09uQWNjb3JkaW9uSGVpZ2h0ID0gYWNjb3JkaW9uSGVpZ2h0ICsgNTA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG9wZW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVsLmNsYXNzTGlzdC50b2dnbGUodGhpcy5vcHRpb25zLmFjY29yZGlvbkFjdGl2ZUNsYXNzKTtcclxuXHRcdH0gZWxzZSBpZiAob3Blbikge1xyXG5cdFx0XHR0aGlzLmVsLmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmFjY29yZGlvbkFjdGl2ZUNsYXNzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuYWNjb3JkaW9uQWN0aXZlQ2xhc3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lbC5jbGFzc0xpc3QuY29udGFpbnModGhpcy5vcHRpb25zLmFjY29yZGlvbkFjdGl2ZUNsYXNzKTtcclxuXHRcdGFjY29yZGlvbkZvbGRDb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gYCR7aXNBY3RpdmUgPyBhZGRlZFBhZGRpbmdPbkFjY29yZGlvbkhlaWdodCA6IHRoaXMuaGVpZ2h0TGltaXR9cHhgO1xyXG5cdH1cclxuXHJcblxyXG5cdGV4cG9zZUJ1dHRvbihoZWlnaHQsIGxpbWl0KSB7XHJcblx0XHRpZiAoaGVpZ2h0ID4gbGltaXQpIHtcclxuXHRcdFx0dGhpcy5hY2NvcmRpb25CdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHN0YXRpYyBpbml0KHNlbGVjdG9yID0gJy5hY2NvcmRpb246bm90KC5zZWxmLW1vdW50KScsIGJhc2UgPSBkb2N1bWVudCwgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gWy4uLmJhc2UucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildLm1hcChub2RlID0+IG5ldyBBY2NvcmRpb24obm9kZSwgb3B0aW9ucykpO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFjY29yZGlvbjtcclxuIiwi77u/aW1wb3J0IHsgVmlldyB9IGZyb20gJ0BhcHBzdHJhY3Rkay9hcy1jb3JlJztcclxuaW1wb3J0IHN0cmluZ1RvSFRNTCBmcm9tICcuLi9saWJzL3N0cmluZ1RvSFRNTCc7XHJcbmltcG9ydCBwb3NpdGlvbkRyb3Bkb3duIGZyb20gJy4vbWlzYy9wb3NpdGlvbi1kcm9wZG93bic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93biBleHRlbmRzIFZpZXcge1xyXG5cdGNvbnN0cnVjdG9yKGVsLCBkYXRhLCBoYW5kbGVyLCBsaWJyYXJ5LCBrZWVwT3Blbk9uU2VsZWN0T3B0aW9uID0gZmFsc2UsIGhhc1NlYXJjaCA9IHRydWUsIHdpdGhvdXRMaXN0ZW5lcnMgPSBmYWxzZSkge1xyXG5cdFx0c3VwZXIoZWwpO1xyXG5cdFx0Y29uc3QgZGljdGlvbmFyeVRlbXBsYXRlTm9kZSA9IGRvY3VtZW50LmltcG9ydE5vZGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNkZWZhdWx0LWRpY3Rpb25hcnktdGVtcGxhdGVcIikuY29udGVudCwgdHJ1ZSkucXVlcnlTZWxlY3RvcihcIi5kZWZhdWx0LWRpY3Rpb25hcnktdGVtcGxhdGVcIik7XHJcblx0XHR0aGlzLmRpY3Rpb25hcnlUZW1wbGF0ZSA9IGRpY3Rpb25hcnlUZW1wbGF0ZU5vZGUuY2xvbmVOb2RlKHRydWUpO1xyXG5cclxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XHJcblx0XHR0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xyXG5cdFx0dGhpcy5saWJyYXJ5ID0gbGlicmFyeTtcclxuXHRcdHRoaXMuaGFzU2VhcmNoID0gaGFzU2VhcmNoO1xyXG5cdFx0dGhpcy53aXRob3V0TGlzdGVuZXJzID0gd2l0aG91dExpc3RlbmVycztcclxuXHRcdHRoaXMua2VlcE9wZW5PblNlbGVjdE9wdGlvbiA9IGtlZXBPcGVuT25TZWxlY3RPcHRpb247XHJcblx0XHR0aGlzLmRyb3Bkb3duVHlwZSA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS10eXBlXCIpIHx8ICdkZWZhdWx0JztcclxuXHRcdFxyXG5cdFx0dGhpcy5oYXNEcm9wZG93biA9IGZhbHNlO1xyXG5cdFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jaGVja2VkQWxsU3RhdGUgPSB0cnVlO1xyXG5cdFx0dGhpcy5vcHRpb25zID0gW107XHJcblx0XHR0aGlzLnNlbGVjdCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5qcy1zZWxlY3QtZmllbGRcIik7XHJcblx0XHR0aGlzLm9wdGlvbk5hbWUgPSB0aGlzLnNlbGVjdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9wdGlvbnMtbmFtZVwiKTtcclxuXHRcdHRoaXMuYXJyb3dTdHlsZSA9IHRoaXMuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2ltcGxlXCIpID8gXHJcblx0XHRgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1LjY2OCA0LjA3XCIgY2xhc3M9XCJhcnJvdy1kb3duIHNlbGVjdF9udW1iZXJfYXJyb3dcIj5cclxuXHRcdFx0PHBhdGggaWQ9XCJQYXRoXzc4ODVcIiBkYXRhLW5hbWU9XCJQYXRoIDc4ODVcIiBkPVwiTTIuODI5LDAsNS42NjgsNC4wNzFIMFpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNS42NjggNC4wNykgcm90YXRlKDE4MClcIiBvcGFjaXR5PVwiMC42XCIvPlxyXG5cdFx0PC9zdmc+YFxyXG5cdFx0OiBcclxuXHRcdGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0LjEyMSA4LjEyMVwiIGNsYXNzPVwiYXJyb3ctZG93biBhcnJvd19kb3duX2JsYWNrXCI+XHJcblx0XHRcdDxnIGlkPVwiR3JvdXBfMTExMzdcIiBkYXRhLW5hbWU9XCJHcm91cCAxMTEzN1wiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxLjA2MSAxLjA2MSlcIj5cclxuXHRcdFx0PGxpbmUgaWQ9XCJMaW5lXzVcIiBkYXRhLW5hbWU9XCJMaW5lIDVcIiB4Mj1cIjZcIiB5Mj1cIjZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDFmMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG5cdFx0XHQ8bGluZSBpZD1cIkxpbmVfNlwiIGRhdGEtbmFtZT1cIkxpbmUgNlwiIHgxPVwiNlwiIHkyPVwiNlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2KVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMWYyNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcblx0XHRcdDwvZz5cclxuXHRcdDwvc3ZnPmA7XHJcblxyXG5cclxuXHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSB0aGlzLnRvZ2dsZURyb3Bkb3duLmJpbmQodGhpcyk7XHJcblx0XHR0aGlzLnJlbW92ZURyb3Bkb3duID0gdGhpcy5yZW1vdmVEcm9wZG93bi5iaW5kKHRoaXMpO1xyXG5cdFx0dGhpcy5zZWxlY3RPcHRpb24gPSB0aGlzLnNlbGVjdE9wdGlvbi5iaW5kKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMuaW5pdFNlbGVjdE9wdGlvbnMoKTtcclxuXHRcdHRoaXMucHJlc2V0T3B0aW9uVmFsdWUoKTtcclxuXHJcblxyXG5cdFx0aWYodGhpcy53aXRob3V0TGlzdGVuZXJzKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5uaWNlZm9ybS1zZWxlY3RcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMudG9nZ2xlRHJvcGRvd24sIHRydWUpO1xyXG5cdFx0Ly8gZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5yZW1vdmVEcm9wZG93biwgdHJ1ZSk7XHJcblx0XHRbLi4udGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmRyb3Bkb3duLXNlbGVjdGlvblwiKV0uZm9yRWFjaChvcHRpb24gPT4ge1xyXG5cdFx0XHRvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuc2VsZWN0T3B0aW9uLCB0cnVlKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCBcImJvZHlcIiwgdGhpcy5yZW1vdmVEcm9wZG93bik7XHJcblx0XHQvL3RoaXMuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCBcIi5kcm9wZG93bi1zZWxlY3Rpb25cIiwgdGhpcy5zZWxlY3RPcHRpb24pO1xyXG5cclxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuZGVib3VuY2UodGhpcy5vblJlc2l6ZS5iaW5kKHRoaXMpLCA1MCksIHRydWUpO1xyXG5cdH1cclxuXHJcblx0c2VsZWN0T3B0aW9uKGUsIHRhcmdldCkge1xyXG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHR0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcblx0XHRcclxuXHRcdGlmKHRoaXMuaGFuZGxlci5pc0xvYWRpbmcpIHsgcmV0dXJuOyB9XHJcblx0XHRcclxuXHRcdGNvbnN0IGFjdGl2ZVNlbGVjdGlvbiA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5kcm9wZG93bi1zZWxlY3Rpb24uc2VsZWN0ZWRcIik7XHJcblx0XHRpZiAoYWN0aXZlU2VsZWN0aW9uKSB7IGFjdGl2ZVNlbGVjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0ZWRcIik7IH1cclxuXHRcdHRoaXMudXBkYXRlRWxlbSh0YXJnZXQsIHRhcmdldC5kYXRhc2V0LmlkeCk7XHJcblx0XHRcclxuXHRcdHRoaXMubGlicmFyeS5lbWl0KFwiT25Ecm9wZG93blNlbGVjdFwiLCB0YXJnZXQsIHRoaXMuZWwpO1xyXG5cclxuXHRcdGlmKHRoaXMuZHJvcGRvd25UeXBlID09PSAnbG9jYXRpb25zJykge1xyXG5cdFx0XHR0aGlzLmxpYnJhcnkuZW1pdChcIk9uTG9jYXRpb25Ecm9wZG93bkl0ZW1TZWxlY3RcIiwgdGFyZ2V0KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZih0aGlzLmRyb3Bkb3duVHlwZSA9PT0gJ2NvdW50cmllcycpIHtcclxuXHRcdFx0dGhpcy5saWJyYXJ5LmVtaXQoXCJPbkNvdW50cmllc0Ryb3Bkb3duSXRlbVNlbGVjdFwiLCB0YXJnZXQpO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRpZih0aGlzLmtlZXBPcGVuT25TZWxlY3RPcHRpb24pIHsgcmV0dXJuOyB9XHJcblxyXG5cdFx0dGhpcy50b2dnbGVEcm9wZG93bihlKTtcclxuXHJcblx0XHRpZih0aGlzLmVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVsb2FkLXVybFwiKSkge1xyXG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS12YWx1ZVwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGluaXRTZWxlY3RPcHRpb25zKCkge1xyXG5cdFx0Ly90aGlzLmRhdGEuZm9yRWFjaChvYmogPT4gdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoc3RyaW5nVG9IVE1MKGA8b3B0aW9uIHZhbHVlPSR7b2JqLlZhbHVlfT4ke29iai5UZXh0fTwvb3B0aW9uPmApKSk7XHJcblx0XHR0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5zZWxlY3QucXVlcnlTZWxlY3RvckFsbChcIm9wdGlvblwiKV07XHJcblx0fVxyXG5cclxuXHRwcmVzZXRPcHRpb25WYWx1ZSgpIHtcclxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVyLmRhdGFbXCJkcm9wZG93bnNcIl1bdGhpcy5vcHRpb25OYW1lXVtcInNlbGVjdGVkXCJdO1xyXG5cclxuXHRcdHRoaXMuY3JlYXRlRHJvcGRvd24oKTtcclxuXHJcblx0XHRsZXQgZHJvcGRvd25PcHRpb24gPSBbLi4udGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmRyb3Bkb3duLXNlbGVjdGlvblwiKV0uZmluZChvcHQgPT4gb3B0LmRhdGFzZXQuaWR4ID09PSB2YWx1ZSk7XHJcblx0XHRpZiAoIWRyb3Bkb3duT3B0aW9uKSB7XHJcblx0XHRcdGRyb3Bkb3duT3B0aW9uID0gWy4uLnRoaXMuZWwucXVlcnlTZWxlY3RvckFsbChcIi5kcm9wZG93bi1zZWxlY3Rpb25cIildWzBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudXBkYXRlRWxlbShkcm9wZG93bk9wdGlvbiwgdmFsdWUpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlRHJvcGRvd24oKSB7XHJcblx0XHRjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5uaWNlZm9ybS1zZWxlY3Qtd3JhcHBlclwiKTtcclxuXHRcdGlmKHBsYWNlaG9sZGVyKSB7XHJcblx0XHRcdHBsYWNlaG9sZGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG1hcmt1cCA9IGBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2Vmb3JtLXNlbGVjdC13cmFwcGVyXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm5pY2Vmb3JtLXNlbGVjdCBjLWZpZWxkXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibmljZWZvcm0tc2VsZWN0LXRleHQtY29udGFpbmVyXCI+XHJcblx0XHRcdFx0XHRcdDxzdmcgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24taXRlbS1pY29uXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj5cclxuXHRcdFx0XHRcdFx0XHQ8dXNlIHhsaW5rOmhyZWY9XCIvZGlzdC9pbWFnZXMvJHt0aGlzLmRyb3Bkb3duVHlwZSA9PT0gJ2xvY2F0aW9ucycgPyBgcGxhY2Vob2xkZXJgIDogYGVuYH0uc3ZnXCI+PC91c2U+XHJcblx0XHRcdFx0XHRcdDwvc3ZnPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibmljZWZvcm0tc2VsZWN0LXRleHRcIj48L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0JHt0aGlzLmFycm93U3R5bGV9XHRcdFx0XHRcdFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmljZWZvcm0tb3B0aW9ucyBjLWZpZWxkXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibmljZWZvcm0tb3B0aW9ucy1ob2xkZXIgb3B0aW9ucy1ob2xkZXJcIj5cclxuXHRcdFx0XHRcdFx0JHt0aGlzLmhhc1NlYXJjaCA/IFxyXG5cdFx0XHRcdFx0XHRcdGA8ZGl2IGNsYXNzPVwibmljZWZvcm0tb3B0aW9uLXNlYXJjaC1jb250YWluZXIgb3B0aW9ucy1ob2xkZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibmljZWZvcm0tb3B0aW9uLXNlYXJjaC1pbnB1dCBvcHRpb25zLWhvbGRlclwiIHBsYWNlaG9sZGVyPVwiJHt0aGlzLmRpY3Rpb25hcnlUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1wbGFjZWhvbGRlci1cIiArIHRoaXMuZHJvcGRvd25UeXBlKS5pbm5lckhUTUx9XCIgdmFsdWU9XCJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJuaWNlZm9ybS1vcHRpb24tc2VhcmNoLWljb24gc2VhcmNoXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5gXHJcblx0XHRcdFx0XHRcdFx0OiBcclxuXHRcdFx0XHRcdFx0XHRcIlwiXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm5pY2Vmb3JtLW9wdGlvbnMtaG9sZGVyLXNjcm9sbGJhci1jb250YWluZXIgb3B0aW9ucy1ob2xkZXJcIj5cclxuXHRcdFx0XHRcdFx0XHQke3RoaXMuZGF0YS5tYXAob2JqID0+IHRoaXNbdGhpcy5kcm9wZG93blR5cGVdKG9iaikpLmpvaW4oXCJcIil9XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGA7XHJcblx0XHR0aGlzLmVsLmFwcGVuZENoaWxkKHN0cmluZ1RvSFRNTChtYXJrdXApKTtcclxuXHJcblx0XHR0aGlzLnNlYXJjaElucHV0ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLm5pY2Vmb3JtLW9wdGlvbi1zZWFyY2gtaW5wdXRcIik7XHJcblx0XHR0aGlzLm9wdGlvbnNMaXN0ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLm5pY2Vmb3JtLW9wdGlvbnMtaG9sZGVyLXNjcm9sbGJhci1jb250YWluZXIub3B0aW9ucy1ob2xkZXJcIik7XHJcblx0XHR0aGlzLmRyb3Bkb3duQ29udGFpbmVyID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLm5pY2Vmb3JtLW9wdGlvbnMtaG9sZGVyXCIpO1xyXG5cclxuXHRcdGlmKHRoaXMuc2VhcmNoSW5wdXQpIHtcclxuXHRcdFx0dGhpcy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuZmlsdGVyT3B0aW9uTGlzdFdoZW5UeXBlLmJpbmQodGhpcykpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblxyXG5cdFx0dGhpcy5zZWxlY3RlZFBsYWNlSG9sZGVyVGV4dCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcIi5uaWNlZm9ybS1zZWxlY3QtdGV4dC1jb250YWluZXJcIik7XHJcblx0XHR0aGlzLmhhc0Ryb3Bkb3duID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdG9uUmVzaXplKCkge1xyXG5cdFx0aWYgKCF0aGlzLmlzQWN0aXZlKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdHBvc2l0aW9uRHJvcGRvd24odGhpcy5kcm9wZG93bkNvbnRhaW5lciwgdGhpcy5lbCwgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0ZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XHJcbiAgICAgICAgaWYgKGltbWVkaWF0ZSA9PT0gdm9pZCAwKSB7IGltbWVkaWF0ZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgdmFyIHRpbWVvdXQ7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgICAgICB0aW1lb3V0ICE9PSBudWxsICYmIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICAgICAgfSwgd2FpdCk7XHJcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGUgJiYgIXRpbWVvdXQpXHJcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG5cdGZpbHRlck9wdGlvbkxpc3RXaGVuVHlwZShldmVudCkge1xyXG5cdFx0Y29uc3Qga2V5d29yZCA9IHRoaXMuc2VhcmNoSW5wdXQudmFsdWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdGxldCBmaWx0ZXJlZCA9IHRoaXMuaGFuZGxlci5kYXRhLmRyb3Bkb3duc1t0aGlzLm9wdGlvbk5hbWVdLm1hcmt1cFxyXG5cdFx0XHQuZmlsdGVyKG9iaiA9PiB7XHJcblx0XHRcdFx0bGV0IHRpdGxlID0gb2JqLnRpdGxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0aWYodGl0bGUuaW5kZXhPZihrZXl3b3JkKSA+IC0xKXtcclxuXHRcdFx0XHRcdHJldHVybiBvYmo7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFxyXG5cdFx0dGhpcy5yZW5kZXJMaXN0KGZpbHRlcmVkKTtcclxuXHJcblx0fVxyXG5cclxuXHRyZW5kZXJMaXN0KGxpc3Qpe1xyXG5cdFx0aWYobGlzdC5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHJcblx0XHRcdHRoaXMub3B0aW9uc0xpc3QuaW5uZXJIVE1MID0gXHJcblx0XHRcdFx0YDxkaXYgY2xhc3M9XCJuaWNlZm9ybS1vcHRpb24gZHJvcGRvd24tc2VsZWN0aW9uIG5vLXJlc3VsdHNcIj5cclxuXHRcdFx0XHRcdDxwIGNsYXNzPVwibm8tZHJvcGRvd24tc2VhcmNoLXJlc3VsdHMtZm91bmRcIj4ke3RoaXMuZGljdGlvbmFyeVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIubm8tZHJvcGRvd24tc2VhcmNoLXJlc3VsdHMtZm91bmRcIikuaW5uZXJIVE1MfTwvcD5cclxuXHRcdFx0XHQ8L2Rpdj5gO1xyXG5cclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMub3B0aW9uc0xpc3QuaW5uZXJIVE1MID0gbGlzdC5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKS5qb2luKFwiXCIpO1xyXG5cclxuXHRcdC8vIEFkZCBldmVudCBsaXN0ZW5lcnMgYWdhaW4uLi5cclxuXHRcdFsuLi50aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZHJvcGRvd24tc2VsZWN0aW9uXCIpXS5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcblx0XHRcdG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zZWxlY3RPcHRpb24sIHRydWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRsb2NhdGlvbnMob2JqKSB7XHJcblx0XHRjb25zdCBtYXJrdXAgPSBgPGRpdiBjbGFzcz1cIm5pY2Vmb3JtLW9wdGlvbiBkcm9wZG93bi1zZWxlY3Rpb25cIiBkYXRhLWlkeD1cIiR7b2JqLmlkfVwiICR7b2JqLmNoZWNrQWxsID8gYGRhdGEtY2hlY2stYWxsPVwidHJ1ZVwiYCA6IGBgfT5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uLWl0ZW0tbGVmdC1jb250YWluZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxzdmcgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24taXRlbS1pY29uIGxvY2F0aW9uLWl0ZW0taWNvblwiIGZvY3VzYWJsZT1cImZhbHNlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx1c2UgeGxpbms6aHJlZj1cIi9kaXN0L2ljb25zLnN2ZyNwbGFjZWhvbGRlclwiPjwvdXNlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9zdmc+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aDQgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24taXRlbS10aXRsZVwiPiR7b2JqLlRleHR9PC9oND5cclxuXHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uLWl0ZW0tZGVzY3JpcHRpb25cIj4ke29iai5kZXNjcmlwdGlvbn08L3A+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1pdGVtXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgbmFtZT1cIiR7b2JqLk5hbWV9XCIgdmFsdWU9XCIke29iai5pZH1cIiB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImNoZWNrYm94LWZpZWxkXCIgY2hlY2tlZD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2hlY2tib3gtc3R5bGVcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+YDtcclxuXHJcblx0XHR0aGlzLmhhbmRsZXIuZGF0YVtcImRyb3Bkb3duc1wiXVt0aGlzLm9wdGlvbk5hbWVdW1wibWFya3VwXCJdLnB1c2goeyB0aXRsZTogb2JqLlRleHQsIHZhbHVlOiBtYXJrdXAgfSk7XHJcblxyXG5cdFx0cmV0dXJuIG1hcmt1cDtcclxuXHR9XHJcblxyXG5cdGNvdW50cmllcyhvYmopIHtcclxuXHRcdGNvbnN0IG1hcmt1cCA9IGA8ZGl2IGNsYXNzPVwibmljZWZvcm0tb3B0aW9uIGRyb3Bkb3duLXNlbGVjdGlvbiBjb3VudHJpZXMtZHJvcGRvd25cIiBkYXRhLXZhbHVlPVwiJHtvYmouVmFsdWV9XCIgZGF0YS1pZHg9XCIke29iai5pZH1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uLWl0ZW0tbGVmdC1jb250YWluZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdCR7b2JqLmlkID8gXHJcblx0XHRcdFx0XHRcdFx0XHRcdGA8ZGl2IGNsYXNzPVwiZmxhZyAke29iai5pZC50b0xvd2VyQ2FzZSgpfVwiPjwvZGl2PmBcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHQ8aDQgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24taXRlbS10aXRsZVwiPiR7b2JqLlRleHR9PC9oND5cdFx0XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0JHtvYmouY291bnRyeUN1cnJlbmN5ID8gYDxwIGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uLWl0ZW0tY291bnRyeS1jb2RlXCI+JHtvYmouY291bnRyeUN1cnJlbmN5fTwvcD5gIDogYGB9XHJcblx0XHRcdFx0XHRcdDwvZGl2PmA7XHJcblxyXG5cdFx0dGhpcy5oYW5kbGVyLmRhdGFbXCJkcm9wZG93bnNcIl1bdGhpcy5vcHRpb25OYW1lXVtcIm1hcmt1cFwiXS5wdXNoKHsgdGl0bGU6IG9iai5UZXh0LCB2YWx1ZTogbWFya3VwIH0pO1xyXG5cdFx0cmV0dXJuIG1hcmt1cDtcclxuXHR9XHJcblxyXG5cdGRlZmF1bHQob2JqKSB7XHJcblx0XHRyZXR1cm4gYDxkaXYgY2xhc3M9XCJuaWNlZm9ybS1vcHRpb24gZHJvcGRvd24tc2VsZWN0aW9uIGRlZmF1bHQtZHJvcGRvd24gJHtvYmoubG9nb3V0QXBpID8gYHJlZGAgOiBgYH1cIiBkYXRhLXZhbHVlPVwiJHtvYmouVmFsdWV9XCIgZGF0YS1pZHg9XCIke29iai5pZH1cIiAke29iai5sb2dvdXRBcGkgPyBgZGF0YS1sb2dvdXQtYXBpPVwiJHtvYmoubG9nb3V0QXBpfVwiYCA6IGBgfT5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24taXRlbS1sZWZ0LWNvbnRhaW5lclwiPlxyXG5cdFx0XHRcdFx0XHQ8aDQgY2xhc3M9XCJkcm9wZG93bi1vcHRpb24taXRlbS10aXRsZVwiPiR7b2JqLlRleHR9PC9oND5cdFxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+YDtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZURyb3Bkb3duKGUpIHtcclxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRpZiAoIXRoaXMuaGFzRHJvcGRvd24pIHsgdGhpcy5jcmVhdGVEcm9wZG93bigpOyB9XHJcblxyXG5cdFx0Ly8gTG9vcCB0aHJvdWdoIHRoZSBvdGhlciBEcm9wZG93bnMgYW5kIGNsb3NlIHRoZW1cclxuXHRcdC8vIHRoaXMuZGF0YS5kcm9wZG93bnMgPSBbXSBmcm9tIGFwcC5qc1xyXG5cclxuXHRcdE9iamVjdC52YWx1ZXModGhpcy5oYW5kbGVyLmRhdGFbXCJkcm9wZG93bnNcIl0pXHJcblx0XHRcdC5tYXAob2JqID0+IHtcclxuXHRcdFx0XHRjb25zdCBpbnN0ID0gb2JqLmNsYXNzO1xyXG5cclxuXHRcdFx0XHRpZighaW5zdCkgeyByZXR1cm47IH1cclxuXHJcblx0XHRcdFx0aWYgKGluc3QuZWwgIT09IHRoaXMuZWwpIHtcclxuXHRcdFx0XHRcdGluc3QuZWwuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHRcdFx0XHRcdGluc3QuaXNBY3RpdmUgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuZWwuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcclxuXHRcdHRoaXMuaXNBY3RpdmUgPSAhdGhpcy5pc0FjdGl2ZTtcclxuXHJcblx0XHRpZih0aGlzLmlzQWN0aXZlKSB7XHJcblx0XHRcdHBvc2l0aW9uRHJvcGRvd24odGhpcy5kcm9wZG93bkNvbnRhaW5lciwgdGhpcy5lbCwgZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVtb3ZlRHJvcGRvd24oZSkge1xyXG5cdFx0aWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcIm9wdGlvbnMtaG9sZGVyXCIpKSB7IHJldHVybjsgfVxyXG5cdFx0aWYgKHRoaXMuaGFzRHJvcGRvd24gJiYgdGhpcy5pc0FjdGl2ZSkgeyB0aGlzLnRvZ2dsZURyb3Bkb3duKGUpOyB9XHJcblx0fVxyXG5cclxuXHR1cGRhdGVFbGVtKGVsZW0sIG9wdEluZHgpIHtcclxuXHRcdGNvbnN0IG9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24uZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKSA9PT0gb3B0SW5keCk7XHJcblx0XHRjb25zdCB2YWx1ZSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcIi5kcm9wZG93bi1vcHRpb24taXRlbS1sZWZ0LWNvbnRhaW5lclwiKTtcclxuXHRcdGVsZW0uY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkXCIpO1xyXG5cdFxyXG5cdFx0dGhpcy5zZWxlY3RlZFBsYWNlSG9sZGVyVGV4dC5pbm5lckhUTUwgPSB2YWx1ZS5pbm5lckhUTUw7XHJcblx0XHRcclxuXHRcclxuXHRcdGlmKCFvcHRpb24pIHsgcmV0dXJuOyB9XHJcblx0XHRvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xyXG5cclxuXHRcdC8vdGhpcy5oYW5kbGVyLnNldFByb3BlcnR5KHRoaXMub3B0aW9uTmFtZSArIFwiLXNlbGVjdGVkXCIsIG9wdEluZHgpO1xyXG5cdFx0dGhpcy5oYW5kbGVyLmRhdGFbXCJkcm9wZG93bnNcIl1bdGhpcy5vcHRpb25OYW1lXVtcInNlbGVjdGVkXCJdID0gb3B0SW5keDtcclxuXHR9XHJcblxyXG59IiwiaW1wb3J0IHsgVmlldyB9IGZyb20gJ0BhcHBzdHJhY3Rkay9hcy1jb3JlJztcclxuXHJcbmNsYXNzIEhlYWRlciBleHRlbmRzIFZpZXcge1xyXG5cdGNvbnN0cnVjdG9yKGVsLCBoYW5kbGVyKSB7XHJcblx0XHRzdXBlcihlbCk7XHJcblx0XHR0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xyXG5cdFx0dGhpcy5tZW51QWN0aXZlID0gZmFsc2U7XHJcblxyXG5cdFx0Wy4uLnRoaXMuZWwucXVlcnlTZWxlY3RvckFsbChcIi5qcy1zZWxlY3RcIildLmZvckVhY2goZHJvcGRvd24gPT4gdGhpcy5oYW5kbGVyLmluaXREcm9wZG93bihkcm9wZG93biwgdGhpcywgZmFsc2UsIGZhbHNlKSk7XHJcblxyXG5cdFx0dGhpcy5hZGRMaXN0ZW5lcihcImNsaWNrXCIsIFwiLmJ1cmdlci1tZW51LXdyYXBwZXJcIiwgdGhpcy5vbk1lbnVUb2dnbGUpO1xyXG5cdH1cclxuXHJcblxyXG5cdG9uTWVudVRvZ2dsZSgpIHtcclxuXHRcdGlmICh0aGlzLmVsLmNsYXNzTGlzdC5jb250YWlucyhcIm1lbnUtb3BlblwiKSkge1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJmaXhlZFwiKTtcclxuXHRcdFx0dGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKFwibWVudS1vcGVuXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5lbC5jbGFzc0xpc3QuYWRkKFwibWVudS1vcGVuXCIpO1xyXG5cdFx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImZpeGVkXCIpO1xyXG5cdFx0XHR9LCAxMDApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5tZW51QWN0aXZlKSB7XHJcblx0XHRcdHRoaXMuZWwuY2xhc3NMaXN0LmFkZChcImlzLW1lbnUtb3BlblwiKTtcclxuXHRcdFx0dGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKFwiaXMtbWVudS1jbG9zZWRcIik7XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuZWwuY2xhc3NMaXN0LmFkZChcImhhcy1maXhlZC1pbm5lci1oZWFkZXJcIik7XHJcblx0XHRcdH0sIDIwMCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoXCJpcy1tZW51LW9wZW5cIik7XHJcblx0XHRcdHRoaXMuZWwuY2xhc3NMaXN0LmFkZChcImlzLW1lbnUtY2xvc2VkXCIpO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoXCJoYXMtZml4ZWQtaW5uZXItaGVhZGVyXCIpO1xyXG5cdFx0XHR9LCAzMDApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubWVudUFjdGl2ZSA9ICF0aGlzLm1lbnVBY3RpdmU7XHJcblxyXG5cdH1cclxuXHJcblxyXG5cdHN0YXRpYyBpbml0KGhhbmRsZXIsIHNlbGVjdG9yID0gXCIuaGVhZGVyXCIsIGJhc2UgPSBkb2N1bWVudCkge1xyXG5cdFx0cmV0dXJuIFsuLi5iYXNlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXS5tYXAobm9kZSA9PiBuZXcgSGVhZGVyKG5vZGUsIGhhbmRsZXIpKTtcclxuXHR9XHJcblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XHJcbiIsIu+7v2NvbnN0IHBvc2l0aW9uRHJvcGRvd24gPSAoY29udGFpbmVyLCBlbGVtZW50LCBzZXRUb3AgPSB0cnVlKSA9PiB7XHJcblx0Y29uc3QgZHJvcGRvd25IZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xyXG5cdGNvbnN0IGRyb3Bkb3duV2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGg7XHJcblx0Y29uc3QgaW5wdXRCb3VuZHMgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuXHR2YXIgdG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0ICsgaW5wdXRCb3VuZHMudG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgKyAyICsgODtcclxuXHR2YXIgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCArIGlucHV0Qm91bmRzLmxlZnQ7XHJcblx0dmFyIHJpZ2h0ID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSBpbnB1dEJvdW5kcy5yaWdodDtcclxuXHR2YXIgcmlnaHRNb3N0ID0gbGVmdCArIGRyb3Bkb3duV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcclxuXHR2YXIgY2VudGVyTW9zdCA9IHJpZ2h0ICsgZHJvcGRvd25XaWR0aCA+IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xyXG5cclxuXHRpZiAoc2V0VG9wKSB7XHJcblx0XHRjb250YWluZXIuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xyXG5cdH1cclxuXHJcblx0aWYgKCFyaWdodE1vc3QpIHtcclxuXHRcdGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gc2V0VG9wID8gbGVmdCArIFwicHhcIiA6IDA7XHJcblx0XHRjb250YWluZXIuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcclxuXHR9XHJcblx0ZWxzZSBpZiAoIWNlbnRlck1vc3QpIHtcclxuXHRcdGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gXCJhdXRvXCI7XHJcblx0XHRjb250YWluZXIuc3R5bGUucmlnaHQgPSBzZXRUb3AgPyByaWdodCArIFwicHhcIiA6IDA7XHJcblx0fSBlbHNlIHtcclxuXHRcdHZhciBib2R5V2lkdGggPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcclxuXHRcdHZhciBjZW50ZXJMZWZ0ID0gTWF0aC5tYXgoMCwgYm9keVdpZHRoIC8gMiAtIGRyb3Bkb3duV2lkdGggLyAyKTtcclxuXHRcdGlmIChzZXRUb3ApIHtcclxuXHRcdFx0Y29udGFpbmVyLnN0eWxlLmxlZnQgPSBjZW50ZXJMZWZ0ICsgXCJweFwiO1xyXG5cdFx0fVxyXG5cdFx0Y29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XHJcblx0fVxyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHBvc2l0aW9uRHJvcGRvd247IiwiaW1wb3J0IEFwcCBmcm9tIFwiLi9hcHBcIjtcclxuXHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcclxuXHRuZXcgQXBwKGRvY3VtZW50LmJvZHkpO1xyXG59KTtcclxuIiwiXHJcbmNvbnN0IHN0cmluZ1RvSFRNTCA9IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzdHJpbmcsIFwidGV4dC9odG1sXCIpO1xyXG5cdHJldHVybiBkb2MuYm9keS5maXJzdENoaWxkO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc3RyaW5nVG9IVE1MOyIsIi8vIElJRkUgYXMgd2Ugd2FudCB0byBwb2x5ZmlsbCBBU0FQXHJcblxyXG5jb25zdCBlbmhhbmNlVGVtcGxhdGVUYWcgPSBub2RlID0+IHtcclxuXHRjb25zdCBjb250ZW50ID0gbm9kZS5jaGlsZE5vZGVzO1xyXG5cdGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG5cdHdoaWxlKGNvbnRlbnRbMF0pIHtcclxuXHRcdGZyYWdtZW50LmFwcGVuZENoaWxkKGNvbnRlbnRbMF0pO1xyXG5cdH1cclxuXHRub2RlLmNvbnRlbnQgPSBmcmFnbWVudDtcclxufTtcclxuXHJcblxyXG4oKCkgPT4ge1xyXG5cdGlmICgnY29udGVudCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRcclxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBbLi4uZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RlbXBsYXRlJyldO1xyXG5cclxuXHR0ZW1wbGF0ZXMuZm9yRWFjaChlbmhhbmNlVGVtcGxhdGVUYWcpO1xyXG5cclxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7XHJcblx0XHRtdXRhdGlvbnMuZm9yRWFjaChtdXRhdGlvbiA9PiB7XHJcblx0XHRcdGNvbnN0IGFkZGVkTm9kZXMgPSBbLi4ubXV0YXRpb24uYWRkZWROb2Rlc10uZmlsdGVyKG5vZGUgPT4gbm9kZS5ub2RlVHlwZSA9PT0gMSk7XHJcblx0XHRcdGFkZGVkTm9kZXMuZm9yRWFjaChuZXdOb2RlID0+IHtcclxuXHRcdFx0XHRjb25zdCBuZXdUZW1wbGF0ZXMgPSBbLi4ubmV3Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCd0ZW1wbGF0ZScpXTtcclxuXHRcdFx0XHRuZXdUZW1wbGF0ZXMuZm9yRWFjaChlbmhhbmNlVGVtcGxhdGVUYWcpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG5cclxuXHRjb25zdCBvYnNlcnZlckNvbmZpZyA9IHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XHJcblxyXG5cdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIG9ic2VydmVyQ29uZmlnKTtcclxufSkoKTtcclxuIl19"}