1(()=>{"use strict";var __webpack_modules__={456:()=>{eval("\n;// CONCATENATED MODULE: ./anti/static/js/search/customSearchbox.js\n// Create a render function\nvar renderSearchBox = function renderSearchBox(renderOptions, isFirstRender) {\n var query = renderOptions.query,\n refine = renderOptions.refine,\n clear = renderOptions.clear,\n isSearchStalled = renderOptions.isSearchStalled,\n widgetParams = renderOptions.widgetParams;\n var container = document.querySelector(widgetParams.container);\n if (isFirstRender) {\n var _widgetParams$placeho;\n var form = document.createElement('form');\n form.classList.add('ais-SearchBox-form');\n form.action = \"/search/\";\n var input = document.createElement('input');\n input.classList.add('ais-SearchBox-input');\n input.name = \"query\";\n input.placeholder = (_widgetParams$placeho = widgetParams.placeholder) !== null && _widgetParams$placeho !== void 0 ? _widgetParams$placeho : 'Search';\n var loadingIndicator = document.createElement('span');\n loadingIndicator.textContent = 'Loading...';\n var button = document.createElement('button');\n button.type = 'submit';\n button.classList.add('ais-SearchBox-submit');\n var resetButton = document.createElement('button');\n resetButton.type = 'reset';\n resetButton.classList.add('ais-SearchBox-reset');\n input.addEventListener('input', function (event) {\n // filter searchbot traffic\n if (/[\\u3131-\\uD79D]+$/.test(event.target.value) == true || event.target.value.length > 20) {\n console.log(\"skipped search \".concat(event.target.value));\n } else {\n refine(event.target.value);\n }\n });\n button.addEventListener('click', function () {\n form.submit();\n });\n form.appendChild(input);\n form.appendChild(loadingIndicator);\n form.appendChild(button);\n container.appendChild(form);\n }\n container.querySelector('input').value = query;\n container.querySelector('span').hidden = !isSearchStalled;\n};\n\n// create custom widget\nvar customSearchBox = instantsearch.connectors.connectSearchBox(renderSearchBox);\n;// CONCATENATED MODULE: ./anti/static/js/search/quickSearch.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
1 i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\n\nvar quickSearch = function quickSearch(algoliaClient) {\n return _objectSpread(_objectSpread({}, algoliaClient), {}, {\n search: function search(requests) {\n var searchBox = document.querySelector('#anti-search');\n if (requests.every(function (_ref) {\n var params = _ref.params;\n return !params.query;\n })) {\n searchBox.classList.remove('searching');\n return Promise.resolve({\n results: requests.map(function () {\n return {\n hits: [],\n nbHits: 0,\n nbPages: 0,\n page: 0,\n processingTimeMS: 0\n };\n })\n });\n }\n searchBox.classList.add('searching');\n return algoliaClient.search(requests);\n }\n });\n};\nvar autocomplete = instantsearch.connectors.connectAutocomplete(function (_ref2, isFirstRendering) {\n var indices = _ref2.indices,\n refine = _ref2.refine,\n widgetParams = _ref2.widgetParams;\n var container = widgetParams.container,\n onSelectChange = widgetParams.onSelectChange;\n var containerEl = document.querySelector(container);\n containerEl.innerHTML = \"\";\n var ul = document.createElement('ul');\n var seeAll = document.createElement('a');\n if (indices.length && indices[0].hits.length) {\n // if there are results, create the 'see all' link\n seeAll.innerHTML = \"See all \".concat(indices[0].results.nbHits, \" results\");\n seeAll.href = \"/search/?query=\".concat(indices[0].results.query);\n seeAll.classList.add('see-all');\n containerEl.appendChild(seeAll);\n containerEl.appendChild(ul);\n }\n if (isFirstRendering) {\n // Here is where you attach jquery or 3rd library or click events\n }\n var list = containerEl.querySelector('ul');\n indices.forEach(function (index) {\n // for each set of results, create a list\n if (index.results.hits.length == 0) return;\n var li = document.createElement('li');\n var urlParams = new URLSearchParams(index.results.params);\n var filters = urlParams.get('filters');\n // find the category name from the filter\n var category = filters && filters.split(':').length && filters.split(':').pop();\n li.innerHTML = \"<span class=\\\"lf\\\">\".concat(category ? category : 'Top Hit', \"</span>\");\n index.results.hits.forEach(function (hit) {\n var link = document.createElement('a');\n link.href = hit.url;\n link.innerHTML = hit.title;\n // console.log(link)\n li.appendChild(link);\n });\n // console.log(li)\n list.appendChild(li);\n });\n});\nvar getCategoryWidgetList = function getCategoryWidgetList() {\n var widgets = [];\n categoryList.map(function (loopCategory, i) {\n widgets.push(instantsearch.widgets.index({\n indexName: \"anti\"\n }).addWidgets([instantsearch.widgets.configure({\n filters: \"category:\".concat(loopCategory),\n hitsPerPage: 2\n })]));\n });\n return widgets;\n};\nvar getWidgetList = function getWidgetList() {\n var widgetList = [customSearchBox({\n container: '#quickSearch-input'\n }), instantsearch.widgets.configure({\n hitsPerPage: 1\n }), autocomplete({\n container: '#quickSearch-hits'\n })];\n var catWidgets = getCategoryWidgetList();\n // console.log(catWidgets)\n return [].concat(widgetList, _toConsumableArray(catWidgets));\n};\n;// CONCATENATED MODULE: ./anti/static/js/search/siteSearch.js\nfunction siteSearch_typeof(obj) { \"@babel/helpers - typeof\"; return siteSearch_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, siteSearch_typeof(obj); }\nfunction siteSearch_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction siteSearch_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
1 i % 2 ? siteSearch_ownKeys(Object(source), !0).forEach(function (key) { siteSearch_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : siteSearch_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction siteSearch_defineProperty(obj, key, value) { key = siteSearch_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction siteSearch_toPropertyKey(arg) { var key = siteSearch_toPrimitive(arg, \"string\"); return siteSearch_typeof(key) === \"symbol\" ? key : String(key); }\nfunction siteSearch_toPrimitive(input, hint) { if (siteSearch_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (siteSearch_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction siteSearch_toConsumableArray(arr) { return siteSearch_arrayWithoutHoles(arr) || siteSearch_iterableToArray(arr) || siteSearch_unsupportedIterableToArray(arr) || siteSearch_nonIterableSpread(); }\nfunction siteSearch_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction siteSearch_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return siteSearch_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return siteSearch_arrayLikeToArray(o, minLen); }\nfunction siteSearch_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction siteSearch_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return siteSearch_arrayLikeToArray(arr); }\nfunction siteSearch_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\nvar itemTemplates = {\n artist: \"\\n <a href=\\\"{{ url }}\\\"><img src=\\\"{{ image_url }}\\\" width=\\\"228\\\" height=\\\"127\\\" alt=\\\"{{ title }}\\\"></a>\\n <h4><a href=\\\"{{ url }}\\\">{{ title }}</a></h4>\\n \",\n release: \"\\n {{^is_hidden}}<a href=\\\"{{ url }}\\\">{{/is_hidden}}<img src=\\\"{{image_url}}\\\" width=\\\"138\\\" height=\\\"138\\\" alt=\\\"{{ name }}\\\">{{^is_hidden}}</a>{{/is_hidden}}\\n <h4>{{^is_hidden}}<a href=\\\"{{ url }}\\\">{{/is_hidden}}{{ title }}{{^is_hidden}}</a>{{/is_hidden}}</h4>\\n <h5><a href=\\\"{{ artist_url }}\\\">{{ artist }}</a></h5>\\n \",\n news: \"\\n <a href=\\\"{{ url }}\\\">{{ title }}</a>\\n \",\n video: \"\\n {{#duration}}<span class=\\\"num\\\">{{ duration }}</span>{{/duration}}\\n <a href=\\\"{{ url }}\\\"><img src=\\\"{{image_url}}\\\" width=\\\"228\\\" height=\\\"127\\\" alt=\\\"{{ title }}\\\"></a>\\n <h4><a href=\\\"{{ url }}\\\">{{ title }}</a></h4>\\n \",\n track: \"\\n <span class=\\\"rf length\\\">{{ nice_duration }}</span>\\n {{#content}}<span class=\\\"rf\\\"><a href=\\\"{{ url }}#lyrics\\\">Lyrics</a></span>{{/content}}\\n <span class=\\\"rf\\\"><a href=\\\"{{ url }}\\\">Track Details</a></span>\\n <a href=\\\"{{ url }}\\\">{{ artist }} - {{ title }}</a> \\n \",\n show: \"\\n <div class=\\\"date-item clearfix\\\">\\n <h4>{{ date_formatted }} - {{ month_formatted }}</h4>\\n <table>\\n <tr>\\n <td class=\\\"art\\\"><a href=\\\"{{ artist_url }}\\\">{{ title }}</a></td>\\n <td class=\\\"loc\\\">{{ location }}</td>\\n <td class=\\\"ven\\\">{{#url}}<a href=\\\"{{ url }}\\\" target=\\\"_blank\\\">{{/url}}{{ content }}{{#url}}</a>{{/url}}</td>\\n <td class=\\\"tim\\\">{{ time }}</td>\\n <td class=\\\"link\\\">{{#facebook_rsvp_url}}<a href=\\\"{{ facebook_rsvp_url }}\\\" target=\\\"_blank\\\">RSVP</a>{{/facebook_rsvp_url}} </td>\\n <td class=\\\"link\\\">{{#ticket_url}}<a href=\\\"{{ ticket_url }}\\\" target=\\\"_blank\\\">Tickets</a>{{/ticket_url}} </td>\\n </tr>\\n </table>\\n </div>\\n \",\n press: \"\\n <a href=\\\"{{ url }}\\\">{{ title }}</a>\\n \"\n};\nfunction siteSearch_getWidgetList(category, siteSearchParams) {\n var widgetList = [instantsearch.widgets.configure(siteSearchParams), customSearchBox({\n container: '#quickSearch-input'\n }), instantsearch.widgets.stats({\n container: 'h1.botborder',\n templates: {\n text: function text(stats) {\n var catLabel = category ? \"In '\".concat(category, \"'\") : \"\";\n return \"<span class=\\\"sml\\\">\".concat(stats.nbHits, \" search results \").concat(catLabel, \" for </span>“\").concat(stats.query, \"”\");\n }\n }\n }), instantsearch.widgets.hits({\n container: '.no-results',\n templates: {\n empty: \"\\n <article class=\\\"art-stnd art-stnd-white no-search-results\\\">\\n <header>\\n <h3>Sorry!</h3>\\n <p>No search results were found for \\\"{{ query }}\\\".<br>please try again ...</p>\\n </header>\\n </article>\\n \",\n item: ''\n }\n })];\n if (category) {\n var singleCatList = [instantsearch.widgets.stats({\n container: \".filter-stnd .all .num\",\n templates: {\n text: function text(stats) {\n return \"←\";\n }\n }\n }), instantsearch.widgets.configure({\n filters: \"category:\".concat(category)\n }), instantsearch.widgets.stats({\n container: \"#\".concat(category, \" .mini-func\"),\n templates: {\n text: function text(stats) {\n return \"\\n Displaying <b>\".concat(stats.nbHits, \"</b> of <b>\").concat(stats.nbHits, \"</b> results | <a href=\\\"/search//?query=\").concat(stats.query, \"\\\">Back to\\n All Results</a> \");\n }\n }\n }), instantsearch.widgets.infiniteHits({\n container: \"#\".concat(category, \" .result-items\"),\n escapeHTML: fal
1se,\n templates: {\n item: itemTemplates[category]\n }\n })];\n widgetList = [].concat(siteSearch_toConsumableArray(widgetList), singleCatList);\n } else {\n widgetList.push(instantsearch.widgets.stats({\n container: \".filter-stnd .all .num\",\n templates: {\n text: function text(stats) {\n return stats.nbHits || '0';\n }\n }\n }));\n categoryList.map(function (loopCategory, i) {\n widgetList.push(instantsearch.widgets.index({\n indexName: 'anti'\n }).addWidgets([instantsearch.widgets.configure({\n filters: \"category:\".concat(loopCategory)\n }), instantsearch.widgets.stats({\n container: \"#\".concat(loopCategory, \" .mini-func\"),\n templates: {\n text: function text(stats) {\n return \"\\n <p class=\\\"_menu-header\\\">\\n Displaying \\n <span class=\\\"_count\\\">\".concat(Math.min(stats.nbHits, stats.hitsPerPage), \"</span> \\n of <span class=\\\"_count\\\">\").concat(stats.nbHits, \"</span>\\n <a href=\\\"/search/\").concat(loopCategory, \"?query=\").concat(stats.query, \"\\\" class=\\\"_search-all\\\">See All</a>\\n </p>\\n \");\n }\n }\n }), instantsearch.widgets.stats({\n container: \".filter-stnd .\".concat(loopCategory, \" .num\"),\n templates: {\n text: function text(stats) {\n return stats.nbHits || '0';\n }\n }\n }), instantsearch.widgets.hits({\n container: \"#\".concat(loopCategory, \" .result-items\"),\n escapeHTML: false,\n templates: {\n item: itemTemplates[loopCategory]\n }\n })]));\n });\n }\n return widgetList;\n}\nvar siteSearch = function siteSearch(algoliaClient) {\n return siteSearch_objectSpread(siteSearch_objectSpread({}, algoliaClient), {}, {\n search: function search(requests) {\n var searchBox = document.querySelector('#anti-search');\n // filter searchbot traffic\n if (requests.every(function (_ref) {\n var params = _ref.params;\n return !params.query || /[\\u3131-\\uD79D]+$/.test(params.query) == true || params.query.length > 20;\n })) {\n searchBox.classList.remove('searching');\n return Promise.resolve({\n results: requests.map(function (i, el) {\n return {\n hits: [],\n nbHits: 0,\n nbPages: 0,\n page: 0,\n processingTimeMS: 0,\n query: i.params.query\n };\n })\n });\n }\n searchBox.classList.add('searching');\n return algoliaClient.search(requests);\n }\n });\n};\n;// CONCATENATED MODULE: ./anti/static/js/search/searchClient.js\nfunction searchClient_toConsumableArray(arr) { return searchClient_arrayWithoutHoles(arr) || searchClient_iterableToArray(arr) || searchClient_unsupportedIterableToArray(arr) || searchClient_nonIterableSpread(); }\nfunction searchClient_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction searchClient_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return searchClient_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return searchClient_arrayLikeToArray(o, minLen); }\nfunction searchClient_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction searchClient_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return searchClient_arrayLikeToArray(arr); }\nfunction searchClient_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n/* global algoliasearch instantsearch */\n\n\nvar categoryList = ['artist', 'release', 'show', 'video', 'track', 'news', 'press'];\nvar matches = /(?:^\\/search\\/)(\\w+)/g.exec(window.location.pathname);\nvar category = matches && matches.length > 1 && matches[1];
1\nvar urlParams = new URLSearchParams(window.location.search);\nvar query = urlParams.get('query') || urlParams.get('q');\nvar siteSearchParams = {\n hitsPerPage: 6,\n query: query\n};\nvar algoliaClient = algoliasearch(window.AntiData.ALGOLIA_APPLICATION_ID, window.AntiData.ALGOLIA_API_KEY_SEARCH);\nvar isQuickSearch = !window.location.pathname.startsWith('/search/');\nvar searchClient = isQuickSearch ? quickSearch(algoliaClient) : siteSearch(algoliaClient);\nvar search = instantsearch({\n indexName: category == \"news\" ? \"anti\" : \"anti\",\n searchClient: searchClient,\n initialUiState: {\n anti: siteSearchParams\n }\n});\nvar widgetList = isQuickSearch ? getWidgetList() : siteSearch_getWidgetList(category, siteSearchParams);\nsearch.addWidgets(searchClient_toConsumableArray(widgetList));\nsearch.on('render', function () {\n var searchBox = document.querySelector('.algolia-search');\n for (var i = 0; i < categoryList.length; i++) {\n if ($(\"#\".concat(categoryList[i], \" .result-items li\")).length < 1) {\n var resultList = document.querySelector(\"#\".concat(categoryList[i]));\n if (resultList) resultList.classList.add('hidden');\n var resultFilter = document.querySelector(\".filter-stnd .\".concat(categoryList[i]));\n if (resultFilter) resultFilter.classList.add('hidden');\n } else {\n var _resultList = document.querySelector(\"#\".concat(categoryList[i]));\n if (_resultList) _resultList.classList.remove('hidden');\n var _resultFilter = document.querySelector(\".filter-stnd .\".concat(categoryList[i]));\n if (_resultFilter) _resultFilter.classList.remove('hidden');\n }\n }\n});\n;// CONCATENATED MODULE: ./anti/static/js/global.js\nfunction global_defineProperty(obj, key, value) { key = global_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction global_toPropertyKey(arg) { var key = global_toPrimitive(arg, \"string\"); return global_typeof(key) === \"symbol\" ? key : String(key); }\nfunction global_toPrimitive(input, hint) { if (global_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (global_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction global_typeof(obj) { \"@babel/helpers - typeof\"; return global_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, global_typeof(obj); }\n/**\n * ANTI-\n * Handles all global behaviors and properties for ANTI-\n *\n * Dependencies:\n * jQuery 1.7.1\n * jquery.infinitescroll.js\n */\n\n(function ($) {\n var _AntiMailingList;\n var Anti = {\n init: function init() {\n // crappy safari custom fonts in text input handling\n if (AntiUtil.detect_safari()) {\n $('[placeholder]').each(function (e) {\n var phVal = $(this).attr('placeholder');\n $(this).attr('value', phVal);\n $(this).attr('placeholder', '');\n $(this).focus(function () {\n if ($(this).val() == $(this)[0].defaultValue) {\n $(this).val('');\n }\n }).blur(function () {\n if ($(this).val().trim() === '') {\n $(this).val($(this)[0].defaultValue);\n }\n });\n });\n }\n\n // crappy windows font handling\n if (AntiUtil.detect_winfont()) {\n $('html').addClass('winfonts');\n }\n\n // global nav\n if ($('html').hasClass('ie6') || $('html').hasClass('ie7') || $('html').hasClass('ie8')) {\n Anti.sticky_nav_ie();\n } else {\n Anti.sticky_nav();\n }\n\n // global last child handler\n AntiUtil.list_lastchild();\n\n // global sidebar accordion handler\n AntiUtil.sidebar_accordion();\n\n // global filter accordion handler\n AntiUtil.filter_accordion();\n\n // global social icons (this is due to IE bugs)\n Anti.stnd_social();
1\n\n // global mailing list\n AntiMailingList.init();\n },\n webfont_active: function webfont_active() {\n Anti.article_resizer();\n Anti.album_carousel_setheight();\n },\n webfont_inactive: function webfont_inactive() {\n Anti.article_resizer();\n Anti.album_carousel_setheight();\n },\n sticky_nav: function sticky_nav() {\n var sNav = $('nav');\n var sNavAnimating = false;\n $(window).bind('scroll', function (e) {\n if ($(window).scrollTop() >= 100 && !sNav.hasClass('stickynav')) {\n sNav.addClass('stickynav');\n sNav.css('top', '-50px');\n sNav.animate({\n 'top': 0,\n avoidTransforms: true\n }, 200, 'swing');\n } else if ($(window).scrollTop() < 30 && sNav.hasClass('stickynav') & !sNavAnimating) {\n sNavAnimating = true;\n sNav.animate({\n 'top': '-50px',\n avoidTransforms: true\n }, 150, 'swing', function () {\n sNavAnimating = false;\n sNav.removeClass('stickynav');\n sNav.css({\n 'top': '49px',\n 'opacity': 0\n });\n sNav.animate({\n 'opacity': 1,\n avoidTransforms: true\n }, 300);\n });\n }\n });\n AntiGlobalSearch.init();\n },\n sticky_nav_ie: function sticky_nav_ie() {\n var sNav = $('nav');\n $(window).bind('scroll', function (e) {\n if ($(window).scrollTop() >= 48 && !sNav.hasClass('stickynav')) {\n sNav.addClass('stickynav');\n } else if ($(window).scrollTop() < 48 && sNav.hasClass('stickynav')) {\n sNav.removeClass('stickynav');\n }\n });\n },\n album_carousel: function album_carousel() {\n if ($('.album-carousel').length > 0) {\n // multiple carousels\n $('.album-carousel').each(function (e) {\n var el = this;\n var elBox = $(el).find('.album-items');\n var elBoxHeight = 0;\n var elBoxShown = 5;\n var elBoxSlideLength = 200;\n var elBoxSel = 0;\n var elBoxLength = $(elBox).children('div').length;\n var elBoxAni = false;\n var elBoxOffset = 0;\n var elBoxSlideLengthTotal, elBoxSlideSpeed;\n if ($(el).hasClass('album-carousel-lrg')) {\n elBoxShown = 4;\n elBoxSlideLength = 250;\n }\n\n // update arrow\n $(el).find('.arr-l').addClass('arr-disabled');\n\n // bind arrows\n if ($(elBox).children('div').length > elBoxShown) {\n $(el).find('.arr-l').click(function (e) {\n e.preventDefault();\n if (!$(this).hasClass('arr-disabled') && !elBoxAni) {\
1n elBoxAni = true;\n elBoxSlideLengthTotal = elBoxSlideLength * elBoxShown;\n elBoxSlideSpeed = elBoxShown * 120;\n $(el).find('.arr-r').removeClass('arr-disabled');\n if (elBoxSel - 1 === 0) {\n $(el).find('.arr-l').addClass('arr-disabled');\n // need to compensate for an uneven number of items\n if (elBoxOffset > 0) {\n elBoxSlideLengthTotal = elBoxOffset * elBoxSlideLength;\n elBoxSlideSpeed = elBoxOffset * 120;\n elBoxOffset = 0;\n }\n }\n elBox.stop(true).animate({\n left: '+=' + elBoxSlideLengthTotal + 'px',\n avoidTransforms: true\n }, elBoxSlideSpeed, 'easeInOutQuad', function () {\n elBoxSel--;\n elBoxAni = false;\n });\n }\n });\n $(el).find('.arr-r').click(function (e) {\n e.preventDefault();\n if (!$(this).hasClass('arr-disabled') && !elBoxAni) {\
1n elBoxAni = true;\n elBoxSlideLengthTotal = elBoxSlideLength * elBoxShown;\n elBoxSlideSpeed = elBoxShown * 120;\n $(el).find('.arr-l').removeClass('arr-disabled');\n if (1 + elBoxSel == Math.ceil(elBoxLength / elBoxShown) - 1) {\n $(el).find('.arr-r').addClass('arr-disabled');\n // need to compensate for an uneven number of items\n if (elBoxLength % elBoxShown > 0) {\n elBoxOffset = elBoxLength % elBoxShown;\n elBoxSlideLengthTotal = elBoxOffset * elBoxSlideLength;\n elBoxSlideSpeed = elBoxOffset * 120;\n }\n }\n elBox.stop(true).animate({\n left: '-=' + elBoxSlideLengthTotal + 'px',\n avoidTransforms: true\n }, elBoxSlideSpeed, 'easeInOutQuad', function () {\n elBoxSel++;\n elBoxAni = false;\n });\n }\n });\n } else {\n // no elements to slide\n $(el).find('.arr-r').addClass('arr-disabled');\n }\n });\n }\n },\n album_carousel_setheight: function album_carousel_setheight() {\n if ($('.album-carousel').length > 0) {\n $('.album-carousel').each(function (e) {\n var el = this;\n var elBox = $(el).find('.album-items');\n var elBoxHeight = 0;\n $(elBox).children('div').each(function () {\n if ($(this).height() > elBoxHeight) {\n elBoxHeight = $(this).height();\n }\n });\n $(el).find('.in').css('height', elBoxHeight + 'px');\n $(elBox).css('height', elBoxHeight + 'px');\n $(elBox).children('div').css('height', elBoxHeight + 'px');\n });\n }\n },\n article_resizer: function article_resizer() {\n if ($('#home-articles').length > 0) {\n var pSizeChangeFinal = function pSizeChangeFinal(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH) {\n var sizeDiff = boxHeight - textBoxHeight;\n if (sizeDiff > textBoxLH) {\n // increase font size, don't increase line-height\n var textBoxFSNew = textBoxFS + 1;\n $(textBox).css('font-size', textBoxFSNew + 'px');\n var textBoxHeightNew = $(textBox).height();\n pSizeChangeFinal(textBox, textBoxHeightNew, boxHeight, textBoxFSNew, textBoxLH);\n } else if (sizeDiff > 0) {\n // increase line-height, don't increase font size\n var textBoxLinesTotal = Math.floor(textBoxHeight / textBoxLH);\n var textBoxLHNew = textBoxLH + Math.floor(sizeDiff / textBoxLinesTotal);\n $(textBox).css('line-height', textBoxLHNew + 'px');\n }\n };\n var pSizeChange = function pSizeChange(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH, dir) {\n if (dir == 'inc') {\n // text too small\n var textBoxFSNew = textBoxFS + 1;\n var textBoxLHNew = textBoxLH + 1;\n }\n if (dir == 'dec') {\n // text too large\n var textBoxFSNew = textBoxFS - 1;\n var textBoxLHNew = textBoxLH - 1;\n }\n\n // update text field\n $(textBox).css('font-size', textBoxFSNew + 'px');\n $(textBox).css('line-height', textBoxLHNew + 'px');\n var textBoxHeightNew = $(textBox).height();\n var sizeDiff = boxHeight - textBoxHeightNew;\n\n // check new size\n if (dir == 'inc') {\n if (boxHeight > textBoxHeightNew) {\n // text still too small\n pSizeChange(textBox, textBoxHeightNew, boxHeight, textBoxFSNew, textBoxLHNew, dir);\n } else {\n if (textBoxHeightNew > boxHeight && textBoxHeight < boxHeight) {\n // we went too far, decrease by one\n var textBoxFSNew = textBoxFSNew - 1;\n var textBoxLHNew = textBoxLHNew - 1;\n $(textBox).css('font-size', textBoxFSNew + 'px');\n $(textBox).css('line-height', textBoxLHNew + 'px');\n var textBoxHeightNew = $(textBox).height();\n var sizeDiff = boxHeight - textBoxHeightNew;\n }\n if (sizeDiff > 0) {\n // final adjustment\n // pSizeChangeFinal(textBox,textBoxHeightNew,boxHeight,textBoxFSNew,textBoxLHNew);\n }\n }\n } else if (dir == 'dec') {\n if (textBoxHeightNew > boxHeight) {\n // text still too large\n pSizeChange(textBox, textBoxHeightNew, boxHeight, textBoxFSNew, textBoxLHNew, dir);\n } else {\n if (boxHeight > textBoxHeightNew && boxHeight > textBoxHeight) {\n // we went too far, increase by one\n var textBoxFSNew = textBoxFSNew + 1;\n var textBoxLHNew = textBoxLHNew + 1;\n $(textBox).css('font-size', textBoxFSNew + 'px');\n $(textBox).css('line-height', textBoxLHNew + 'px');\n var textBoxHeightNew = $(textBox).height();\n var sizeDiff = boxHeight - textBoxHeightNew;\n }\n if (sizeDiff > 0) {\n // final adjustment\n // pSizeChangeFinal(textBox,textBoxHeightNew,boxHeight,textBoxFSNew,textBoxLHNew);\n }\n }\n }\n };\n $('#home-articles article').each(function () {\n var box = this;\n var boxHeight = $(box).height() - 21; // to compensate for the read more link\n var textBox = $(this).children('p');\n var textBoxHeight = $(textBox).height();\n var textBoxFS = parseInt($(textBox).css('font-size'));\n var textBoxLH = parseInt($(textBox).css('line-height'));\n var textBoxLinesTotal = Math.floor(textBoxHeight / textBoxLH);\n if (boxHeight > textBoxHeight) {\n // text is too small\n pSizeChange(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH, 'inc');\n } else if (textBoxHeight > boxHeight) {\n // text is too large\n pSizeChange(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH, 'dec');\n }\n // lock p height\n $(textBox).css('height', boxHeight + 'px');\n });\n\n // show articles\n $('#home-articles article').hide();\n $('#home-articles article').css('visibility', 'visible');\n $('#home-articles .loader').fadeOut('fast');\n $('#home-articles article').fadeIn('fast');\n }\n },\n stnd_social: function stnd_social() {\n if ($('.stnd-social').length > 0) {\n if ($('html').hasClass('ie')) {\n $('.stnd-social').children('.icns-exp').hide();\n $('.stnd-social').mouseenter(function () {\n $(this).children('.icns-exp').show();\n }).mouseleave(function () {\n $(this).children('.icns-exp').hide();\n });\n } else {\n $('.stnd-social').mouseenter(function () {\n $(this).children('.icns-exp').css('opacity', '1');\n }).mouseleave(function () {\n $(this).children('.icns-exp').css('opacity', '0');\n });\n }\n }\n },\n /**\n * Make anchor links smoothly animate to their content on the page, taking the nav height into account\n *\n * linkSelector (string) Selector for links to apply smooth scroll to\n * extraOffset (integer) (optional) Number of pixels for extra padding/offset for scroll target\n *\n */\n smoothScroll: function smoothScroll(linkSelector, extraOffset) {\n extraOffset = typeof extraOffset == 'number' ? extraOffset : 18;\n var navHeight = $('nav').height();\n $(linkSelector).each(function (index, el) {\n var anchor = $(el).attr('href');\n if (anchor && anchor[0] == '#') {\n $(el).click(function (e) {\n e.preventDefault();\n var offset = $(anchor).offset();\n var top = offset.top - navHeight - extraOffset;\n var winHeight = $(window).height();\n var docHeight = $(document).height();\n $('html, body').stop(true).animate({\n 'scrollTop': Math.min(top, docHeight - winHeight)\n }, 1000, 'easeInOutExpo');\n });\n }\n });\n },\n /**\n * Apply 'Load More' functionality that fetches paginated content via AJAX and appends it to the page\
1n *\n * contentSelector (string) Selector for main content wrapper. Infinite scroll plugin is implemented \n * onto this element and content is appended to it\n * itemSelector (string) Selector passed to infinitescroll plugin, used on AJAX call to extract \n * content to be appended\n * buttonSelector (string) Selector for 'Load More' button, on which click events and such are applied\n * options (object) (optional) Options to pass directly into infinitescroll()\n * callback (function) (optional) Optional callback to be run at the end of page content load\n */\n setLoadMore: function setLoadMore(contentSelector, itemSelector, buttonSelector, options, callback) {\n options = global_typeof(options) == 'object' ? options : {};\n var content = $(contentSelector);\n var loadMoreButton = $(buttonSelector);\n if (content.length && loadMoreButton.length) {\n var originalButtonText = loadMoreButton.text();\n\n // Bind load more event to button\n\n var bindLoadMore = function bindLoadMore(instance) {\n loadMoreButton.click(function (e) {\n e.preventDefault();\n instance.retrieve();\n });\n };\n\n // Init infinite scroll\n\n var defaultOptions = {\n 'navSelector': buttonSelector,\n 'nextSelector': buttonSelector,\n 'itemSelector': itemSelector,\n 'pathParse': function pathParse(path, page) {\n var pattern = /^(.*(\\?|&)page=)(\\d+)(.*)$/;\n var check = path.match(pattern);\n if (check) {\n return [check[1], check[4]];\n }\n return [];\n },\n 'loading': {\n 'loading': null,\n 'start': function start(options) {\n // Call this from infinitescroll plugin\n\n beginAjax(options);\n\n // Set load text and unbind click events\n\n loadMoreButton.text('Loading...').unbind('click').click(function (e) {\n e.preventDefault();\n });\n\n // Fade up/down while loading\n\n fadeOut = function fadeOut() {\n loadMoreButton.fadeTo(500, 0.25, function () {\n fadeUp();\n });\n };\n fadeUp = function fadeUp() {\n loadMoreButton.fadeIn(500, function () {\n fadeOut();\n });\n };\n fadeOut();\n },\n 'finished': function finished(options) {\n // Stop animation and reset text\n\n loadMoreButton.stop(true).css('opacity', 1).text(originalButtonText);\n\n // Update href with new page number\n\n href = loadMoreButton.attr('href');\n href = href.replace(/(\\?|&)page=(\\d+).*/, '$1page=' + (options.state.currPage + 1));\n loadMoreButton.attr('href', href);\n\n // Re-bind load more click event\n\n bindLoadMore($(this).data('infinitescroll'));\n if (typeof callback == 'function') callback();\n }\n },\n 'errorCallback': function errorCallback() {\n loadMoreButton.fadeOut(500);\n }\n };\n content.infinitescroll($.extend(true, defaultOptions, options));\n\n // Unbind infinitescroll scroll events and bind retrieval to the button\n\n var instance = content.data('infinitescroll');\n $(window).unbind('smartscroll.infscr.' + instance.options.infid);\n bindLoadMore(instance);\n return instance;\n }\n return false;\n }\n };\n var AntiUtil = {\n detect_winfont: function detect_winfont() {\n if (navigator.platform.indexOf('Win') > -1) {\n if (typeof screen.fontSmoothingEnabled != \"undefined\") {\n return screen.fontSmoothingEnabled;\n } else {\n try {\n var canvasNode = document.createElement(\"canvas\");\n canvasNode.width = \"35\";\n canvasNode.height = \"35\";\n canvasNode.style.display = \"none\";\n document.body.appendChild(canvasNode);\n var ctx = canvasNode.getContext(\"2d\");\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n ctx.fillStyle = \"black\";\n ctx.strokeStyle = \"black\";\n ctx.fillText(\"O\", 0, 0);\n for (var j = 8; j <= 32;
1 j++) {\n for (var i = 1; i <= 32; i++) {\n var imageData = ctx.getImageData(i, j, 1, 1).data;\n var alpha = imageData[3];\n if (alpha != 255 && alpha !== 0) {\n return true; // windows font-smoothing must be on.\n }\n }\n }\n\n return false;\n } catch (ex) {\n return false;\n }\n }\n } else {\n return false;\n }\n },\n detect_safari: function detect_safari() {\n if (window.devicePixelRatio) {\n if (escape(navigator.javaEnabled.toString()) == 'function%20javaEnabled%28%29%20%7B%20%5Bnative%20code%5D%20%7D') {\n return false;\n } else if (escape(navigator.javaEnabled.toString()) != 'function%20javaEnabled%28%29%20%7B%20%5Bnative%20code%5D%20%7D') {\n return true;\n }\n }\n },\n list_lastchild: function list_lastchild() {\n $('.list-withlast-2-u li:nth-child(2n)').addClass('list-last');\n $('.list-withlast-2-d div:nth-child(2n)').addClass('list-last');\n $('.list-withlast-3-u li:nth-child(3n)').addClass('list-last');\n $('.list-withlast-3-d div:nth-child(3n)').addClass('list-last');\n },\n sidebar_accordion: function sidebar_accordion() {\n if ($('.sbar-accordion').length > 0) {\n $('.sbar-accordion h4 a').click(function (e) {\n e.preventDefault();\n $(this).toggleClass('sel');\n $(this).parents('.sbar-accordion').children('.accordion-expanded').toggle('fast');\n });\n }\n },\n filter_accordion: function filter_accordion() {\n if ($('.filter-accordion').length > 0) {\n $('.filter-accordion .read-more').data('open', false).click(function (e) {\n e.preventDefault();\n var linkText;\n if ($(this).data('open') === true) {\n $(this).data('open', false);\n linkText = 'See Full List-';\n } else {\n $(this).data('open', true);\n linkText = 'Collapse List-';\n }\n $(this).html(linkText).parents('.filter-accordion').children('.accordion-expanded').toggle('fast');\n });\n }\n }\n };\n\n /**\n * ANTI global AJAX search input behavior\n */\n var AntiGlobalSearch = {\n // State\n\n active: false,\n // Whether the field is 'active' or not\n mouseInside: false,\n // Whether the mouse is inside of the form or not\n currentQuery: false,\n // false if no search is running, otherwise it's the term being searched\n currentRequest: null,\n // If a search is running, the current XHR object\n currentTimeout: null,\n // If a search is running, the timeout for current search request\n hasContent: false,\n // Whether the resultsElement has been filled with content from an AJAX request or not\n\n // Elements\n\n searchFormElement: null,\n inputElement: null,\n resultsElement: null,\n // Insert search result HTML from AJAX request here\n\n // Settings\n\n minimumCharacters: 2,\n // The minimum amount of characters to be typed before a search is sent to the server\n deactivatedWidth: null,\n // Input width when deactivated, get this from the element itself on init\n activatedWidth: 260,\n // Input width when activated\n resultsWidthOffset: 8,\n // Pixels above activated/deactivated widths to add to result window\n\n init: function init() {\n var self = this;\n\n // Elements\n\n this.searchFormElement = $('#anti-search');\n this.inputElement = $('input[name=q]', this.searchFormElement);\n this.resultsElement = $('<div />').addClass('search-expanded');\n this.inputElement.after(this.resultsElement);\n\n // Settings\n\n this.deactivatedWidth = this.inputElement.width();\n\n // Events\n\n this.searchFormElement.hover(function () {\n self.mouseInside = true;\n }, function () {\n self.mouseInside = false;\n });\n this.inputElement.focusin(function () {\n self.activateField();\n });\n this.inputElement.on('keyup search', function (e) {\n self.handleInput($(this).val());\n });\n this.inputElement.on('keydown', function (e) {\n // Cancel search when 'return' is hit\n if (e.keyCode == 13) {\n self.abortSearch();\n }\n });\n $('body').mouseup(function () {\n if (self.active && !self.mouseInside) {\n self.deactivateField();\n }\n });\n\n // Initial\n\n this.resultsElement.hide();\n },\n /**\n * Expand input and apply active state on interaction\n */\n activateField: function activateField() {\
1n var self = this;\n this.active = true;\n if (this.hasContent) this.searchFormElement.addClass('searching');\n this.inputElement.addClass('active').animate({\n 'width': this.activatedWidth\n }, 200, function () {\n self.resultsElement.show().css('height', 'auto');\n });\n },\n /**\n * Slim down input and remove active state\n */\n deactivateField: function deactivateField() {\n var self = this;\n this.active = false;\n this.searchFormElement.removeClass('searching');\n this.resultsElement.hide();\n this.inputElement.removeClass('active').animate({\n 'width': this.deactivatedWidth\n }, 200);\n },\n /**\n * Handle keyup event from search input field\n *\n * text (string) Text value from search input\n */\n handleInput: function handleInput(text) {\n text = $.trim(text);\n if (text.length >= this.minimumCharacters) {\n this.executeSearch(text);\n }\n },\n /**\n * Pass text off for AJAX search and handle results\n *\n * text (string) Text to search against\n */\n executeSearch: function executeSearch(text) {\n var self = this;\n if (this.currentQuery) {\n if (this.currentQuery == text) {\n return;\n } else {\n this.abortSearch();\n }\n }\n this._setLoadingState();\n this.hasContent = false;\n this.searchFormElement.addClass('searching');\n this.currentQuery = text;\n function run() {\n self.currentRequest = $.ajax(self.searchFormElement.attr('action'), {\n 'cache': false,\n 'data': {\n 'q': text\n },\n 'dataType': 'html',\n 'complete': function complete(jqXHR, textStatus) {\n self.handleResults(jqXHR, textStatus);\n }\n });\n }\n\n // Delay this a tad so that requests aren't being sent with every keystroke\n\n this.currentTimeout = window.setTimeout(function () {\n run();\n }, 500);\n },\n /**\n * Handle AJAX search response\n *\n * jqXHR (object) jQuery XMLHTTPRequest object from search response\n * textStatus (string) Status for AJAX search response\n */\n handleResults: function handleResults(jqXHR, textStatus) {\n this._unsetLoadingState();\n this.currentRequest = false;\n this.currentTimeout = null;\n this.hasContent = true;\n if (textStatus == 'success') {\n this.resultsElement.html(jqXHR.responseText);\n // @todo Highlight matched text with <span class=\"sel\">...</span>\n } else {\n this.resultsElement.append($('<h3 />').addClass('empty').text('There was an error with your search, please try again'));\n }\n },\n /**\n * Cancel search request\n */\n abortSearch: function abortSearch() {\n if (this.currentTimeout) {\n clearTimeout(this.currentTimeout);\n this.currentTimeout = null;\n }\n if (this.currentRequest) {\n this.currentRequest.abort();\n this.currentRequest = false;\n }\n this.currentQuery = false;\n this._unsetLoadingState();\n },\n /**\n * Set search form to 'loading' state\n */\n _setLoadingState: function _setLoadingState() {\n this.resultsElement.empty().addClass('loading').append($('<img />').attr({\n 'src': AntiData.images.loading,\n 'alt': 'Loading'\n }).addClass('loading'));\n },\n /**\n * Remove 'loading' state from search form\n */\n _unsetLoadingState: function _unsetLoadingState() {\n if (this.resultsElement.hasClass('loading')) {\n this.resultsElement.removeClass('loading').empty();\n }\n }\n };\n var AntiMailingList = (_AntiMailingList = {\n // Elements\n\n overlayBox: null,\n overlayHider: null,\n closeButton: null,\n openButton: null\n }, global_defineProperty(_AntiMailingList, \"overlayBox\", null), global_defineProperty(_AntiMailingList, \"form\", null), global_defineProperty(_AntiMailingList, \"loadingIndicator\", null), global_defineProperty(_AntiMailingList, \"init\", function init(
1) {\n return;\n var self = this;\n\n // Elements\n\n this.overlayBox = $('#mailing-list');\n this.overlayHider = $('.box-signup-hider');\n this.closeButton = $('#mailing-list .btn-ml-close, .box-signup-hider');\n this.openButton = $('.btn-ml-open');\n this.loadingIndicator = $('<img />').attr({\n 'src': AntiData.images.loading,\n 'alt': 'Loading',\n 'class': 'loading'\n }).hide();\n this.closeButton.before(this.loadingIndicator);\n\n // Events\n\n this.openButton.click(function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.openOverlay();\n });\n this.closeButton.click(function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.closeOverlay();\n });\n this.overlayHider.click(function (e) {\n e.preventDefault();\n self.closeOverlay();\n });\n this.bindForm();\n }), global_defineProperty(_AntiMailingList, \"openOverlay\", function openOverlay() {\n this.overlayHider.stop(true).fadeIn(200);\n this.overlayBox.stop(true).fadeIn(200);\n }), global_defineProperty(_AntiMailingList, \"closeOverlay\", function closeOverlay() {\n this.overlayBox.stop(true).fadeOut(200);\n this.overlayHider.stop(true).fadeOut(150);\n }), global_defineProperty(_AntiMailingList, \"bindForm\", function bindForm() {\n var self = this;\n this.form = this.overlayBox.find('form');\n if (this.form) {\n this.form.submit(function (e) {\n e.preventDefault();\n self.handleSubmit();\n });\n }\n }), global_defineProperty(_AntiMailingList, \"handleSubmit\", function handleSubmit() {\n var self = this;\n this._setLoadingState();\n $.post(this.form.attr('action'), this.form.serialize(), function (data, textStatus, jqXHR) {\n setTimeout(function () {\n self._unsetLoadingState();\n self.form.replaceWith(data);\n self.bindForm();\n }, 300);\n });\n }), global_defineProperty(_AntiMailingList, \"_setLoadingState\", function _setLoadingState() {\n this.form.css('opacity', 0.3);\n this.closeButton.filter('.btn-ml-close').hide();\n this.loadingIndicator.show();\n }), global_defineProperty(_AntiMailingList, \"_unsetLoadingState\", function _unsetLoadingState() {\n this.form.css('opacity', 1);\n this.closeButton.show();\n this.loadingIndicator.hide();\n }), _AntiMailingList);\n window.Anti = Anti;\n window.AntiUtil = AntiUtil;\n window.AntiGlobalSearch = AntiGlobalSearch;\n window.AntiMailingList = AntiMailingList;\n $(document).ready(function () {\n Anti.init();\n search.start();\n });\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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0FBQ1ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDbkksSUFBSSxFQUFFO0lBQy9DLElBQUksQ0FBQ2xNLGdCQUFnQixDQUFDc0YsSUFBSSxFQUFFO0VBQ2hDLENBQUMsR0FBQXFPLHFCQUFBLENBQUFqTSxnQkFBQSx3QkFFbU
1IsU0FBQXNMLG1CQUFBLEVBQVc7SUFDM0IsSUFBSSxDQUFDeFQsSUFBSSxDQUFDa0ssR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDK0osV0FBVyxDQUFDbk8sSUFBSSxFQUFFO0lBQ3ZCLElBQUksQ0FBQ3RGLGdCQUFnQixDQUFDa00sSUFBSSxFQUFFO0VBQ2hDLENBQUMsR0FBQXhFLGdCQUFBLENBRUo7RUFFRGhCLE1BQU0sQ0FBQ2lCLElBQUksR0FBR0EsSUFBSTtFQUNsQmpCLE1BQU0sQ0FBQ21CLFFBQVEsR0FBR0EsUUFBUTtFQUMxQm5CLE1BQU0sQ0FBQ29ELGdCQUFnQixHQUFHQSxnQkFBZ0I7RUFDMUNwRCxNQUFNLENBQUN1QyxlQUFlLEdBQUdBLGVBQWU7RUFFeEMxQixDQUFDLENBQUNsSSxRQUFRLENBQUMsQ0FBQ2lWLEtBQUssQ0FBQyxZQUFXO0lBQ3pCM00sSUFBSSxDQUFDQyxJQUFJLEVBQUU7SUFDWG5HLFlBQVksRUFBRTtFQUNsQixDQUFDLENBQUM7QUFFTixDQUFDLEVBQUU4UyxNQUFNLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hbnRpLy4vYW50aS9zdGF0aWMvanMvc2VhcmNoL2N1c3RvbVNlYXJjaGJveC5qcz8yMjExIiwid2VicGFjazovL2FudGkvLi9hbnRpL3N0YXRpYy9qcy9zZWFyY2gvcXVpY2tTZWFyY2guanM/MWZkMSIsIndlYnBhY2s6Ly9hbnRpLy4vYW50aS9zdGF0aWMvanMvc2VhcmNoL3NpdGVTZWFyY2guanM/ZGQ5ZiIsIndlYnBhY2s6Ly9hbnRpLy4vYW50aS9zdGF0aWMvanMvc2VhcmNoL3NlYXJjaENsaWVudC5qcz84ZmM2Iiwid2VicGFjazovL2FudGkvLi9hbnRpL3N0YXRpYy9qcy9nbG9iYWwuanM/OTMzNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8vIENyZWF0ZSBhIHJlbmRlciBmdW5jdGlvblxuY29uc3QgcmVuZGVyU2VhcmNoQm94ID0gKHJlbmRlck9wdGlvbnMsIGlzRmlyc3RSZW5kZXIpID0+IHtcbiAgICBjb25zdCB7IHF1ZXJ5LCByZWZpbmUsIGNsZWFyLCBpc1NlYXJjaFN0YWxsZWQsIHdpZGdldFBhcmFtcyB9ID0gcmVuZGVyT3B0aW9ucztcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHdpZGdldFBhcmFtcy5jb250YWluZXIpXG5cbiAgICBpZiAoaXNGaXJzdFJlbmRlcikge1xuICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpXG4gICAgICAgIGZvcm0uY2xhc3NMaXN0LmFkZCgnYWlzLVNlYXJjaEJveC1mb3JtJylcbiAgICAgICAgZm9ybS5hY3Rpb24gPSBcIi9zZWFyY2gvXCJcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYWlzLVNlYXJjaEJveC1pbnB1dCcpXG4gICAgICAgIGlucHV0Lm5hbWUgPSBcInF1ZXJ5XCI7XG4gICAgICAgIGlucHV0LnBsYWNlaG9sZGVyID0gd2lkZ2V0UGFyYW1zLnBsYWNlaG9sZGVyID8/ICdTZWFyY2gnXG5cbiAgICAgICAgY29uc3QgbG9hZGluZ0luZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbG9hZGluZ0luZGljYXRvci50ZXh0Q29udGVudCA9ICdMb2FkaW5nLi4uJztcblxuICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgYnV0dG9uLnR5cGUgPSAnc3VibWl0J1xuICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWlzLVNlYXJjaEJveC1zdWJtaXQnKVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHJlc2V0QnV0dG9uLnR5cGUgPSAncmVzZXQnXG4gICAgICAgIHJlc2V0QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Fpcy1TZWFyY2hCb3gtcmVzZXQnKVxuXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgLy8gZmlsdGVyIHNlYXJjaGJvdCB0cmFmZmljXG4gICAgICAgICAgICBpZiAoL1tcXHUzMTMxLVxcdUQ3OURdKyQvLnRlc3QoZXZlbnQudGFyZ2V0LnZhbHVlKSA9PSB0cnVlIHx8IGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAyMCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHNraXBwZWQgc2VhcmNoICR7ZXZlbnQudGFyZ2V0LnZhbHVlfWApXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICByZWZpbmUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgZm9ybS5zdWJtaXQoKVxuICAgICAgICB9KTtcblxuICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChsb2FkaW5nSW5kaWNhdG9yKTtcbiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZm9ybSlcbiAgICB9XG5cbiAgICBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSA9IHF1ZXJ5O1xuICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzcGFuJykuaGlkZGVuID0gIWlzU2VhcmNoU3RhbGxlZDtcbn07XG5cbiAgICAgIC8vIGNyZWF0ZSBjdXN0b20gd2lkZ2V0XG5leHBvcnQgY29uc3QgY3VzdG9tU2VhcmNoQm94ID0gaW5zdGFudHNlYXJjaC5jb25uZWN0b3JzLmNvbm5lY3RTZWFyY2hCb3goIHJlbmRlclNlYXJjaEJveCApOyIsImltcG9ydCB7IGNhdGVnb3J5TGlzdCB9IGZyb20gJy4vc2VhcmNoQ2xpZW50J1xuaW1wb3J0IHsgY3VzdG9tU2VhcmNoQm94IH0gZnJvbSAnLi9jdXN0b21TZWFyY2hib3gnXG5cbmV4cG9ydCBjb25zdCBxdWlja1NlYXJjaCA9IGZ1bmN0aW9uKGFsZ29saWFDbGllbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5hbGdvbGlhQ2xpZW50LFxuICAgICAgICBzZWFyY2gocmVxdWVzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhbnRpLXNlYXJjaCcpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0cy5ldmVyeSgoeyBwYXJhbXMgfSkgPT4gIXBhcmFtcy5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hCb3guY2xhc3NMaXN0LnJlbW92ZSgnc2VhcmNoaW5nJylcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0czogcmVxdWVzdHMubWFwKCgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iSGl0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iUGFnZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1RpbWVNUzogMCxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgI
1H0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBzZWFyY2hCb3guY2xhc3NMaXN0LmFkZCgnc2VhcmNoaW5nJylcbiAgICAgICAgICAgIHJldHVybiBhbGdvbGlhQ2xpZW50LnNlYXJjaChyZXF1ZXN0cylcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmNvbnN0IGF1dG9jb21wbGV0ZSA9IGluc3RhbnRzZWFyY2guY29ubmVjdG9ycy5jb25uZWN0QXV0b2NvbXBsZXRlKFxuKHsgaW5kaWNlcywgcmVmaW5lLCB3aWRnZXRQYXJhbXMgfSwgaXNGaXJzdFJlbmRlcmluZykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciwgb25TZWxlY3RDaGFuZ2UgfSA9IHdpZGdldFBhcmFtcztcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnRhaW5lckVsLmlubmVySFRNTCA9IFwiXCJcbiAgICAgICAgY29uc3QgdWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgICAgICBjb25zdCBzZWVBbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICAgICAgaWYoIGluZGljZXMubGVuZ3RoICYmIGluZGljZXNbMF0uaGl0cy5sZW5ndGggKXtcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSByZXN1bHRzLCBjcmVhdGUgdGhlICdzZWUgYWxsJyBsaW5rXG4gICAgICAgICAgICBzZWVBbGwuaW5uZXJIVE1MID0gYFNlZSBhbGwgJHtpbmRpY2VzWzBdLnJlc3VsdHMubmJIaXRzfSByZXN1bHRzYDtcbiAgICAgICAgICAgIHNlZUFsbC5ocmVmID0gYC9zZWFyY2gvP3F1ZXJ5PSR7aW5kaWNlc1swXS5yZXN1bHRzLnF1ZXJ5fWBcbiAgICAgICAgICAgIHNlZUFsbC5jbGFzc0xpc3QuYWRkKCdzZWUtYWxsJylcbiAgICAgICAgICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHNlZUFsbClcbiAgICAgICAgICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHVsKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmlyc3RSZW5kZXJpbmcpIHtcbiAgICAgICAgICAgIC8vICBIZXJlIGlzIHdoZXJlIHlvdSBhdHRhY2gganF1ZXJ5IG9yIDNyZCBsaWJyYXJ5IG9yIGNsaWNrIGV2ZW50c1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdCA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3IoJ3VsJylcblxuICAgICAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggc2V0IG9mIHJlc3VsdHMsIGNyZWF0ZSBhIGxpc3RcbiAgICAgICAgICAgIGlmIChpbmRleC5yZXN1bHRzLmhpdHMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKVxuXG4gICAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGluZGV4LnJlc3VsdHMucGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB1cmxQYXJhbXMuZ2V0KCdmaWx0ZXJzJylcbiAgICAgICAgICAgIC8vIGZpbmQgdGhlIGNhdGVnb3J5IG5hbWUgZnJvbSB0aGUgZmlsdGVyXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGZpbHRlcnMgJiYgZmlsdGVycy5zcGxpdCgnOicpLmxlbmd0aCAmJiBmaWx0ZXJzLnNwbGl0KCc6JykucG9wKClcbiAgICAgICAgICAgIGxpLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz1cImxmXCI+JHtjYXRlZ29yeSA/IGNhdGVnb3J5IDogJ1RvcCBIaXQnfTwvc3Bhbj5gXG5cbiAgICAgICAgICAgIGluZGV4LnJlc3VsdHMuaGl0cy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIGhpdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gaGl0LnVybDtcbiAgICAgICAgICAgICAgICAgICAgbGluay5pbm5lckhUTUwgPSBoaXQudGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmspXG4gICAgICAgICAgICAgICAgICAgIGxpLmFwcGVuZENoaWxkKGxpbmspXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaSlcbiAgICAgICAgICAgIGxpc3QuYXBwZW5kQ2hpbGQobGkpXG4gICAgICAgIH0pO1xuICAgIH1cbik7XG5cblxuY29uc3QgZ2V0Q2F0ZWdvcnlXaWRnZXRMaXN0ID0gKCkgPT4ge1xuICAgIGxldCB3aWRnZXRzID0gW11cbiAgICBjYXRlZ29yeUxpc3QubWFwKCAobG9vcENhdGVnb3J5LCBpKSA9PiB7XG4gICAgICAgIHdpZGdldHMucHVzaChcbiAgICAgICAgICAgIGluc3RhbnRzZWFyY2gud2lkZ2V0cy5pbmRleCh7IGluZGV4TmFtZTogXCJhbnRpXCIgfSlcbiAgICAgICAgICAgICAgICAuYWRkV2lkZ2V0cyhbIFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuY29uZmlndXJlKHtmaWx0ZXJzOiBgY2F0ZWdvcnk6JHtsb29wQ2F0ZWdvcnl9YCwgaGl0c1BlclBhZ2U6IDJ9KSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICApfVxuICAgIClcbiAgICByZXR1cm4gd2lkZ2V0c1xufVxuXG5leHBvcnQgY29uc3QgZ2V0V2lkZ2V0TGlzdCA9ICgpID0+IHtcbiAgICBsZXQgd2lkZ2V0TGlzdCA9IFtcbiAgICAgICAgY3VzdG9tU2VhcmNoQm94KHsgY29udGFpbmVyOiAnI3F1aWNrU2VhcmNoLWlucHV0JywgfSksXG4gICAgICAgIGluc3RhbnRzZWFyY2gud2lkZ2V0cy5jb25maWd1cmUoe1xuICAgICAgICAgICAgaGl0c1BlclBhZ2U6IDEsXG4gICAgICAgIH0pLFxuICAgICAgICBhdXRvY29tcGxldGUoe1xuICAgICAgICAgICAgY29udGFpbmVyOiAnI3F1aWNrU2VhcmNoLWhpdHMnLFxuICAgICAgICB9KSxcbiAgICBdXG4gICAgY29uc3QgY2F0V2lkZ2V0cyA9IGdldENhdGVnb3J5V2lkZ2V0TGlzdCgpXG4gICAgLy8gY29uc29sZS5sb2coY2F0V2lkZ2V0cylcbiAgICByZXR1cm4gWy4uLndpZGdldExpc3QsIC4uLmNhdFdpZGdldHNdXG59IiwiaW1wb3J0IHsgY2F0ZWdvcnlMaXN0IH0gZnJvbSAnLi9zZWFyY2hDbGllbnQnXG5pbXBvcnQgeyBjdXN0b21TZWFyY2hCb3ggfSBmcm9tICcuL2N1c3RvbVNlYXJjaGJveC
1dcblxuXG5leHBvcnQgY29uc3QgaXRlbVRlbXBsYXRlcyA9IHtcbiAgICBhcnRpc3Q6IGBcbiAgICAgICAgICA8YSBocmVmPVwie3sgdXJsIH19XCI+PGltZyBzcmM9XCJ7eyBpbWFnZV91cmwgfX1cIiB3aWR0aD1cIjIyOFwiIGhlaWdodD1cIjEyN1wiIGFsdD1cInt7IHRpdGxlIH19XCI+PC9hPlxuICAgICAgICAgIDxoND48YSBocmVmPVwie3sgdXJsIH19XCI+e3sgdGl0bGUgfX08L2E+PC9oND5cbiAgICAgIGAsXG4gICAgcmVsZWFzZTogYFxuICAgICAgICAgIHt7XmlzX2hpZGRlbn19PGEgaHJlZj1cInt7IHVybCB9fVwiPnt7L2lzX2hpZGRlbn19PGltZyBzcmM9XCJ7e2ltYWdlX3VybH19XCIgd2lkdGg9XCIxMzhcIiBoZWlnaHQ9XCIxMzhcIiBhbHQ9XCJ7eyBuYW1lIH19XCI+e3teaXNfaGlkZGVufX08L2E+e3svaXNfaGlkZGVufX1cbiAgICAgICAgICA8aDQ+e3teaXNfaGlkZGVufX08YSBocmVmPVwie3sgdXJsIH19XCI+e3svaXNfaGlkZGVufX17eyB0aXRsZSB9fXt7XmlzX2hpZGRlbn19PC9hPnt7L2lzX2hpZGRlbn19PC9oND5cbiAgICAgICAgICA8aDU+PGEgaHJlZj1cInt7IGFydGlzdF91cmwgfX1cIj57eyBhcnRpc3QgfX08L2E+PC9oNT5cbiAgICAgIGAsXG5cbiAgICBuZXdzOiBgXG4gICAgICAgIDxhIGhyZWY9XCJ7eyB1cmwgfX1cIj57eyB0aXRsZSB9fTwvYT5cbiAgICAgIGAsXG4gICAgdmlkZW86IGBcbiAgICAgICAge3sjZHVyYXRpb259fTxzcGFuIGNsYXNzPVwibnVtXCI+e3sgZHVyYXRpb24gfX08L3NwYW4+e3svZHVyYXRpb259fVxuICAgICAgICA8YSBocmVmPVwie3sgdXJsIH19XCI+PGltZyBzcmM9XCJ7e2ltYWdlX3VybH19XCIgd2lkdGg9XCIyMjhcIiBoZWlnaHQ9XCIxMjdcIiBhbHQ9XCJ7eyB0aXRsZSB9fVwiPjwvYT5cbiAgICAgICAgPGg0PjxhIGhyZWY9XCJ7eyB1cmwgfX1cIj57eyB0aXRsZSB9fTwvYT48L2g0PlxuICAgICAgYCxcbiAgICB0cmFjazogYFxuICAgICAgICA8c3BhbiBjbGFzcz1cInJmIGxlbmd0aFwiPnt7IG5pY2VfZHVyYXRpb24gfX08L3NwYW4+XG4gICAgICAgIHt7I2NvbnRlbnR9fTxzcGFuIGNsYXNzPVwicmZcIj48YSBocmVmPVwie3sgdXJsIH19I2x5cmljc1wiPkx5cmljczwvYT48L3NwYW4+e3svY29udGVudH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmZcIj48YSBocmVmPVwie3sgdXJsIH19XCI+VHJhY2sgRGV0YWlsczwvYT48L3NwYW4+XG4gICAgICAgIDxhIGhyZWY9XCJ7eyB1cmwgfX1cIj57eyBhcnRpc3QgfX0gLSB7eyB0aXRsZSB9fTwvYT4gICAgXG4gICAgIGAsXG4gICAgc2hvdzogYFxuICAgIDxkaXYgY2xhc3M9XCJkYXRlLWl0ZW0gY2xlYXJmaXhcIj5cbiAgICAgICAgPGg0Pnt7IGRhdGVfZm9ybWF0dGVkIH19IC0ge3sgbW9udGhfZm9ybWF0dGVkIH19PC9oND5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFydFwiPjxhIGhyZWY9XCJ7eyBhcnRpc3RfdXJsIH19XCI+e3sgdGl0bGUgfX08L2E+PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsb2NcIj57eyBsb2NhdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidmVuXCI+e3sjdXJsfX08YSBocmVmPVwie3sgdXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3svdXJsfX17eyBjb250ZW50IH19e3sjdXJsfX08L2E+e3svdXJsfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRpbVwiPnt7IHRpbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxpbmtcIj57eyNmYWNlYm9va19yc3ZwX3VybH19PGEgaHJlZj1cInt7IGZhY2Vib29rX3JzdnBfdXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+UlNWUDwvYT57ey9mYWNlYm9va19yc3ZwX3VybH19Jm5ic3A7PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsaW5rXCI+e3sjdGlja2V0X3VybH19PGEgaHJlZj1cInt7IHRpY2tldF91cmwgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5UaWNrZXRzPC9hPnt7L3RpY2tldF91cmx9fSZuYnNwOzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICAgICAgYCxcbiAgICBwcmVzczogYFxuICAgICAgICA8YSBocmVmPVwie3sgdXJsIH19XCI+e3sgdGl0bGUgfX08L2E+XG4gICAgICBgLFxufVxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdpZGdldExpc3QoY2F0ZWdvcnksIHNpdGVTZWFyY2hQYXJhbXMpIHtcbiAgICBsZXQgd2lkZ2V0TGlzdCA9IFtcbiAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLmNvbmZpZ3VyZSggc2l0ZVNlYXJjaFBhcmFtcyApLFxuICAgICAgICBjdXN0b21TZWFyY2hCb3goeyBjb250YWluZXI6ICcjcXVpY2tTZWFyY2gtaW5wdXQnIH0pLFxuICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuc3RhdHMoe1xuICAgICAgICAgICAgY29udGFpbmVyOiAnaDEuYm90Ym9yZGVyJyxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIHRleHQ6IChzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2F0TGFiZWwgPSBjYXRlZ29yeSA/IGBJbiAnJHtjYXRlZ29yeX0nYCA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwic21sXCI+JHsgc3RhdHMubmJIaXRzIH0gc2VhcmNoIHJlc3VsdHMgJHtjYXRMYWJlbH0gZm9yIDwvc3Bhbj4mbGRxdW87JHtzdGF0cy5xdWVyeX0mcmRxdW87YFxuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuaGl0cyh7XG4gICAgICAgICAgICBjb250YWluZXI6ICcubm8tcmVzdWx0cycsXG4gICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgZW1wdHk6IGBcbiAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9XCJhcnQtc3RuZCBhcnQtc3RuZC13aGl0ZSBuby1zZWFyY2gtcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8aDM+U29ycnkhPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBzZWFyY2ggcmVzdWx0cyB3ZXJlIGZvdW5kIGZvciBcInt7IHF1ZXJ5IH19XCIuPGJyPnBsZWFzZSB0cnkgYWdhaW4gLi4uPC9wPlxuICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgaXRlbTogJydcbiAgICAgICAgICAgI
1H1cbiAgICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgXG4gICAgXVxuICAgIGlmIChjYXRlZ29yeSkge1xuICAgICAgICBjb25zdCBzaW5nbGVDYXRMaXN0ID0gW1xuICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLnN0YXRzKHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGAuZmlsdGVyLXN0bmQgLmFsbCAubnVtYCxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiBcIiZsYXJyO1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksICAgICAgICAgICAgXG4gICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuY29uZmlndXJlKHtmaWx0ZXJzOiBgY2F0ZWdvcnk6JHtjYXRlZ29yeX1gfSksXG4gICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuc3RhdHMoe1xuICAgICAgICAgICAgY29udGFpbmVyOiBgIyR7Y2F0ZWdvcnl9IC5taW5pLWZ1bmNgLFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiB7IFxuICAgICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgICBEaXNwbGF5aW5nIDxiPiR7c3RhdHMubmJIaXRzfTwvYj4gb2YgPGI+JHtzdGF0cy5uYkhpdHN9PC9iPiByZXN1bHRzIHwgPGEgaHJlZj1cIi9zZWFyY2gvLz9xdWVyeT0ke3N0YXRzLnF1ZXJ5fVwiPkJhY2sgdG9cbiAgICAgICAgICAgICAgICAgIEFsbCBSZXN1bHRzPC9hPiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuaW5maW5pdGVIaXRzKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogYCMke2NhdGVnb3J5fSAucmVzdWx0LWl0ZW1zYCxcbiAgICAgICAgICAgIGVzY2FwZUhUTUw6IGZhbHNlLFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbVRlbXBsYXRlc1tjYXRlZ29yeV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgICAgd2lkZ2V0TGlzdCA9IFsgLi4ud2lkZ2V0TGlzdCwgLi4uc2luZ2xlQ2F0TGlzdF1cbiAgICB9ZWxzZXtcbiAgICAgICAgd2lkZ2V0TGlzdC5wdXNoKFxuICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLnN0YXRzKHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGAuZmlsdGVyLXN0bmQgLmFsbCAubnVtYCxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiBzdGF0cy5uYkhpdHMgfHwgJzAnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBjYXRlZ29yeUxpc3QubWFwKCAobG9vcENhdGVnb3J5LCBpKSA9PiB7XG4gICAgICAgICAgICB3aWRnZXRMaXN0LnB1c2goXG4gICAgICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLmluZGV4KHtcbiAgICAgICAgICAgICAgICBpbmRleE5hbWU6ICdhbnRpJ1xuICAgICAgICAgICAgICAgIH0pLmFkZFdpZGdldHMoWyBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuY29uZmlndXJlKHtmaWx0ZXJzOiBgY2F0ZWdvcnk6JHtsb29wQ2F0ZWdvcnl9YH0pLFxuICAgICAgICAgICAgICAgIGluc3RhbnRzZWFyY2gud2lkZ2V0cy5zdGF0cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogYCMke2xvb3BDYXRlZ29yeX0gLm1pbmktZnVuY2AsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAoc3RhdHMpID0+IHsgXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJfbWVudS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlpbmcgXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIl9jb3VudFwiPiR7TWF0aC5taW4oc3RhdHMubmJIaXRzLHN0YXRzLmhpdHNQZXJQYWdlKX08L3NwYW4+IFxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgPHNwYW4gY2xhc3M9XCJfY291bnRcIj4ke3N0YXRzLm5iSGl0c308L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiL3NlYXJjaC8ke2xvb3BDYXRlZ29yeX0/cXVlcnk9JHtzdGF0cy5xdWVyeX1cIiBjbGFzcz1cIl9zZWFyY2gtYWxsXCI+U2VlIEFsbDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLnN0YXRzKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBgLmZpbHRlci1zdG5kIC4ke2xvb3BDYXRlZ29yeX0gLm51bWAsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiBzdGF0cy5uYkhpdHMgfHwgJzAnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSwgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLmhpdHMoe1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IGAjJHtsb29wQ2F0ZWdvcnl9IC5yZXN1bHQtaXRlbXNgLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVIVE1MOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1UZW1wbGF0ZXNbbG9vcENhdGVnb3J5XSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0TGlzdFxufVxuXG5leHBvcnQgY29uc3Qgc2l0ZVNlYXJjaCA9IChhbGdvbGlhQ2xpZW50KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWxnb2xpYUNsaWVudCxcbiAgICAgICAgc2VhcmNoKHJlcXVlc3RzKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hCb3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYW50aS1zZWFyY2gnKVxuICAgICAgICAgICAgLy8gZmlsdGVyIHNlYXJjaGJvdCB0cmFmZmljXG4gICAgICAgICAgICBpZiAocmVxdWVzdHMuZXZlcnkoKHsgcGFyYW1zIH0pID0+ICghcGFyYW1zLnF1ZXJ5IHx8IC9bXFx1MzEzMS1cXHVENzlEXSskLy50ZXN0KHBhcmFtcy5xdWVyeSkgPT0gdHJ1ZSB8fCBwYXJhbXMucXVlcnkubGVuZ3RoID4gMjApKSkge1xuICAgICAgICAgICAgICAgI
1HNlYXJjaEJveC5jbGFzc0xpc3QucmVtb3ZlKCdzZWFyY2hpbmcnKVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzOiByZXF1ZXN0cy5tYXAoKGksZWwpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iSGl0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iUGFnZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1RpbWVNUzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBpLnBhcmFtcy5xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNlYXJjaEJveC5jbGFzc0xpc3QuYWRkKCdzZWFyY2hpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGFsZ29saWFDbGllbnQuc2VhcmNoKHJlcXVlc3RzKVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogZ2xvYmFsIGFsZ29saWFzZWFyY2ggaW5zdGFudHNlYXJjaCAqL1xuaW1wb3J0IHsgcXVpY2tTZWFyY2gsIGdldFdpZGdldExpc3QgYXMgcXVpY2tTZWFyY2hXaWRnZXRMaXN0IH0gZnJvbSAnLi9xdWlja1NlYXJjaCdcbmltcG9ydCB7IHNpdGVTZWFyY2gsIGdldFdpZGdldExpc3QgYXMgc2l0ZVNlYXJjaFdpZGdldExpc3QgfSBmcm9tICcuL3NpdGVTZWFyY2gnXG5cbmV4cG9ydCBjb25zdCBjYXRlZ29yeUxpc3QgPSBbXG4gICAgJ2FydGlzdCcsICdyZWxlYXNlJywgJ3Nob3cnLCAndmlkZW8nLCAgJ3RyYWNrJywgJ25ld3MnLCAncHJlc3MnXG5dO1xuXG5jb25zdCBtYXRjaGVzID0gLyg/Ol5cXC9zZWFyY2hcXC8pKFxcdyspL2cuZXhlYyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpXG5jb25zdCBjYXRlZ29yeSA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAxICYmIG1hdGNoZXNbMV1cblxuY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKVxuY29uc3QgcXVlcnkgPSB1cmxQYXJhbXMuZ2V0KCdxdWVyeScpIHx8IHVybFBhcmFtcy5nZXQoJ3EnKVxuXG5sZXQgc2l0ZVNlYXJjaFBhcmFtcyA9IHtcbiAgICBoaXRzUGVyUGFnZTogNixcbiAgICBxdWVyeTogcXVlcnlcbn1cblxuY29uc3QgYWxnb2xpYUNsaWVudCA9IGFsZ29saWFzZWFyY2goXG4gICAgd2luZG93LkFudGlEYXRhLkFMR09MSUFfQVBQTElDQVRJT05fSUQsIFxuICAgIHdpbmRvdy5BbnRpRGF0YS5BTEdPTElBX0FQSV9LRVlfU0VBUkNIXG4pXG5cbmNvbnN0IGlzUXVpY2tTZWFyY2ggPSAhd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9zZWFyY2gvJykgXG5jb25zdCBzZWFyY2hDbGllbnQgPSBpc1F1aWNrU2VhcmNoID8gcXVpY2tTZWFyY2goYWxnb2xpYUNsaWVudCkgOiBzaXRlU2VhcmNoKGFsZ29saWFDbGllbnQpXG5cbmV4cG9ydCBjb25zdCBzZWFyY2ggPSBpbnN0YW50c2VhcmNoKHtcbiAgICBpbmRleE5hbWU6IGNhdGVnb3J5ID09IFwibmV3c1wiID8gXCJhbnRpXCIgOiBcImFudGlcIixcbiAgICBzZWFyY2hDbGllbnQ6IHNlYXJjaENsaWVudCxcbiAgICBpbml0aWFsVWlTdGF0ZToge1xuICAgICAgICBhbnRpOiBzaXRlU2VhcmNoUGFyYW1zLFxuICAgIH0gICAgXG59KVxuXG5jb25zdCB3aWRnZXRMaXN0ID0gaXNRdWlja1NlYXJjaCA/IHF1aWNrU2VhcmNoV2lkZ2V0TGlzdCgpIDogc2l0ZVNlYXJjaFdpZGdldExpc3QoY2F0ZWdvcnksIHNpdGVTZWFyY2hQYXJhbXMpXG5cbnNlYXJjaC5hZGRXaWRnZXRzKFtcbiAgICAuLi53aWRnZXRMaXN0XG5dKVxuXG5cbnNlYXJjaC5vbigncmVuZGVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaEJveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hbGdvbGlhLXNlYXJjaCcpXG4gICAgZm9yKGxldCBpPTA7aTxjYXRlZ29yeUxpc3QubGVuZ3RoO2krKyl7XG4gICAgICAgIGlmICgkKGAjJHtjYXRlZ29yeUxpc3RbaV19IC5yZXN1bHQtaXRlbXMgbGlgKS5sZW5ndGggPCAxKSB7XG5cbiAgICAgICAgICAgIGxldCByZXN1bHRMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7Y2F0ZWdvcnlMaXN0W2ldfWApXG4gICAgICAgICAgICBpZiAocmVzdWx0TGlzdCkgcmVzdWx0TGlzdC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKVxuICAgICAgICAgICAgbGV0IHJlc3VsdEZpbHRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5maWx0ZXItc3RuZCAuJHtjYXRlZ29yeUxpc3RbaV19YClcbiAgICAgICAgICAgIGlmIChyZXN1bHRGaWx0ZXIpIHJlc3VsdEZpbHRlci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKVxuXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbGV0IHJlc3VsdExpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtjYXRlZ29yeUxpc3RbaV19YClcbiAgICAgICAgICAgIGlmIChyZXN1bHRMaXN0KSByZXN1bHRMaXN0LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpXG4gICAgICAgICAgICBsZXQgcmVzdWx0RmlsdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmZpbHRlci1zdG5kIC4ke2NhdGVnb3J5TGlzdFtpXX1gKVxuICAgICAgICAgICAgaWYgKHJlc3VsdEZpbHRlcikgcmVzdWx0RmlsdGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpXG4gICAgICAgIH1cbiAgICB9XG59KSIsIi8qKlxuICogIEFOVEktXG4gKiAgSGFuZGxlcyBhbGwgZ2xvYmFsIGJlaGF2aW9ycyBhbmQgcHJvcGVydGllcyBmb3IgQU5USS1cbiAqXG4gKiAgRGVwZW5kZW5jaWVzOlxuICogICAgICBqUXVlcnkgMS43LjFcbiAqICAgICAganF1ZXJ5LmluZmluaXRlc2Nyb2xsLmpzXG4gKi9cbmltcG9ydCB7IHNlYXJjaCB9IGZyb20gJy4vc2VhcmNoL3NlYXJjaENsaWVudC5qcyc7XG5cbihmdW5jdGlvbigkKSB7XG5cbiAgICB2YXIgQW50aSA9IHtcblxuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY3JhcHB5IHNhZmFyaSBjdXN0b20gZm9udHMgaW4gdGV4dCBpbnB1dCBoYW5kbGluZ1xuICAgICAgICAgICAgaWYgKEFudGlVdGlsLmRldGVjdF9zYWZhcmkoKSkge1xuICAgICAgICAgICAgICAgICQoJ1twbGFjZWhvbGRlcl0nKS5lYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBoVmFsI
1D0gJCh0aGlzKS5hdHRyKCdwbGFjZWhvbGRlcicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3ZhbHVlJyxwaFZhbCk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigncGxhY2Vob2xkZXInLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5mb2N1cyhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpID09ICQodGhpcylbMF0uZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS5ibHVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkudHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCQodGhpcylbMF0uZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNyYXBweSB3aW5kb3dzIGZvbnQgaGFuZGxpbmdcbiAgICAgICAgICAgIGlmIChBbnRpVXRpbC5kZXRlY3Rfd2luZm9udCgpKSB7XG4gICAgICAgICAgICAgICAgJCgnaHRtbCcpLmFkZENsYXNzKCd3aW5mb250cycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBnbG9iYWwgbmF2XG4gICAgICAgICAgICBpZiAoJCgnaHRtbCcpLmhhc0NsYXNzKCdpZTYnKSB8fCAkKCdodG1sJykuaGFzQ2xhc3MoJ2llNycpIHx8ICQoJ2h0bWwnKS5oYXNDbGFzcygnaWU4JykpIHtcbiAgICAgICAgICAgICAgICBBbnRpLnN0aWNreV9uYXZfaWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgQW50aS5zdGlja3lfbmF2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBsYXN0IGNoaWxkIGhhbmRsZXJcbiAgICAgICAgICAgIEFudGlVdGlsLmxpc3RfbGFzdGNoaWxkKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBzaWRlYmFyIGFjY29yZGlvbiBoYW5kbGVyXG4gICAgICAgICAgICBBbnRpVXRpbC5zaWRlYmFyX2FjY29yZGlvbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBnbG9iYWwgZmlsdGVyIGFjY29yZGlvbiBoYW5kbGVyXG4gICAgICAgICAgICBBbnRpVXRpbC5maWx0ZXJfYWNjb3JkaW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBzb2NpYWwgaWNvbnMgKHRoaXMgaXMgZHVlIHRvIElFIGJ1Z3MpXG4gICAgICAgICAgICBBbnRpLnN0bmRfc29jaWFsKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBtYWlsaW5nIGxpc3RcbiAgICAgICAgICAgIEFudGlNYWlsaW5nTGlzdC5pbml0KCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICB3ZWJmb250X2FjdGl2ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBBbnRpLmFydGljbGVfcmVzaXplcigpO1xuICAgICAgICAgICAgQW50aS5hbGJ1bV9jYXJvdXNlbF9zZXRoZWlnaHQoKTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIHdlYmZvbnRfaW5hY3RpdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgQW50aS5hcnRpY2xlX3Jlc2l6ZXIoKTtcbiAgICAgICAgICAgIEFudGkuYWxidW1fY2Fyb3VzZWxfc2V0aGVpZ2h0KCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBzdGlja3lfbmF2IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2Y
1XIgc05hdiA9ICQoJ25hdicpO1xuICAgICAgICAgICAgdmFyIHNOYXZBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICQod2luZG93KS5iaW5kKCdzY3JvbGwnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA+PSAxMDAgJiYgIXNOYXYuaGFzQ2xhc3MoJ3N0aWNreW5hdicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNOYXYuYWRkQ2xhc3MoJ3N0aWNreW5hdicpO1xuICAgICAgICAgICAgICAgICAgICBzTmF2LmNzcygndG9wJywnLTUwcHgnKTtcbiAgICAgICAgICAgICAgICAgICAgc05hdi5hbmltYXRlKHsndG9wJzowLGF2b2lkVHJhbnNmb3Jtczp0cnVlfSwgMjAwLCAnc3dpbmcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA8IDMwICYmIHNOYXYuaGFzQ2xhc3MoJ3N0aWNreW5hdicpICYgIXNOYXZBbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc05hdkFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNOYXYuYW5pbWF0ZSh7J3RvcCc6Jy01MHB4Jyxhdm9pZFRyYW5zZm9ybXM6dHJ1ZX0sIDE1MCwgJ3N3aW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzTmF2QW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzTmF2LnJlbW92ZUNsYXNzKCdzdGlja3luYXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNOYXYuY3NzKHsndG9wJzonNDlweCcsJ29wYWNpdHknOjB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNOYXYuYW5pbWF0ZSh7J29wYWNpdHknOjEsYXZvaWRUcmFuc2Zvcm1zOnRydWV9LCAzMDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQW50aUdsb2JhbFNlYXJjaC5pbml0KCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBzdGlja3lfbmF2X2llIDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2Y
1XIgc05hdiA9ICQoJ25hdicpO1xuICAgICAgICAgICAgJCh3aW5kb3cpLmJpbmQoJ3Njcm9sbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpID49IDQ4ICYmICFzTmF2Lmhhc0NsYXNzKCdzdGlja3luYXYnKSkge1xuICAgICAgICAgICAgICAgICAgICBzTmF2LmFkZENsYXNzKCdzdGlja3luYXYnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA8IDQ4ICYmIHNOYXYuaGFzQ2xhc3MoJ3N0aWNreW5hdicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNOYXYucmVtb3ZlQ2xhc3MoJ3N0aWNreW5hdicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFsYnVtX2Nhcm91c2VsIDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIGlmICgkKCcuYWxidW0tY2Fyb3VzZWwnKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBtdWx0aXBsZSBjYXJvdXNlbHNcbiAgICAgICAgICAgICAgICAkKCcuYWxidW0tY2Fyb3VzZWwnKS5lYWNoKGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxCb3ggPSAkKGVsKS5maW5kKCcuYWxidW0taXRlbXMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94U2hvd24gPSA1O1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgZWxCb3hTbGlkZUxlbmd0aCA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94U2VsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94TGVuZ3RoID0gJChlbEJveCkuY2hpbGRyZW4oJ2RpdicpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94QW5pID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbEJveE9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbEJveFNsaWRlTGVuZ3RoVG90YWwsIGVsQm94U2xpZGVTcGVlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoJChlbCkuaGFzQ2xhc3MoJ2FsYnVtLWNhcm91c2VsLWxyZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNob3duID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94U2xpZGVMZW5ndGggPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnLmFyci1sJykuYWRkQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmQgYXJyb3dzXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKGVsQm94KS5jaGlsZHJlbignZGl2JykubGVuZ3RoID4gZWxCb3hTaG93bikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCcuYXJyLWwnKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoISQodGhpcykuaGFzQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpKSAmJiAoIWVsQm94QW5pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveEFuaSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94U2xpZGVMZW5ndGhUb3RhbCA9IGVsQm94U2xpZGVMZW5ndGgqZWxCb3hTaG93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZVNwZWVkID0gZWxCb3hTaG93bioxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5hcnItcicpLnJlbW92ZUNsYXNzKCdhcnItZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlbEJveFNlbC0xKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnLmFyci1sJykuYWRkQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBjb21wZW5zYXRlIGZvciBhbiB1bmV2ZW4gbnVtYmVyIG9mIGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxCb3hPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZUxlbmd0aFRvdGFsID0gZWxCb3hPZmZzZXQqZWxCb3hTbGlkZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNsaWRlU3BlZWQgPSBlbEJveE9mZnNldCoxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94LnN0b3AodHJ1ZSkuYW5pbWF0ZSh7bGVmdDonKz0nK2VsQm94U2xpZGVMZW5ndGhUb3RhbCsncHgnLGF2b2lkVHJhbnNmb3Jtczp0cnVlfSwgZWxCb3hTbGlkZVNwZWVkLCAnZWFzZUluT3V0UXVhZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTZWwtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94QW5pID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCcuYXJyLXInKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoISQodGhpcykuaGFzQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpKSAmJiAoIWVsQm94QW5pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveEFuaSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94U2xpZGVMZW5ndGhUb3RhbCA9IGVsQm94U2xpZGVMZW5ndGgqZWxCb3hTaG93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZVNwZWVkID0gZWxCb3hTaG93bioxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5hcnItbCcpLnJlbW92ZUNsYXNzKCdhcnItZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgxK2VsQm94U2VsKSA9PSAoKE1hdGguY2VpbChlbEJveExlbmd0aC9lbEJveFNob3duKSktMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5hcnItcicpLmFkZENsYXNzKCdhcnItZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgYW4gdW5ldmVuIG51bWJlciBvZiBpdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlbEJveExlbmd0aCVlbEJveFNob3duKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveE9mZnNldCA9IGVsQm94TGVuZ3RoJWVsQm94U2hvd247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZUxlbmd0aFRvdGFsID0gZWxCb3hPZmZzZXQqZWxCb3hTbGlkZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNsaWRlU3BlZWQgPSBlbEJveE9mZnNldCoxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3guc3RvcCh0cnVlKS5hbmltYXRlKHtsZWZ0OictPScrZWxCb3hTbGlkZUxlbmd0aFRvdGFsKydweCcsYXZvaWRUcmFuc2Zvcm1zOnRydWV9LCBlbEJveFNsaWRlU3BlZWQsICdlYXNlSW5PdXRRdWFkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNlbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hBbmkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGVsZW1lbnRzIHRvIHNsaWRlXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCcuYXJyLXInKS5hZGRDbGFzcygnYXJyLWRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGFsYnVtX2Nhcm91c2VsX3NldGhlaWdodCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQoJy5hbGJ1bS1jYXJvdXNlbCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcuYWxidW0tY2Fyb3VzZWwnKS5lYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94ID0gJChlbCkuZmluZCgnLmFsYnVtLWl0ZW1zJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbEJveEhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICQoZWxCb3gpLmNoaWxkcmVuKCdkaXYnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuaGVpZ2h0KCkgPiBlbEJveEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94SGVpZ2h0ID0gJCh0aGlzKS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5pbicpLmNzcygnaGVpZ2h0JyxlbEJveEhlaWdodCsncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgJChlbEJveCkuY3NzKCdoZWlnaHQnLGVsQm94SGVpZ2h0KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAkKGVsQm94KS5jaGlsZHJlbignZGl2JykuY3NzKCdoZWlnaHQnLGVsQm94SGVpZ2h0KydweCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGFydGljbGVfcmVzaXplciA6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBpZiAoJCgnI2hvbWUtYXJ0aWNsZXMnKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICB2Y
1XIgcFNpemVDaGFuZ2VGaW5hbCA9IGZ1bmN0aW9uKHRleHRCb3gsdGV4dEJveEhlaWdodCxib3hIZWlnaHQsdGV4dEJveEZTLHRleHRCb3hMSCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZURpZmYgPSBib3hIZWlnaHQgLSB0ZXh0Qm94SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZURpZmYgPiB0ZXh0Qm94TEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIGZvbnQgc2l6ZSwgZG9uJ3QgaW5jcmVhc2UgbGluZS1oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlNOZXcgPSB0ZXh0Qm94RlMgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0ZXh0Qm94KS5jc3MoJ2ZvbnQtc2l6ZScsdGV4dEJveEZTTmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hIZWlnaHROZXcgPSAkKHRleHRCb3gpLmhlaWdodCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcFNpemVDaGFuZ2VGaW5hbCh0ZXh0Qm94LHRleHRCb3hIZWlnaHROZXcsYm94SGVpZ2h0LHRleHRCb3hGU05ldyx0ZXh0Qm94TEgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpemVEaWZmID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgbGluZS1oZWlnaHQsIGRvbid0IGluY3JlYXNlIGZvbnQgc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hMaW5lc1RvdGFsID0gTWF0aC5mbG9vcih0ZXh0Qm94SGVpZ2h0L3RleHRCb3hMSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveExITmV3ID0gdGV4dEJveExIICsgKE1hdGguZmxvb3Ioc2l6ZURpZmYvdGV4dEJveExpbmVzVG90YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdsaW5lLWhlaWdodCcsdGV4dEJveExITmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHBTaXplQ2hhbmdlID0gZnVuY3Rpb24odGV4dEJveCx0ZXh0Qm94SGVpZ2h0LGJveEhlaWdodCx0ZXh0Qm94RlMsdGV4dEJveExILGRpcikge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpciA9PSAnaW5jJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCB0b28gc21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlNOZXcgPSB0ZXh0Qm94RlMgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hMSE5ldyA9IHRleHRCb3hMSCArIDE7XG4gICAgICAgICAgICAgICAgICAgIH0gaWYgKGRpciA9PSAnZGVjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCB0b28gbGFyZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlNOZXcgPSB0ZXh0Qm94RlMgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hMSE5ldyA9IHRleHRCb3hMSCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0ZXh0IGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdmb250LXNpemUnLHRleHRCb3hGU05ldysncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0ZXh0Qm94KS5jc3MoJ2xpbmUtaGVpZ2h0Jyx0ZXh0Qm94TEhOZXcrJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94SGVpZ2h0TmV3ID0gJCh0ZXh0Qm94KS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemVEaWZmID0gYm94SGVpZ2h0IC0gdGV4dEJveEhlaWdodE5ldztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIG5ldyBzaXplXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXIgPT0gJ2luYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3hIZWlnaHQgPiB0ZXh0Qm94SGVpZ2h0TmV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCBzdGlsbCB0b28gc21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHROZXcsYm94SGVpZ2h0LHRleHRCb3hGU05ldyx0ZXh0Qm94TEhOZXcsZGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0ZXh0Qm94SGVpZ2h0TmV3ID4gYm94SGVpZ2h0KSAmJiAodGV4dEJveEhlaWdodCA8IGJveEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2VudCB0b28gZmFyLCBkZWNyZWFzZSBieSBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hGU05ldyA9IHRleHRCb3hGU05ldyAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94TEhOZXcgPSB0ZXh0Qm94TEhOZXcgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRleHRCb3gpLmNzcygnZm9udC1zaXplJyx0ZXh0Qm94RlNOZXcrJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdsaW5lLWhlaWdodCcsdGV4dEJveExITmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveEhlaWdodE5ldyA9ICQodGV4dEJveCkuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplRGlmZiA9IGJveEhlaWdodCAtIHRleHRCb3hIZWlnaHROZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWwgYWRqdXN0bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwU2l6ZUNoYW5nZUZpbmFsKHRleHRCb3gsdGV4dEJveEhlaWdodE5ldyxib3hIZWlnaHQsdGV4dEJveEZTTmV3LHRleHRCb3hMSE5ldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXIgPT0gJ2RlYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Qm94SGVpZ2h0TmV3ID4gYm94SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCBzdGlsbCB0b28gbGFyZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHROZXcsYm94SGVpZ2h0LHRleHRCb3hGU05ldyx0ZXh0Qm94TEhOZXcsZGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChib3hIZWlnaHQgPiB0ZXh0Qm94SGVpZ2h0TmV3KSAmJiAoYm94SGVpZ2h0ID4gdGV4dEJveEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2VudCB0b28gZmFyLCBpbmNyZWFzZSBieSBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hGU05ldyA9IHRleHRCb3hGU05ldyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94TEhOZXcgPSB0ZXh0Qm94TEhOZXcgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRleHRCb3gpLmNzcygnZm9udC1zaXplJyx0ZXh0Qm94RlNOZXcrJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdsaW5lLWhlaWdodCcsdGV4dEJveExITmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveEhlaWdodE5ldyA9ICQodGV4dEJveCkuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplRGlmZiA9IGJveEhlaWdodCAtIHRleHRCb3hIZWlnaHROZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWwgYWRqdXN0bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwU2l6ZUNoYW5nZUZpbmFsKHRleHRCb3gsdGV4dEJveEhlaWdodE5ldyxib3hIZWlnaHQsdGV4dEJveEZTTmV3LHRleHRCb3hMSE5ldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgJCgnI2hvbWUtYXJ0aWNsZXMgYXJ0aWNsZScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBib3ggPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYm94SGVpZ2h0ID0gKCQoYm94KS5oZWlnaHQoKSkgLSAyMTsgLy8gdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHJlYWQgbW9yZSBsaW5rXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94ID0gJCh0aGlzKS5jaGlsZHJlbigncCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEJveEhlaWdodCA9ICQodGV4dEJveCkuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlMgPSBwYXJzZUludCgkKHRleHRCb3gpLmNzcygnZm9udC1zaXplJykpO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveExIID0gcGFyc2VJbnQoJCh0ZXh0Qm94KS5jc3MoJ2xpbmUtaGVpZ2h0JykpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEJveExpbmVzVG90YWwgPSBNYXRoLmZsb29yKHRleHRCb3hIZWlnaHQvdGV4dEJveExIKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJveEhlaWdodCA+IHRleHRCb3hIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgaXMgdG9vIHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHQsYm94SGVpZ2h0LHRleHRCb3hGUyx0ZXh0Qm94TEgsJ2luYycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRCb3hIZWlnaHQgPiBib3hIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgaXMgdG9vIGxhcmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHQsYm94SGVpZ2h0LHRleHRCb3hGUyx0ZXh0Qm94TEgsJ2RlYycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxvY2sgcCBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgJCh0ZXh0Qm94KS5jc3MoJ2hlaWdodCcsYm94SGVpZ2h0KydweCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2hvdyBhcnRpY2xlc1xuICAgICAgICAgICAgICAgICQoJyNob21lLWFydGljbGVzIGFydGljbGUnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgJCgnI2hvbWUtYXJ0aWNsZXMgYXJ0aWNsZScpLmNzcygndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICAkKCcjaG9tZS1hcnRpY2xlcyAubG9hZGVyJykuZmFkZU91dCgnZmFzdCcpO1xuICAgICAgICAgICAgICAgICQoJyNob21lLWFydGljbGVzIGFydGljbGUnKS5mYWRlSW4oJ2Zhc3QnKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBzdG5kX3NvY2lhbCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQoJy5zdG5kLXNvY2lhbCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoJCgnaHRtbCcpLmhhc0NsYXNzKCdpZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5zdG5kLXNvY2lhbCcpLmNoaWxkcmVuKCcuaWNucy1leHAnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoJy5zdG5kLXNvY2lhbCcpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJy5pY25zLWV4cCcpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jaGlsZHJlbignLmljbnMtZXhwJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkKCcuc3RuZC1zb2NpYWwnKS5tb3VzZWVudGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCcuaWNucy1leHAnKS5jc3MoJ29wYWNpdHknLCcxJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJy5pY25zLWV4cCcpLmNzcygnb3BhY2l0eScsJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2UgYW5jaG9yIGxpbmtzIHNtb290aGx5IGFuaW1hdGUgdG8gdGhlaXIgY29udGVudCBvbiB0aGUgcGFnZSwgdGFraW5nIHRoZSBuYXYgaGVpZ2h0IGludG8gYWNjb3VudFxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIGxpbmtTZWxlY3RvciAgICAoc3RyaW5nKSAgICBTZWxlY3RvciBmb3IgbGlua3MgdG8gYXBwbHkgc21vb3RoIHNjcm9sbCB0b1xuICAgICAgICAgKiAgICAgIGV4dHJhT2Zmc2V0ICAgICAoaW50ZWdlcikgICAob3B0aW9uYWwpIE51bWJlciBvZiBwaXhlbHMgZm9yIGV4dHJhIHBhZGRpbmcvb2Zmc2V0IGZvciBzY3JvbGwgdGFyZ2V0XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBzbW9vdGhTY3JvbGw6IGZ1bmN0aW9uKGxpbmtTZWxlY3RvciwgZXh0cmFPZmZzZXQpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXh0cmFPZmZzZXQgPSB0eXBlb2YgZXh0cmFPZmZzZXQgPT0gJ251bWJlcicgPyBleHRyYU9mZnNldCA6IDE4O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2Y
1XIgbmF2SGVpZ2h0ID0gJCgnbmF2JykuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICQobGlua1NlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSAkKGVsKS5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvciAmJiBhbmNob3JbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWwpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICQoYW5jaG9yKS5vZmZzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3AgPSBvZmZzZXQudG9wIC0gbmF2SGVpZ2h0IC0gZXh0cmFPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0hlaWdodCA9ICQoZG9jdW1lbnQpLmhlaWdodCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5Jykuc3RvcCh0cnVlKS5hbmltYXRlKHsnc2Nyb2xsVG9wJzogTWF0aC5taW4odG9wLCAoZG9jSGVpZ2h0IC0gd2luSGVpZ2h0KSl9LCAxMDAwLCdlYXNlSW5PdXRFeHBvJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQXBwbHkgJ0xvYWQgTW9yZScgZnVuY3Rpb25hbGl0eSB0aGF0IGZldGNoZXMgcGFnaW5hdGVkIGNvbnRlbnQgdmlhIEFKQVggYW5kIGFwcGVuZHMgaXQgdG8gdGhlIHBhZ2VcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBjb250ZW50U2VsZWN0b3IgICAgIChzdHJpbmcpICAgIFNlbGVjdG9yIGZvciBtYWluIGNvbnRlbnQgd3JhcHBlci4gSW5maW5pdGUgc2Nyb2xsIHBsdWdpbiBpcyBpbXBsZW1lbnRlZCBcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG8gdGhpcyBlbGVtZW50IGFuZCBjb250ZW50IGlzIGFwcGVuZGVkIHRvIGl0XG4gICAgICAgICAqICAgICAgaXRlbVNlbGVjdG9yICAgICAgICAoc3RyaW5nKSAgICBTZWxlY3RvciBwYXNzZWQgdG8gaW5maW5pdGVzY3JvbGwgcGx1Z2luLCB1c2VkIG9uIEFKQVggY2FsbCB0byBleHRyYWN0IFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCB0byBiZSBhcHBlbmRlZFxuICAgICAgICAgKiAgICAgIGJ1dHRvblNlbGVjdG9yICAgICAgKHN0cmluZykgICAgU2VsZWN0b3IgZm9yICdMb2FkIE1vcmUnIGJ1dHRvbiwgb24gd2hpY2ggY2xpY2sgZXZlbnRzIGFuZCBzdWNoIGFyZSBhcHBsaWVkXG4gICAgICAgICAqICAgICAgb3B0aW9ucyAgICAgICAgICAgICAob2JqZWN0KSAgICAob3B0aW9uYWwpIE9wdGlvbnMgdG8gcGFzcyBkaXJlY3RseSBpbnRvIGluZmluaXRlc2Nyb2xsKClcbiAgICAgICAgICogICAgICBjYWxsYmFjayAgICAgICAgICAgIChmdW5jdGlvbikgIChvcHRpb25hbCkgT3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgcnVuIGF0IHRoZSBlbmQgb2YgcGFnZSBjb250ZW50IGxvYWRcbiAgICAgICAgICovXG4gICAgICAgIHNldExvYWRNb3JlOiBmdW5jdGlvbihjb250ZW50U2VsZWN0b3IsIGl0ZW1TZWxlY3RvciwgYnV0dG9uU2VsZWN0b3IsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSAkKGNvbnRlbnRTZWxlY3Rvcik7XG4gICAgICAgICAgICB2Y
1XIgbG9hZE1vcmVCdXR0b24gPSAkKGJ1dHRvblNlbGVjdG9yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoICYmIGxvYWRNb3JlQnV0dG9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEJ1dHRvblRleHQgPSBsb2FkTW9yZUJ1dHRvbi50ZXh0KCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQmluZCBsb2FkIG1vcmUgZXZlbnQgdG8gYnV0dG9uXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGJpbmRMb2FkTW9yZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRNb3JlQnV0dG9uLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnJldHJpZXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSW5pdCBpbmZpbml0ZSBzY3JvbGxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICduYXZTZWxlY3Rvcic6IGJ1dHRvblNlbGVjdG9yLFxuICAgICAgICAgICAgICAgICAgICAnbmV4dFNlbGVjdG9yJzogYnV0dG9uU2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICdpdGVtU2VsZWN0b3InOiBpdGVtU2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICdwYXRoUGFyc2UnOiBmdW5jdGlvbihwYXRoLCBwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgcGF0dGVybiA9IC9eKC4qKFxcP3wmKXBhZ2U9KShcXGQrKSguKikkLztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVjayA9IHBhdGgubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2NoZWNrWzFdLCBjaGVja1s0XV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdsb2FkaW5nJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2xvYWRpbmcnOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0JzogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgdGhpcyBmcm9tIGluZmluaXRlc2Nyb2xsIHBsdWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQWpheChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbG9hZCB0ZXh0IGFuZCB1bmJpbmQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1vcmVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQoJ0xvYWRpbmcuLi4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudW5iaW5kKCdjbGljaycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhZGUgdXAvZG93biB3aGlsZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZU91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbi5mYWRlVG8oNTAwLCAwLjI1LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVVcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVVcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbi5mYWRlSW4oNTAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVPdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWRlT3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmluaXNoZWQnOiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBhbmltYXRpb24gYW5kIHJlc2V0IHRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RvcCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdvcGFjaXR5JywgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQob3JpZ2luYWxCdXR0b25UZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgaHJlZiB3aXRoIG5ldyBwYWdlIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYgPSBsb2FkTW9yZUJ1dHRvbi5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYucmVwbGFjZSgvKFxcP3wm
1KXBhZ2U9KFxcZCspLiovLCAnJDFwYWdlPScgKyAob3B0aW9ucy5zdGF0ZS5jdXJyUGFnZSArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbi5hdHRyKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmUtYmluZCBsb2FkIG1vcmUgY2xpY2sgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTG9hZE1vcmUoJCh0aGlzKS5kYXRhKCdpbmZpbml0ZXNjcm9sbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAnZXJyb3JDYWxsYmFjayc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1vcmVCdXR0b24uZmFkZU91dCg1MDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb250ZW50LmluZmluaXRlc2Nyb2xsKCQuZXh0ZW5kKHRydWUsIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gVW5iaW5kIGluZmluaXRlc2Nyb2xsIHNjcm9sbCBldmVudHMgYW5kIGJpbmQgcmV0cmlldmFsIHRvIHRoZSBidXR0b25cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2Y
1XIgaW5zdGFuY2UgPSBjb250ZW50LmRhdGEoJ2luZmluaXRlc2Nyb2xsJyk7XG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZCgnc21hcnRzY3JvbGwuaW5mc2NyLicgKyBpbnN0YW5jZS5vcHRpb25zLmluZmlkKTtcbiAgICAgICAgICAgICAgICBiaW5kTG9hZE1vcmUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICBcbiAgICB9O1xuXG4gICAgdmFyIEFudGlVdGlsID0ge1xuXG4gICAgICAgIGRldGVjdF93aW5mb250IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAobmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ1dpbicpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHNjcmVlbi5mb250U21vb3RoaW5nRW5hYmxlZCkgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyZWVuLmZvbnRTbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNOb2RlLndpZHRoID0gXCIzNVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzTm9kZS5oZWlnaHQgPSBcIjM1XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgY3R4ID0gY2FudmFzTm9kZS5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJ0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJibGFja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJibGFja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KFwiT1wiLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSA4OyBqIDw9IDMyOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAzMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKGksIGosIDEsIDEpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYSA9IGltYWdlRGF0YVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSAmJiBhbHBoYSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHdpbmRvd3MgZm9udC1zbW9vdGhpbmcgbXVzdCBiZSBvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgZGV0ZWN0X3NhZmFyaSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgICAgICAgICBpZiAoZXNjYXBlKG5hdmlnYXRvci5qYXZhRW5hYmxlZC50b1N0cmluZygpKSA9PSAnZnVuY3Rpb24lMjBqYXZhRW5hYmxlZCUyOCUyOSUyMCU3QiUyMCU1Qm5hdGl2ZSUyMGNvZGUlNUQlMjAlN0QnKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVzY2FwZShuYXZpZ2F0b3IuamF2YUVuYWJsZWQudG9TdHJpbmcoKSkgIT0gJ2Z1bmN0aW9uJTIwamF2YUVuYWJsZWQlMjglMjklMjAlN0IlMjAlNUJuYXRpdmUlMjBjb2RlJTVEJTIwJTdEJykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbGlzdF9sYXN0Y2hpbGQgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQoJy5saXN0LXdpdGhsYXN0LTItdSBsaTpudGgtY2hpbGQoMm4pJykuYWRkQ2xhc3MoJ2xpc3QtbGFzdCcpO1xuICAgICAgICAgICAgJCgnLmxpc3Qtd2l0aGxhc3QtMi1kIGRpdjpudGgtY2hpbGQoMm4pJykuYWRkQ2xhc3MoJ2xpc3QtbGFzdCcpO1xuICAgICAgICAgICAgJCgnLmxpc3Qtd2l0aGxhc3QtMy11IGxpOm50aC1jaGlsZCgzbiknKS5hZGRDbGFzcygnbGlzdC1sYXN0Jyk7XG4gICAgICAgICAgICAkKCcubGlzdC13aXRobGFzdC0zLWQgZGl2Om50aC1jaGlsZCgzbiknKS5hZGRDbGFzcygnbGlzdC1sYXN0Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBzaWRlYmFyX2FjY29yZGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoJCgnLnNiYXItYWNjb3JkaW9uJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICQoJy5zYmFyLWFjY29yZGlvbiBoNCBhJykuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ3NlbCcpO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudHMoJy5zYmFyLWFjY29yZGlvbicpLmNoaWxkcmVuKCcuYWNjb3JkaW9uLWV4cGFuZGVkJykudG9nZ2xlKCdmYXN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBmaWx0ZXJfYWNjb3JkaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICgkKCcuZmlsdGVyLWFjY29yZGlvbicpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcuZmlsdGVyLWFjY29yZGlvbiAucmVhZC1tb3JlJylcbiAgICAgICAgICAgICAgICAgICAgLmRhdGEoJ29wZW4nLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuZGF0YSgnb3BlbicpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kYXRhKCdvcGVuJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtUZXh0ID0gJ1NlZSBGdWxsIExpc3QtJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kYXRhKCdvcGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1RleHQgPSAnQ29sbGFwc2UgTGlzdC0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwobGlua1RleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhcmVudHMoJy5maWx0ZXItYWNjb3JkaW9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oJy5hY2NvcmRpb24tZXhwYW5kZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b2dnbGUoJ2Zhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
1H1cblxuICAgIH07XG4gICAgXG4gICAgLyoqXG4gICAgICogQU5USSBnbG9iYWwgQUpBWCBzZWFyY2ggaW5wdXQgYmVoYXZpb3JcbiAgICAgKi9cbiAgICB2YXIgQW50aUdsb2JhbFNlYXJjaCA9IHtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXRlXG4gICAgICAgIFxuICAgICAgICBhY3RpdmU6IGZhbHNlLCAvLyBXaGV0aGVyIHRoZSBmaWVsZCBpcyAnYWN0aXZlJyBvciBub3RcbiAgICAgICAgbW91c2VJbnNpZGU6IGZhbHNlLCAvLyBXaGV0aGVyIHRoZSBtb3VzZSBpcyBpbnNpZGUgb2YgdGhlIGZvcm0gb3Igbm90XG4gICAgICAgIGN1cnJlbnRRdWVyeTogZmFsc2UsIC8vIGZhbHNlIGlmIG5vIHNlYXJjaCBpcyBydW5uaW5nLCBvdGhlcndpc2UgaXQncyB0aGUgdGVybSBiZWluZyBzZWFyY2hlZFxuICAgICAgICBjdXJyZW50UmVxdWVzdDogbnVsbCwgLy8gSWYgYSBzZWFyY2ggaXMgcnVubmluZywgdGhlIGN1cnJlbnQgWEhSIG9iamVjdFxuICAgICAgICBjdXJyZW50VGltZW91dDogbnVsbCwgLy8gSWYgYSBzZWFyY2ggaXMgcnVubmluZywgdGhlIHRpbWVvdXQgZm9yIGN1cnJlbnQgc2VhcmNoIHJlcXVlc3RcbiAgICAgICAgaGFzQ29udGVudDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHJlc3VsdHNFbGVtZW50IGhhcyBiZWVuIGZpbGxlZCB3aXRoIGNvbnRlbnQgZnJvbSBhbiBBSkFYIHJlcXVlc3Qgb3Igbm90XG4gICAgICAgIFxuICAgICAgICAvLyBFbGVtZW50c1xuICAgICAgICBcbiAgICAgICAgc2VhcmNoRm9ybUVsZW1lbnQ6IG51bGwsXG4gICAgICAgIGlucHV0RWxlbWVudDogbnVsbCxcbiAgICAgICAgcmVzdWx0c0VsZW1lbnQ6IG51bGwsIC8vIEluc2VydCBzZWFyY2ggcmVzdWx0IEhUTUwgZnJvbSBBSkFYIHJlcXVlc3QgaGVyZVxuICAgICAgICBcbiAgICAgICAgLy8gU2V0dGluZ3NcbiAgICAgICAgXG4gICAgICAgIG1pbmltdW1DaGFyYWN0ZXJzOiAyLCAvLyBUaGUgbWluaW11bSBhbW91bnQgb2YgY2hhcmFjdGVycyB0byBiZSB0eXBlZCBiZWZvcmUgYSBzZWFyY2ggaXMgc2VudCB0byB0aGUgc2VydmVyXG4gICAgICAgIGRlYWN0aXZhdGVkV2lkdGg6IG51bGwsIC8vIElucHV0IHdpZHRoIHdoZW4gZGVhY3RpdmF0ZWQsIGdldCB0aGlzIGZyb20gdGhlIGVsZW1lbnQgaXRzZWxmIG9uIGluaXRcbiAgICAgICAgYWN0aXZhdGVkV2lkdGg6IDI2MCwgLy8gSW5wdXQgd2lkdGggd2hlbiBhY3RpdmF0ZWRcbiAgICAgICAgcmVzdWx0c1dpZHRoT2Zmc2V0OiA4LCAvLyBQaXhlbHMgYWJvdmUgYWN0aXZhdGVkL2RlYWN0aXZhdGVkIHdpZHRocyB0byBhZGQgdG8gcmVzdWx0IHdpbmRvd1xuICAgICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRWxlbWVudHNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtRWxlbWVudCA9ICQoJyNhbnRpLXNlYXJjaCcpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSAkKCdpbnB1dFtuYW1lPXFdJywgdGhpcy5zZWFyY2hGb3JtRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50ID0gJCgnPGRpdiAvPicpLmFkZENsYXNzKCdzZWFyY2gtZXhwYW5kZWQnKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFmdGVyKHRoaXMucmVzdWx0c0VsZW1lbnQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTZXR0aW5nc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVkV2lkdGggPSB0aGlzLmlucHV0RWxlbWVudC53aWR0aCgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBFdmVudHNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtRWxlbWVudC5ob3ZlcihcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgc2VsZi5tb3VzZUluc2lkZSA9IHRydWU7IH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHNlbGYubW91c2VJbnNpZGUgPSBmYWxzZTsgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuZm9jdXNpbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFjdGl2YXRlRmllbGQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5vbigna2V5dXAgc2VhcmNoJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlSW5wdXQoJCh0aGlzKS52YWwoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHNlYXJjaCB3aGVuICdyZXR1cm4nIGlzIGhpdFxuICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hYm9ydFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAkKCdib2R5JykubW91c2V1cChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hY3RpdmUgJiYgIXNlbGYubW91c2VJbnNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWFjdGl2YXRlRmllbGQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSW5pdGlhbFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50LmhpZGUoKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4cGFuZCBpbnB1dCBhbmQgYXBwbHkgYWN0aXZlIHN0YXRlIG9uIGludGVyYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhY3RpdmF0ZUZpZWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbnRlbnQpIHRoaXMuc2VhcmNoRm9ybUVsZW1lbnQuYWRkQ2xhc3MoJ3NlYXJjaGluZycpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgICAgICAgICAgLmFuaW1hdGUoeyd3aWR0aCc6IHRoaXMuYWN0aXZhdGVkV2lkdGh9LCAyMDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHNFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAuc2hvdygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdoZWlnaHQnLCAnYXV0bycpO1xuICAgICAgICAgICAgICAgI
1H0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNsaW0gZG93biBpbnB1dCBhbmQgcmVtb3ZlIGFjdGl2ZSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZGVhY3RpdmF0ZUZpZWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1FbGVtZW50LnJlbW92ZUNsYXNzKCdzZWFyY2hpbmcnKTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgICAgICAgICAgLmFuaW1hdGUoeyd3aWR0aCc6IHRoaXMuZGVhY3RpdmF0ZWRXaWR0aH0sIDIwMCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogSGFuZGxlIGtleXVwIGV2ZW50IGZyb20gc2VhcmNoIGlucHV0IGZpZWxkXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdGV4dCAgICAoc3RyaW5nKSAgICBUZXh0IHZhbHVlIGZyb20gc2VhcmNoIGlucHV0XG4gICAgICAgICAqL1xuICAgICAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24odGV4dCkge1xuICAgICAgICAgICAgdGV4dCA9ICQudHJpbSh0ZXh0KTtcbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+PSB0aGlzLm1pbmltdW1DaGFyYWN0ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlU2VhcmNoKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhc3MgdGV4dCBvZmYgZm9yIEFKQVggc2VhcmNoIGFuZCBoYW5kbGUgcmVzdWx0c1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHRleHQgICAgKHN0cmluZykgICAgVGV4dCB0byBzZWFyY2ggYWdhaW5zdFxuICAgICAgICAgKi9cbiAgICAgICAgZXhlY3V0ZVNlYXJjaDogZnVuY3Rpb24odGV4dCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2Y
1XIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVyeSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVyeSA9PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0U2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9zZXRMb2FkaW5nU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQ29udGVudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtRWxlbWVudC5hZGRDbGFzcygnc2VhcmNoaW5nJyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVyeSA9IHRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRSZXF1ZXN0ID0gJC5hamF4KFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlYXJjaEZvcm1FbGVtZW50LmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FjaGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogeydxJzogdGV4dH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YVR5cGUnOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxldGUnOiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlUmVzdWx0cyhqcVhIUiwgdGV4dFN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBEZWxheSB0aGlzIGEgdGFkIHNvIHRoYXQgcmVxdWVzdHMgYXJlbid0IGJlaW5nIHNlbnQgd2l0aCBldmVyeSBrZXlzdHJva2VcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBydW4oKTsgfSwgNTAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhhbmRsZSBBSkFYIHNlYXJjaCByZXNwb25zZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIGpxWEhSICAgICAgIChvYmplY3QpICAgIGpRdWVyeSBYTUxIVFRQUmVxdWVzdCBvYmplY3QgZnJvbSBzZWFyY2ggcmVzcG9uc2VcbiAgICAgICAgICogICAgICB0ZXh0U3RhdHVzICAoc3RyaW5nKSAgICBTdGF0dXMgZm9yIEFKQVggc2VhcmNoIHJlc3BvbnNlXG4gICAgICAgICAqL1xuICAgICAgICBoYW5kbGVSZXN1bHRzOiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cykge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl91bnNldExvYWRpbmdTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVxdWVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhc0NvbnRlbnQgPSB0cnVlOyAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGV4dFN0YXR1cyA9PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50Lmh0bWwoanFYSFIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAvLyBAdG9kbyBIaWdobGlnaHQgbWF0Y2hlZCB0ZXh0IHdpdGggPHNwYW4gY2xhc3M9XCJzZWxcIj4uLi48L3NwYW4+XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAkKCc8aDMgLz4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdlbXB0eScpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGV4dCgnVGhlcmUgd2FzIGFuIGVycm9yIHdpdGggeW91ciBzZWFyY2gsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FuY2VsIHNlYXJjaCByZXF1ZXN0XG4gICAgICAgICAqL1xuICAgICAgICBhYm9ydFNlYXJjaDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudFRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl91bnNldExvYWRpbmdTdGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldCBzZWFyY2ggZm9ybSB0byAnbG9hZGluZycgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9zZXRMb2FkaW5nU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzRWxlbWVudFxuICAgICAgICAgICAgICAgIC5lbXB0eSgpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdsb2FkaW5nJylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAkKCc8aW1nIC8+JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjJzogQW50aURhdGEuaW1hZ2VzLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsdCc6ICdMb2FkaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnbG9hZGluZycpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSAnbG9hZGluZycgc3Rh
1dGUgZnJvbSBzZWFyY2ggZm9ybVxuICAgICAgICAgKi9cbiAgICAgICAgX3Vuc2V0TG9hZGluZ1N0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdHNFbGVtZW50Lmhhc0NsYXNzKCdsb2FkaW5nJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbG9hZGluZycpXG4gICAgICAgICAgICAgICAgICAgIC5lbXB0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH07XG4gICAgXG4gICAgdmFyIEFudGlNYWlsaW5nTGlzdCA9IHtcbiAgICAgICAgLy8gRWxlbWVudHNcbiAgICAgICAgXG4gICAgICAgIG92ZXJsYXlCb3g6IG51bGwsXG4gICAgICAgIG92ZXJsYXlIaWRlcjogbnVsbCxcbiAgICAgICAgY2xvc2VCdXR0b246IG51bGwsXG4gICAgICAgIG9wZW5CdXR0b246IG51bGwsXG4gICAgICAgIG92ZXJsYXlCb3g6IG51bGwsIC8vIFdyYXBwZXIgZm9yIG1haWxpbmcgbGlzdCBmb3JtIGJveFxuICAgICAgICBmb3JtOiBudWxsLCAvLyBNYWlsaW5nIGxpc3QgZm9ybSBlbGVtZW50XG4gICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IG51bGwsIC8vIExvYWRpbmcgaW5kaWNhdG9yIGltYWdlXG4gICAgICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRWxlbWVudHNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5Qm94ID0gJCgnI21haWxpbmctbGlzdCcpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5SGlkZXIgPSAkKCcuYm94LXNpZ251cC1oaWRlcicpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbiA9ICQoJyNtYWlsaW5nLWxpc3QgLmJ0bi1tbC1jbG9zZSwgLmJveC1zaWdudXAtaGlkZXInKTtcbiAgICAgICAgICAgIHRoaXMub3BlbkJ1dHRvbiA9ICQoJy5idG4tbWwtb3BlbicpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nSW5kaWNhdG9yID0gJCgnPGltZyAvPicpXG4gICAgICAgICAgICAgICAgLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgICAnc3JjJzogQW50aURhdGEuaW1hZ2VzLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICdhbHQnOiAnTG9hZGluZycsXG4gICAgICAgICAgICAgICAgICAgICdjbGFzcyc6ICdsb2FkaW5nJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmhpZGUoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbi5iZWZvcmUodGhpcy5sb2FkaW5nSW5kaWNhdG9yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRXZlbnRzXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMub3BlbkJ1dHRvbi5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5vcGVuT3ZlcmxheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuY2xvc2VCdXR0b24uY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VPdmVybGF5KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5SGlkZXIuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYmluZEZvcm0oKTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIG9wZW5PdmVybGF5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUhpZGVyLnN0b3AodHJ1ZSkuZmFkZUluKDIwMCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlCb3guc3RvcCh0cnVlKS5mYWRlSW4oMjAwKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjbG9zZU92ZXJsYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5Qm94LnN0b3AodHJ1ZSkuZmFkZU91dCgyMDApO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5SGlkZXIuc3RvcCh0cnVlKS5mYWRlT3V0KDE1MCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBiaW5kRm9ybTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2Y
1XIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLm92ZXJsYXlCb3guZmluZCgnZm9ybScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zdWJtaXQoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBoYW5kbGVTdWJtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3NldExvYWRpbmdTdGF0ZSgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAkLnBvc3QodGhpcy5mb3JtLmF0dHIoJ2FjdGlvbicpLCB0aGlzLmZvcm0uc2VyaWFsaXplKCksIGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5zZXRMb2FkaW5nU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtLnJlcGxhY2VXaXRoKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmJpbmRGb3JtKCk7XG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgX3NldExvYWRpbmdTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY3NzKCdvcGFjaXR5JywgMC4zKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VCdXR0b24uZmlsdGVyKCcuYnRuLW1sLWNsb3NlJykuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nSW5kaWNhdG9yLnNob3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIF91bnNldExvYWRpbmdTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY3NzKCdvcGFjaXR5JywgMSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQnV0dG9uLnNob3coKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0luZGljYXRvci5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfTtcblxuICAgIHdpbmRvdy5BbnRpID0gQW50aTtcbiAgICB3aW5kb3cuQW50aVV0aWwgPSBBbnRpVXRpbDtcbiAgICB3aW5kb3cuQW50aUdsb2JhbFNlYXJjaCA9IEFudGlHbG9iYWxTZWFyY2g7XG4gICAgd2luZG93LkFudGlNYWlsaW5nTGlzdCA9IEFudGlNYWlsaW5nTGlzdDtcblxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgICBBbnRpLmluaXQoKTtcbiAgICAgICAgc2VhcmNoLnN0YXJ0KCk7XG4gICAgfSk7XG5cbn0pKGpRdWVyeSk7Il0sIm5hbWVzIjpbInJlbmRlclNlYXJjaEJveCIsInJlbmRlck9wdGlvbnMiLCJpc0ZpcnN0UmVuZGVyIiwicXVlcnkiLCJyZWZpbmUiLCJjbGVhciIsImlzU2VhcmNoU3RhbGxlZCIsIndpZGdldFBhcmFtcyIsImNvbnRhaW5lciIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIl93aWRnZXRQYXJhbXMkcGxhY2VobyIsImZvcm0iLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYWN0aW9uIiwiaW5wdXQiLCJuYW1lIiwicGxhY2Vob2xkZXIiLCJsb2FkaW5nSW5kaWNhdG9yIiwidGV4dENvbnRlbnQiLCJi
1dXR0b24iLCJ0eXBlIiwicmVzZXRCdXR0b24iLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0ZXN0IiwidGFyZ2V0IiwidmFsdWUiLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwiY29uY2F0Iiwic3VibWl0IiwiYXBwZW5kQ2hpbGQiLCJoaWRkZW4iLCJjdXN0b21TZWFyY2hCb3giLCJpbnN0YW50c2VhcmNoIiwiY29ubmVjdG9ycyIsImNvbm5lY3RTZWFyY2hCb3giLCJjYXRlZ29yeUxpc3QiLCJxdWlja1NlYXJjaCIsImFsZ29saWFDbGllbnQiLCJfb2JqZWN0U3ByZWFkIiwic2VhcmNoIiwicmVxdWVzdHMiLCJzZWFyY2hCb3giLCJldmVyeSIsIl9yZWYiLCJwYXJhbXMiLCJyZW1vdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdHMiLCJtYXAiLCJoaXRzIiwibmJIaXRzIiwibmJQYWdlcyIsInBhZ2UiLCJwcm9jZXNzaW5nVGltZU1TIiwiYXV0b2NvbXBsZXRlIiwiY29ubmVjdEF1dG9jb21wbGV0ZSIsIl9yZWYyIiwiaXNGaXJzdFJlbmRlcmluZyIsImluZGljZXMiLCJvblNlbGVjdENoYW5nZSIsImNvbnRhaW5lckVsIiwiaW5uZXJIVE1MIiwidWwiLCJzZWVBbGwiLCJocmVmIiwibGlzdCIsImZvckVhY2giLCJpbmRleCIsImxpIiwidXJsUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiZmlsdGVycyIsImdldCIsImNhdGVnb3J5Iiwic3BsaXQiLCJwb3AiLCJoaXQiLCJsaW5rIiwidXJsIiwidGl0bGUiLCJnZXRDYXRlZ29yeVdpZGdldExpc3QiLCJ3aWRnZXRzIiwibG9vcENhdGVnb3J5IiwiaSIsInB1c2giLCJpbmRleE5hbWUiLCJhZGRXaWRnZXRzIiwiY29uZmlndXJlIiwiaGl0c1BlclBhZ2UiLCJnZXRXaWRnZXRMaXN0Iiwid2lkZ2V0TGlzdCIsImNhdFdpZGdldHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJpdGVtVGVtcGxhdGVzIiwiYXJ0aXN0IiwicmVsZWFzZSIsIm5ld3MiLCJ2aWRlbyIsInRyYWNrIiwic2hvdyIsInByZXNzIiwic2l0ZVNlYXJjaFBhcmFtcyIsInN0YXRzIiwidGVtcGxhdGVzIiwidGV4dCIsImNhdExhYmVsIiwiZW1wdHkiLCJpdGVtIiwic2luZ2xlQ2F0TGlzdCIsImluZmluaXRlSGl0cyIsImVzY2FwZUhUTUwiLCJNYXRoIiwibWluIiwic2l0ZVNlYXJjaCIsImVsIiwicXVpY2tTZWFyY2hXaWRnZXRMaXN0Iiwic2l0ZVNlYXJjaFdpZGdldExpc3QiLCJtYXRjaGVzIiwiZXhlYyIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJhbGdvbGlhc2VhcmNoIiwiQW50aURhdGEiLCJBTEdPTElBX0FQUExJQ0FUSU9OX0lEIiwiQUxHT0xJQV9BUElfS0VZX1NFQVJDSCIsImlzUXVpY2tTZWFyY2giLCJzdGFydHNXaXRoIiwic2VhcmNoQ2xpZW50IiwiaW5pdGlhbFVpU3RhdGUiLCJhbnRpIiwib24iLCIkIiwicmVzdWx0TGlzdCIsInJlc3VsdEZpbHRlciIsIl9BbnRpTWFpbGluZ0xpc3QiLCJBbnRpIiwiaW5pdCIsIkFudGlVdGlsIiwiZGV0ZWN0X3NhZmFyaSIsImVhY2giLCJlIiwicGhWYWwiLCJhdHRyIiwiZm9jdXMiLCJ2YWwiLCJkZWZhdWx0VmFsdWUiLCJibHVyIiwidHJpbSIsImRldGVjdF93aW5mb250IiwiYWRkQ2xhc3MiLCJoYXNDbGFzcyIsInN0aWNreV9uYXZfaWUiLCJzdGlja3lfbmF2IiwibGlzdF9sYXN0Y2hpbGQiLCJzaWRlYmFyX2FjY29yZGlvbiIsImZpbHRlcl9hY2NvcmRpb24iLCJzdG5kX3NvY2lhbCIsIkFudGlNYWlsaW5nTGlzdCIsIndlYmZvbnRfYWN0aXZlIiwiYXJ0aWNsZV9yZXNpemVyIiwiYWxidW1fY2Fyb3VzZWxfc2V0aGVpZ2h0Iiwid2ViZm9udF9pbmFjdGl2ZSIsInNOYXYiLCJzTmF2QW5pbWF0aW5nIiwiYmluZCIsInNjcm9sbFRvcCIsImNzcyIsImFuaW1hdGUiLCJhdm9pZFRyYW5zZm9ybXMiLCJyZW1vdmVDbGFzcyIsIkFudGlHbG9iYWxTZWFyY2giLCJhbGJ1bV9jYXJvdXNlbCIsImVsQm94IiwiZmluZCIsImVsQm94SGVpZ2h0IiwiZWxCb3hTaG93biIsImVsQm94U2xpZGVMZW5ndGgiLCJlbEJveFNlbCIsImVsQm94TGVuZ3RoIiwiY2hpbGRyZW4iLCJlbEJveEFuaSIsImVsQm94T2Zmc2V0IiwiZWxCb3hTbGlkZUxlbmd0aFRvdGFsIiwiZWxCb3hTbGlkZVNwZWVkIiwiY2xpY2siLCJwcmV2ZW50RGVmYXVsdCIsInN0b3AiLCJsZWZ0IiwiY2VpbCIsImhlaWdodCIsInBTaXplQ2hhbmdlRmluYWwiLCJ0ZXh0Qm94IiwidGV4dEJveEhlaWdodCIsImJveEhlaWdodCIsInRleHRCb3hGUyIsInRleHRCb3hMSCIsInNpemVEaWZmIiwidGV4dEJveEZTTmV3IiwidGV4dEJveEhlaWdodE5ldyIsInRleHRCb3hMaW5lc1RvdGFsIiwiZmxvb3IiLCJ0ZXh0Qm94TEhOZXciLCJwU2l6ZUNoYW5nZSIsImRpciIsImJveCIsInBhcnNlSW50IiwiaGlkZSIsImZhZGVPdXQiLCJmYWRlSW4iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInNtb290aFNjcm9sbCIsImxpbmtTZWxlY3RvciIsImV4dHJhT2Zmc2V0IiwibmF2SGVpZ2h0IiwiYW5jaG9yIiwib2Zmc2V0IiwidG9wIiwid2luSGVpZ2h0IiwiZG9jSGVpZ2h0Iiwic2V0TG9hZE1vcmUiLCJjb250ZW50U2VsZWN0b3IiLCJpdGVtU2VsZWN0b3IiLCJidXR0b25TZWxlY3RvciIsIm9wdGlvbnMiLCJjYWxsYmFjayIsIl90eXBlb2YiLCJjb250ZW50IiwibG9hZE1vcmVCdXR0b24iLCJvcmlnaW5hbEJ1dHRvblRleHQiLCJiaW5kTG9hZE1vcmUiLCJpbnN0YW5jZSIsInJldHJpZXZlIiwiZGVmYXVsdE9wdGlvbnMiLCJwYXRoUGFyc2UiLCJwYXRoIiwicGF0dGVybiIsImNoZWNrIiwibWF0Y2giLCJzdGFydCIsImJlZ2luQWpheCIsInVuYmluZCIsImZhZGVUbyIsImZhZGVVcCIsImZpbmlzaGVkIiwicmVwbGFjZSIsInN0YXRlIiwiY3VyclBhZ2UiLCJkYXRhIiwiZXJyb3JDYWxsYmFjayIsImluZmluaXRlc2Nyb2xsIiwiZXh0ZW5kIiwiaW5maWQiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsImluZGV4T2YiLCJzY3JlZW4iLCJmb250U21vb3RoaW5nRW5hYmxlZCIsImNhbnZhc05vZGUiLCJ3aWR0aCIsInN0eWxlIiwiZGlzcGxheSIsImJvZHkiLCJjdHgiLCJnZXRDb250ZXh0IiwidGV4dEJhc2VsaW5lIiwiZm9udCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwiZmlsbFRleHQiLCJqIiwiaW1hZ2VEYXRhIiwiZ2V0SW1hZ2VEYXRhIiwiYWxwaGEiLCJleCIsImRldmljZVBpeGVsUmF0aW8iLCJlc2NhcGUiLCJqYXZhRW5hYmxlZCIsInRvU3RyaW5nIiwidG9nZ2xlQ2xhc3MiLCJwYXJlbnRzIiwidG9nZ2xlIiwibGlua1RleHQiLCJodG1sIiwiYWN0aXZlIiwibW91c2VJbnNpZGUiLCJjdXJyZW50UXVlcnkiLCJjdXJyZW50UmVxdWVzdCIsImN1cnJlbnRUaW1lb3V0IiwiaGFzQ29udGVudCIsInNlYXJjaEZvcm1FbGVtZW50IiwiaW5wdXRFbGVtZW50IiwicmVzdWx0c0VsZW1lbnQiLCJtaW5pbXVtQ2hhcmFjdGVycyIsImRlYWN0aXZhdGVkV2lkdGgiLCJhY3RpdmF0ZWRXaWR0aCIsInJlc3VsdHNXaWR0aE9mZnNldCIsInNlbGYiLCJhZnRlciIsImhvdmVyIiwiZm9jdXNpbiIsImFjdGl2YXRlRmllbGQiLCJoYW5kbGVJbnB1dCIsImtleUNvZGUiLCJhYm9ydFNlYXJjaCIsIm1vdXNldXAiLCJkZWFjdGl2YXRlRmllbGQiLCJleGVjdXRlU2VhcmNoIiwiX3NldExvYWRpbmdTdGF0ZSIsInJ1biIsImFqYXgiLCJjb21wbGV0ZSIsImpxWEhSIiwidGV4dFN0YXR1cyIsImhhbmRsZVJlc3VsdHMiLCJzZXRUaW1lb3V0IiwiX3Vuc2V0TG9hZGluZ1N0YXRlIiwicmVzcG9uc2VUZXh0IiwiYXBwZW5kIiwiY2xlYXJUaW1lb3V0IiwiYWJvcnQiLCJpbWFnZXMiLCJsb2FkaW5nIiwib3ZlcmxheUJveCIsIm92ZXJsYXlIaWRlciIsImNsb3NlQnV0dG9uIiwib3BlbkJ1dHRvbiIsIl9kZWZpbmVQcm9wZXJ0eSIsImJlZm9yZSIsInN0b3BQcm9wYWdhdGlvbiIsIm9wZW5PdmVybGF5IiwiY2xvc2VPdmVybGF5IiwiYmluZEZvcm0iLCJoYW5kbGVTdWJtaXQiLCJwb3N0Iiwic2VyaWFsaXplIiwicmVwbGFjZVdpdGgiLCJmaWx0ZXIiLCJyZWFkeSIsImpRdWVyeSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///456\n")}},__webpack_exports__={};__webpack_modules__[456]()})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.