/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./src/distill.js": /*!************************!*\ !*** ./src/distill.js ***! \************************/ /***/ ((module, exports, __webpack_require__) => { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;function _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _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 _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _get() { return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }\nfunction _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n(function (factory) {\n true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : 0;\n})(function () {\n 'use strict';\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n var months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.'];\n var zeroPad = function zeroPad(n) {\n return n < 10 ? '0' + n : n;\n };\n var RFC = function RFC(date) {\n var day = days[date.getDay()].substring(0, 3);\n var paddedDate = zeroPad(date.getDate());\n var month = months[date.getMonth()].substring(0, 3);\n var year = date.getFullYear().toString();\n var hours = date.getUTCHours().toString();\n var minutes = date.getUTCMinutes().toString();\n var seconds = date.getUTCSeconds().toString();\n return \"\".concat(day, \", \").concat(paddedDate, \" \").concat(month, \" \").concat(year, \" \").concat(hours, \":\").concat(minutes, \":\").concat(seconds, \" Z\");\n };\n var objectFromMap = function objectFromMap(map) {\n var object = Array.from(map).reduce(function (object, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n return Object.assign(object, _defineProperty({}, key, value)) // Be careful! Maps can have non-String keys; object literals can't.\n ;\n }, {});\n return object;\n };\n var mapFromObject = function mapFromObject(object) {\n var map = new Map();\n for (var property in object) {\n if (object.hasOwnProperty(property)) {\n map.set(property, object[property]);\n }\n }\n return map;\n };\n var Author = /*#__PURE__*/function () {\n // constructor(name='', personalURL='', affiliation='', affiliationURL='') {\n // this.name = name; // 'Chris Olah'\n // this.personalURL = personalURL; // 'https://colah.github.io'\n // this.affiliation = affiliation; // 'Google Brain'\n // this.affiliationURL = affiliationURL; // 'https://g.co/brain'\n // }\n\n function Author(object) {\n _classCallCheck(this, Author);\n this.name = object.author; // 'Chris Olah'\n this.personalURL = object.authorURL; // 'https://colah.github.io'\n this.affiliation = object.affiliation; // 'Google Brain'\n this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'\n this.affiliations = object.affiliations || []; // new-style affiliations\n }\n\n // 'Chris'\n return _createClass(Author, [{\n key: \"firstName\",\n get: function get() {\n var names = this.name.split(' ');\n return names.slice(0, names.length - 1).join(' ');\n }\n\n // 'Olah'\n }, {\n key: \"lastName\",\n get: function get() {\n var names = this.name.split(' ');\n return names[names.length - 1];\n }\n }]);\n }();\n function mergeFromYMLFrontmatter(target, source) {\n target.title = source.title;\n if (source.published) {\n if (source.published instanceof Date) {\n target.publishedDate = source.published;\n } else if (source.published.constructor === String) {\n target.publishedDate = new Date(source.published);\n }\n }\n if (source.publishedDate) {\n if (source.publishedDate instanceof Date) {\n target.publishedDate = source.publishedDate;\n } else if (source.publishedDate.constructor === String) {\n target.publishedDate = new Date(source.publishedDate);\n } else {\n console.error('Don\\'t know what to do with published date: ' + source.publishedDate);\n }\n }\n target.description = source.description;\n target.authors = source.authors.map(function (authorObject) {\n return new Author(authorObject);\n });\n target.katex = source.katex;\n target.password = source.password;\n if (source.doi) {\n target.doi = source.doi;\n }\n }\n var FrontMatter = /*#__PURE__*/function () {\n function FrontMatter() {\n _classCallCheck(this, FrontMatter);\n this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks'\n this.description = ''; // 'A visual overview of neural attention...'\n this.authors = []; // Array of Author(s)\n\n this.bibliography = new Map();\n this.bibliographyParsed = false;\n // {\n // 'gregor2015draw': {\n // 'title': 'DRAW: A recurrent neural network for image generation',\n // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',\n // 'journal': 'arXiv preprint arXiv:1502.04623',\n // 'year': '2015',\n // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',\n // 'type': 'article'\n // },\n // }\n\n // Citation keys should be listed in the order that they are appear in the document.\n // Each key refers to a key in the bibliography dictionary.\n this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]\n this.citationsCollected = false;\n\n //\n // Assigned from posts.csv\n //\n\n // publishedDate: 2016-09-08T07:00:00.000Z,\n // tags: [ 'rnn' ],\n // distillPath: '2016/augmented-rnns',\n // githubPath: 'distillpub/post--augmented-rnns',\n // doiSuffix: 1,\n\n //\n // Assigned from journal\n //\n this.journal = {};\n // journal: {\n // 'title': 'Distill',\n // 'full_title': 'Distill',\n // 'abbrev_title': 'Distill',\n // 'url': 'http://distill.pub',\n // 'doi': '10.23915/distill',\n // 'publisherName': 'Distill Working Group',\n // 'publisherEmail': 'admin@distill.pub',\n // 'issn': '2476-0757',\n // 'editors': [...],\n // 'committee': [...]\n // }\n // volume: 1,\n // issue: 9,\n\n this.katex = {};\n\n //\n // Assigned from publishing process\n //\n\n // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',\n // updatedDate: 2017-03-21T07:13:16.000Z,\n // doi: '10.23915/distill.00001',\n this.doi = undefined;\n this.publishedDate = undefined;\n }\n\n // Example:\n // title: Demo Title Attention and Augmented Recurrent Neural Networks\n // published: Jan 10, 2017\n // authors:\n // - Chris Olah:\n // - Shan Carter: http://shancarter.com\n // affiliations:\n // - Google Brain:\n // - Google Brain: http://g.co/brain\n\n //\n // Computed Properties\n //\n\n // 'http://distill.pub/2016/augmented-rnns',\n return _createClass(FrontMatter, [{\n key: \"url\",\n get: function get() {\n if (this._url) {\n return this._url;\n } else if (this.distillPath && this.journal.url) {\n return this.journal.url + '/' + this.distillPath;\n } else if (this.journal.url) {\n return this.journal.url;\n }\n }\n\n // 'https://github.com/distillpub/post--augmented-rnns',\n ,\n set: function set(value) {\n this._url = value;\n }\n }, {\n key: \"githubUrl\",\n get: function get() {\n if (this.githubPath) {\n return 'https://github.com/' + this.githubPath;\n } else {\n return undefined;\n }\n }\n\n // TODO resolve differences in naming of URL/Url/url.\n // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',\n }, {\n key: \"previewURL\",\n get: function get() {\n return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg';\n }\n\n // 'Thu, 08 Sep 2016 00:00:00 -0700',\n ,\n set: function set(value) {\n this._previewURL = value;\n }\n }, {\n key: \"publishedDateRFC\",\n get: function get() {\n return RFC(this.publishedDate);\n }\n\n // 'Thu, 08 Sep 2016 00:00:00 -0700',\n }, {\n key: \"updatedDateRFC\",\n get: function get() {\n return RFC(this.updatedDate);\n }\n\n // 2016,\n }, {\n key: \"publishedYear\",\n get: function get() {\n return this.publishedDate.getFullYear();\n }\n\n // 'Sept',\n }, {\n key: \"publishedMonth\",\n get: function get() {\n return months[this.publishedDate.getMonth()];\n }\n\n // 8,\n }, {\n key: \"publishedDay\",\n get: function get() {\n return this.publishedDate.getDate();\n }\n\n // '09',\n }, {\n key: \"publishedMonthPadded\",\n get: function get() {\n return zeroPad(this.publishedDate.getMonth() + 1);\n }\n\n // '08',\n }, {\n key: \"publishedDayPadded\",\n get: function get() {\n return zeroPad(this.publishedDate.getDate());\n }\n }, {\n key: \"publishedISODateOnly\",\n get: function get() {\n return this.publishedDate.toISOString().split('T')[0];\n }\n }, {\n key: \"volume\",\n get: function get() {\n var volume = this.publishedYear - 2015;\n if (volume < 1) {\n throw new Error('Invalid publish date detected during computing volume');\n }\n return volume;\n }\n }, {\n key: \"issue\",\n get: function get() {\n return this.publishedDate.getMonth() + 1;\n }\n\n // 'Olah & Carter',\n }, {\n key: \"concatenatedAuthors\",\n get: function get() {\n if (this.authors.length > 2) {\n return this.authors[0].lastName + ', et al.';\n } else if (this.authors.length === 2) {\n return this.authors[0].lastName + ' & ' + this.authors[1].lastName;\n } else if (this.authors.length === 1) {\n return this.authors[0].lastName;\n }\n }\n\n // 'Olah, Chris and Carter, Shan',\n }, {\n key: \"bibtexAuthors\",\n get: function get() {\n return this.authors.map(function (author) {\n return author.lastName + ', ' + author.firstName;\n }).join(' and ');\n }\n\n // 'olah2016attention'\n }, {\n key: \"slug\",\n get: function get() {\n var slug = '';\n if (this.authors.length) {\n slug += this.authors[0].lastName.toLowerCase();\n slug += this.publishedYear;\n slug += this.title.split(' ')[0].toLowerCase();\n }\n return slug || 'Untitled';\n }\n }, {\n key: \"bibliographyEntries\",\n get: function get() {\n var _this = this;\n return new Map(this.citations.map(function (citationKey) {\n var entry = _this.bibliography.get(citationKey);\n return [citationKey, entry];\n }));\n }\n }, {\n key: \"bibliography\",\n get: function get() {\n return this._bibliography;\n },\n set: function set(bibliography) {\n if (bibliography instanceof Map) {\n this._bibliography = bibliography;\n } else if (_typeof(bibliography) === 'object') {\n this._bibliography = mapFromObject(bibliography);\n }\n }\n }, {\n key: \"assignToObject\",\n value: function assignToObject(target) {\n Object.assign(target, this);\n target.bibliography = objectFromMap(this.bibliographyEntries);\n target.url = this.url;\n target.doi = this.doi;\n target.githubUrl = this.githubUrl;\n target.previewURL = this.previewURL;\n if (this.publishedDate) {\n target.volume = this.volume;\n target.issue = this.issue;\n target.publishedDateRFC = this.publishedDateRFC;\n target.publishedYear = this.publishedYear;\n target.publishedMonth = this.publishedMonth;\n target.publishedDay = this.publishedDay;\n target.publishedMonthPadded = this.publishedMonthPadded;\n target.publishedDayPadded = this.publishedDayPadded;\n }\n if (this.updatedDate) {\n target.updatedDateRFC = this.updatedDateRFC;\n }\n target.concatenatedAuthors = this.concatenatedAuthors;\n target.bibtexAuthors = this.bibtexAuthors;\n target.slug = this.slug;\n }\n }], [{\n key: \"fromObject\",\n value: function fromObject(source) {\n var frontMatter = new FrontMatter();\n Object.assign(frontMatter, source);\n return frontMatter;\n }\n }]);\n }(); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n var Mutating = function Mutating(superclass) {\n return /*#__PURE__*/function (_superclass) {\n function _class() {\n var _this2;\n _classCallCheck(this, _class);\n _this2 = _callSuper(this, _class);\n\n // set up mutation observer\n var options = {\n childList: true,\n characterData: true,\n subtree: true\n };\n var observer = new MutationObserver(function () {\n observer.disconnect();\n _this2.renderIfPossible();\n observer.observe(_this2, options);\n });\n\n // ...and listen for changes\n observer.observe(_this2, options);\n return _this2;\n }\n _inherits(_class, _superclass);\n return _createClass(_class, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n _superPropGet(_class, \"connectedCallback\", this, 3)([]);\n this.renderIfPossible();\n }\n\n // potential TODO: check if this is enough for all our usecases\n // maybe provide a custom function to tell if we have enough information to render\n }, {\n key: \"renderIfPossible\",\n value: function renderIfPossible() {\n if (this.textContent && this.root) {\n this.renderContent();\n }\n }\n }, {\n key: \"renderContent\",\n value: function renderContent() {\n console.error(\"Your class \".concat(this.constructor.name, \" must provide a custom renderContent() method!\"));\n }\n }]);\n }(superclass); // end class\n }; // end mixin function\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n /*global ShadyCSS*/\n\n var Template = function Template(name, templateString) {\n var useShadow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n return function (superclass) {\n var template = document.createElement('template');\n template.innerHTML = templateString;\n if (useShadow && 'ShadyCSS' in window) {\n ShadyCSS.prepareTemplate(template, name);\n }\n return /*#__PURE__*/function (_superclass2) {\n function _class2() {\n var _this3;\n _classCallCheck(this, _class2);\n _this3 = _callSuper(this, _class2);\n _this3.clone = document.importNode(template.content, true);\n if (useShadow) {\n _this3.attachShadow({\n mode: 'open'\n });\n _this3.shadowRoot.appendChild(_this3.clone);\n }\n return _this3;\n }\n _inherits(_class2, _superclass2);\n return _createClass(_class2, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n if (this.hasAttribute('distill-prerendered')) {\n return;\n }\n if (useShadow) {\n if ('ShadyCSS' in window) {\n ShadyCSS.styleElement(this);\n }\n } else {\n this.insertBefore(this.clone, this.firstChild);\n }\n }\n }, {\n key: \"root\",\n get: function get() {\n if (useShadow) {\n return this.shadowRoot;\n } else {\n return this;\n }\n }\n\n /* TODO: Are we using these? Should we even? */\n }, {\n key: \"$\",\n value: function $(query) {\n return this.root.querySelector(query);\n }\n }, {\n key: \"$$\",\n value: function $$(query) {\n return this.root.querySelectorAll(query);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return name;\n }\n }]);\n }(superclass);\n };\n };\n var math = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nspan.katex-display {\\n text-align: left;\\n padding: 8px 0 8px 0;\\n margin: 0.5em 0 0.5em 1em;\\n}\\n\\nspan.katex {\\n -webkit-font-smoothing: antialiased;\\n color: rgba(0, 0, 0, 0.8);\\n font-size: 1.18em;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // This is a straight concatenation of code from KaTeX's contrib folder,\n // but we aren't using some of their helpers that don't work well outside a browser environment.\n\n /*global katex */\n\n var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {\n // Adapted from\n // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx\n var index = startIndex;\n var braceLevel = 0;\n var delimLength = delimiter.length;\n while (index < text.length) {\n var character = text[index];\n if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {\n return index;\n } else if (character === \"\\\\\") {\n index++;\n } else if (character === \"{\") {\n braceLevel++;\n } else if (character === \"}\") {\n braceLevel--;\n }\n index++;\n }\n return -1;\n };\n var splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {\n var finalData = [];\n for (var i = 0; i < startData.length; i++) {\n if (startData[i].type === \"text\") {\n var text = startData[i].data;\n var lookingForLeft = true;\n var currIndex = 0;\n var nextIndex = void 0;\n nextIndex = text.indexOf(leftDelim);\n if (nextIndex !== -1) {\n currIndex = nextIndex;\n finalData.push({\n type: \"text\",\n data: text.slice(0, currIndex)\n });\n lookingForLeft = false;\n }\n while (true) {\n // eslint-disable-line no-constant-condition\n if (lookingForLeft) {\n nextIndex = text.indexOf(leftDelim, currIndex);\n if (nextIndex === -1) {\n break;\n }\n finalData.push({\n type: \"text\",\n data: text.slice(currIndex, nextIndex)\n });\n currIndex = nextIndex;\n } else {\n nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);\n if (nextIndex === -1) {\n break;\n }\n finalData.push({\n type: \"math\",\n data: text.slice(currIndex + leftDelim.length, nextIndex),\n rawData: text.slice(currIndex, nextIndex + rightDelim.length),\n display: display\n });\n currIndex = nextIndex + rightDelim.length;\n }\n lookingForLeft = !lookingForLeft;\n }\n finalData.push({\n type: \"text\",\n data: text.slice(currIndex)\n });\n } else {\n finalData.push(startData[i]);\n }\n }\n return finalData;\n };\n var splitWithDelimiters = function splitWithDelimiters(text, delimiters) {\n var data = [{\n type: \"text\",\n data: text\n }];\n for (var i = 0; i < delimiters.length; i++) {\n var delimiter = delimiters[i];\n data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);\n }\n return data;\n };\n\n /* Note: optionsCopy is mutated by this method. If it is ever exposed in the\r\n * API, we should copy it before mutating.\r\n */\n var renderMathInText = function renderMathInText(text, optionsCopy) {\n var data = splitWithDelimiters(text, optionsCopy.delimiters);\n var fragment = document.createDocumentFragment();\n for (var i = 0; i < data.length; i++) {\n if (data[i].type === \"text\") {\n fragment.appendChild(document.createTextNode(data[i].data));\n } else {\n var tag = document.createElement(\"d-math\");\n var _math = data[i].data;\n // Override any display mode defined in the settings with that\n // defined by the text itself\n optionsCopy.displayMode = data[i].display;\n try {\n tag.textContent = _math;\n if (optionsCopy.displayMode) {\n tag.setAttribute(\"block\", \"\");\n }\n } catch (e) {\n if (!(e instanceof katex.ParseError)) {\n throw e;\n }\n optionsCopy.errorCallback(\"KaTeX auto-render: Failed to parse `\" + data[i].data + \"` with \", e);\n fragment.appendChild(document.createTextNode(data[i].rawData));\n continue;\n }\n fragment.appendChild(tag);\n }\n }\n return fragment;\n };\n var _renderElem = function renderElem(elem, optionsCopy) {\n for (var i = 0; i < elem.childNodes.length; i++) {\n var childNode = elem.childNodes[i];\n if (childNode.nodeType === 3) {\n // Text node\n var text = childNode.textContent;\n if (optionsCopy.mightHaveMath(text)) {\n var frag = renderMathInText(text, optionsCopy);\n i += frag.childNodes.length - 1;\n elem.replaceChild(frag, childNode);\n }\n } else if (childNode.nodeType === 1) {\n // Element node\n var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1;\n if (shouldRender) {\n _renderElem(childNode, optionsCopy);\n }\n }\n // Otherwise, it's something else, and ignore it.\n }\n };\n var defaultAutoRenderOptions = {\n delimiters: [{\n left: \"$$\",\n right: \"$$\",\n display: true\n }, {\n left: \"\\\\[\",\n right: \"\\\\]\",\n display: true\n }, {\n left: \"\\\\(\",\n right: \"\\\\)\",\n display: false\n }\n // LaTeX uses this, but it ruins the display of normal `$` in text:\n // {left: '$', right: '$', display: false},\n ],\n ignoredTags: [\"script\", \"noscript\", \"style\", \"textarea\", \"pre\", \"code\", \"svg\"],\n errorCallback: function errorCallback(msg, err) {\n console.error(msg, err);\n }\n };\n var renderMathInElement = function renderMathInElement(elem, options) {\n if (!elem) {\n throw new Error(\"No element provided to render\");\n }\n var optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);\n var delimiterStrings = optionsCopy.delimiters.flatMap(function (d) {\n return [d.left, d.right];\n });\n var mightHaveMath = function mightHaveMath(text) {\n return delimiterStrings.some(function (d) {\n return text.indexOf(d) !== -1;\n });\n };\n optionsCopy.mightHaveMath = mightHaveMath;\n _renderElem(elem, optionsCopy);\n };\n\n // Copyright 2018 The Distill Template Authors\n\n var katexJSURL = 'https://distill.pub/third-party/katex/katex.min.js';\n var katexCSSTag = '';\n var T = Template('d-math', \"\\n\".concat(katexCSSTag, \"\\n\\n\\n\"));\n\n // DMath, not Math, because that would conflict with the JS built-in\n var DMath = /*#__PURE__*/function (_Mutating) {\n function DMath() {\n _classCallCheck(this, DMath);\n return _callSuper(this, DMath, arguments);\n }\n _inherits(DMath, _Mutating);\n return _createClass(DMath, [{\n key: \"options\",\n get: function get() {\n var localOptions = {\n displayMode: this.hasAttribute('block')\n };\n return Object.assign(localOptions, DMath.katexOptions);\n }\n }, {\n key: \"connectedCallback\",\n value: function connectedCallback() {\n _superPropGet(DMath, \"connectedCallback\", this, 3)([]);\n if (!DMath.katexAdded) {\n DMath.addKatex();\n }\n }\n }, {\n key: \"renderContent\",\n value: function renderContent() {\n if (typeof katex !== 'undefined') {\n var container = this.root.querySelector('#katex-container');\n katex.render(this.textContent, container, this.options);\n }\n }\n }], [{\n key: \"katexOptions\",\n get: function get() {\n if (!DMath._katexOptions) {\n DMath._katexOptions = {\n delimiters: [{\n 'left': '$$',\n 'right': '$$',\n 'display': false\n }]\n };\n }\n return DMath._katexOptions;\n },\n set: function set(options) {\n DMath._katexOptions = options;\n if (DMath.katexOptions.delimiters) {\n if (!DMath.katexAdded) {\n DMath.addKatex();\n } else {\n DMath.katexLoadedCallback();\n }\n }\n }\n }, {\n key: \"katexLoadedCallback\",\n value: function katexLoadedCallback() {\n // render all d-math tags\n var mathTags = document.querySelectorAll('d-math');\n var _iterator = _createForOfIteratorHelper(mathTags),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var mathTag = _step.value;\n mathTag.renderContent();\n }\n // transform inline delimited math to d-math tags\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (DMath.katexOptions.delimiters) {\n renderMathInElement(document.body, DMath.katexOptions);\n }\n }\n }, {\n key: \"addKatex\",\n value: function addKatex() {\n // css tag can use this convenience function\n document.head.insertAdjacentHTML('beforeend', katexCSSTag);\n // script tag has to be created to work properly\n var scriptTag = document.createElement('script');\n scriptTag.src = katexJSURL;\n scriptTag.async = true;\n scriptTag.onload = DMath.katexLoadedCallback;\n scriptTag.crossorigin = 'anonymous';\n document.head.appendChild(scriptTag);\n DMath.katexAdded = true;\n }\n }]);\n }(Mutating(T(HTMLElement)));\n DMath.katexAdded = false;\n DMath.inlineMathRendered = false;\n window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function collect_citations() {\n var dom = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n var citations = new Set();\n var citeTags = dom.querySelectorAll(\"d-cite\");\n var _iterator2 = _createForOfIteratorHelper(citeTags),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var tag = _step2.value;\n var keyString = tag.getAttribute(\"key\") || tag.getAttribute(\"bibtex-key\");\n var keys = keyString.split(\",\").map(function (k) {\n return k.trim();\n });\n var _iterator3 = _createForOfIteratorHelper(keys),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var key = _step3.value;\n citations.add(key);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return _toConsumableArray(citations);\n }\n function author_string(ent, template, sep, finalSep) {\n if (ent.author == null) {\n return \"\";\n }\n var names = ent.author.split(\" and \");\n var name_strings = names.map(function (name) {\n name = name.trim();\n if (name.indexOf(\",\") != -1) {\n var last = name.split(\",\")[0].trim();\n var firsts = name.split(\",\")[1];\n } else if (name.indexOf(\" \") != -1) {\n var last = name.split(\" \").slice(-1)[0].trim();\n var firsts = name.split(\" \").slice(0, -1).join(\" \");\n } else {\n var last = name.trim();\n }\n var initials = \"\";\n if (firsts != undefined) {\n initials = firsts.trim().split(\" \").map(function (s) {\n return s.trim()[0];\n });\n initials = initials.join(\".\") + \".\";\n }\n return template.replace(\"${F}\", firsts).replace(\"${L}\", last).replace(\"${I}\", initials).trim(); // in case one of first or last was empty\n });\n if (names.length > 1) {\n var str = name_strings.slice(0, names.length - 1).join(sep);\n str += (finalSep || sep) + name_strings[names.length - 1];\n return str;\n } else {\n return name_strings[0];\n }\n }\n function venue_string(ent) {\n var cite = ent.journal || ent.booktitle || \"\";\n if (\"volume\" in ent) {\n var issue = ent.issue || ent.number;\n issue = issue != undefined ? \"(\" + issue + \")\" : \"\";\n cite += \", Vol \" + ent.volume + issue;\n }\n if (\"pages\" in ent) {\n cite += \", pp. \" + ent.pages;\n }\n if (cite != \"\") cite += \". \";\n if (\"publisher\" in ent) {\n cite += ent.publisher;\n if (cite[cite.length - 1] != \".\") cite += \".\";\n }\n return cite;\n }\n function link_string(ent) {\n if (\"url\" in ent) {\n var url = ent.url;\n var arxiv_match = /arxiv\\.org\\/abs\\/([0-9\\.]*)/.exec(url);\n if (arxiv_match != null) {\n url = \"http://arxiv.org/pdf/\".concat(arxiv_match[1], \".pdf\");\n }\n if (url.slice(-4) == \".pdf\") {\n var label = \"PDF\";\n } else if (url.slice(-5) == \".html\") {\n var label = \"HTML\";\n }\n return \"  [\").concat(label || \"link\", \"]\");\n } /* else if (\"doi\" in ent){\r\n return `  [DOI]`;\r\n }*/else {\n return \"\";\n }\n }\n function doi_string(ent, new_line) {\n if (\"doi\" in ent) {\n return \"\".concat(new_line ? \"
\" : \"\", \" DOI: \").concat(ent.doi, \"\");\n } else {\n return \"\";\n }\n }\n function title_string(ent) {\n return '' + ent.title + \" \";\n }\n function bibliography_cite(ent, fancy) {\n if (ent) {\n var cite = title_string(ent);\n cite += link_string(ent) + \"
\";\n if (ent.author) {\n cite += author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n if (ent.year || ent.date) {\n cite += \", \";\n }\n }\n if (ent.year || ent.date) {\n cite += (ent.year || ent.date) + \". \";\n } else {\n cite += \". \";\n }\n cite += venue_string(ent);\n cite += doi_string(ent);\n return cite;\n /*var cite = author_string(ent, \"${L}, ${I}\", \", \", \" and \");\r\n if (ent.year || ent.date){\r\n cite += \", \" + (ent.year || ent.date) + \". \"\r\n } else {\r\n cite += \". \"\r\n }\r\n cite += \"\" + ent.title + \". \";\r\n cite += venue_string(ent);\r\n cite += doi_string(ent);\r\n cite += link_string(ent);\r\n return cite*/\n } else {\n return \"?\";\n }\n }\n function hover_cite(ent) {\n if (ent) {\n var cite = \"\";\n cite += \"\" + ent.title + \"\";\n cite += link_string(ent);\n cite += \"
\";\n var a_str = author_string(ent, \"${I} ${L}\", \", \") + \".\";\n var v_str = venue_string(ent).trim() + \" \" + ent.year + \". \" + doi_string(ent, true);\n if ((a_str + v_str).length < Math.min(40, ent.title.length)) {\n cite += a_str + \" \" + v_str;\n } else {\n cite += a_str + \"
\" + v_str;\n }\n return cite;\n } else {\n return \"?\";\n }\n }\n function domContentLoaded() {\n return ['interactive', 'complete'].indexOf(document.readyState) !== -1;\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function _moveLegacyAffiliationFormatIntoArray(frontMatter) {\n // authors used to have propoerties \"affiliation\" and \"affiliationURL\".\n // We now encourage using an array for affiliations containing objects with\n // properties \"name\" and \"url\".\n var _iterator4 = _createForOfIteratorHelper(frontMatter.authors),\n _step4;\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var author = _step4.value;\n var hasOldStyle = Boolean(author.affiliation);\n var hasNewStyle = Boolean(author.affiliations);\n if (!hasOldStyle) continue;\n if (hasNewStyle) {\n console.warn(\"Author \".concat(author.author, \" has both old-style (\\\"affiliation\\\" & \\\"affiliationURL\\\") and new style (\\\"affiliations\\\") affiliation information!\"));\n } else {\n var newAffiliation = {\n \"name\": author.affiliation\n };\n if (author.affiliationURL) newAffiliation.url = author.affiliationURL;\n author.affiliations = [newAffiliation];\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n return frontMatter;\n }\n function parseFrontmatter(element) {\n var scriptTag = element.firstElementChild;\n if (scriptTag) {\n var type = scriptTag.getAttribute('type');\n if (type.split('/')[1] == 'json') {\n var content = scriptTag.textContent;\n var parsed = JSON.parse(content);\n return _moveLegacyAffiliationFormatIntoArray(parsed);\n } else {\n console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.');\n }\n } else {\n console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.');\n }\n return {};\n }\n var FrontMatter$1 = /*#__PURE__*/function (_HTMLElement) {\n function FrontMatter$1() {\n var _this4;\n _classCallCheck(this, FrontMatter$1);\n _this4 = _callSuper(this, FrontMatter$1);\n var options = {\n childList: true,\n characterData: true,\n subtree: true\n };\n var observer = new MutationObserver(function (entries) {\n var _iterator5 = _createForOfIteratorHelper(entries),\n _step5;\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var entry = _step5.value;\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n var data = parseFrontmatter(_this4);\n _this4.notify(data);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n });\n observer.observe(_this4, options);\n return _this4;\n }\n _inherits(FrontMatter$1, _HTMLElement);\n return _createClass(FrontMatter$1, [{\n key: \"notify\",\n value: function notify(data) {\n var options = {\n detail: data,\n bubbles: true\n };\n var event = new CustomEvent('onFrontMatterChanged', options);\n document.dispatchEvent(event);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-front-matter';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement)); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n // no appendix -> add appendix\n // title in front, no h1 -> add it\n // no title in front, h1 -> read and put into frontMatter\n // footnote -> footnote list\n // break up bib\n // if citation, no bib-list -> add citation-list\n // if authors, no byline -> add byline\n function optionalComponents(dom, data) {\n var body = dom.body;\n var article = body.querySelector('d-article');\n\n // If we don't have an article tag, something weird is going on—giving up.\n if (!article) {\n console.warn('No d-article tag found; skipping adding optional components!');\n return;\n }\n var byline = dom.querySelector('d-byline');\n if (!byline) {\n if (data.authors) {\n byline = dom.createElement('d-byline');\n body.insertBefore(byline, article);\n } else {\n console.warn('No authors found in front matter; please add them before submission!');\n }\n }\n var title = dom.querySelector('d-title');\n if (!title) {\n title = dom.createElement('d-title');\n body.insertBefore(title, byline);\n }\n var h1 = title.querySelector('h1');\n if (!h1) {\n h1 = dom.createElement('h1');\n h1.textContent = data.title;\n title.insertBefore(h1, title.firstChild);\n }\n var hasPassword = typeof data.password !== 'undefined';\n var interstitial = body.querySelector('d-interstitial');\n if (hasPassword && !interstitial) {\n var inBrowser = typeof window !== 'undefined';\n var onLocalhost = inBrowser && window.location.hostname.includes('localhost');\n if (!inBrowser || !onLocalhost) {\n interstitial = dom.createElement('d-interstitial');\n interstitial.password = data.password;\n body.insertBefore(interstitial, body.firstChild);\n }\n } else if (!hasPassword && interstitial) {\n interstitial.parentElement.removeChild(this);\n }\n var appendix = dom.querySelector('d-appendix');\n if (!appendix) {\n appendix = dom.createElement('d-appendix');\n dom.body.appendChild(appendix);\n }\n var footnoteList = dom.querySelector('d-footnote-list');\n if (!footnoteList) {\n footnoteList = dom.createElement('d-footnote-list');\n appendix.appendChild(footnoteList);\n }\n var citationList = dom.querySelector('d-citation-list');\n if (!citationList) {\n citationList = dom.createElement('d-citation-list');\n appendix.appendChild(citationList);\n }\n }\n\n // Copyright 2018 The Distill Template Authors\n\n var frontMatter = new FrontMatter();\n var Controller = {\n frontMatter: frontMatter,\n waitingOn: {\n bibliography: [],\n citations: []\n },\n listeners: {\n onCiteKeyCreated: function onCiteKeyCreated(event) {\n var _event$detail = _slicedToArray(event.detail, 2),\n citeTag = _event$detail[0],\n keys = _event$detail[1];\n\n // ensure we have citations\n if (!frontMatter.citationsCollected) {\n // console.debug('onCiteKeyCreated, but unresolved dependency (\"citations\"). Enqueing.');\n Controller.waitingOn.citations.push(function () {\n return Controller.listeners.onCiteKeyCreated(event);\n });\n return;\n }\n\n // ensure we have a loaded bibliography\n if (!frontMatter.bibliographyParsed) {\n // console.debug('onCiteKeyCreated, but unresolved dependency (\"bibliography\"). Enqueing.');\n Controller.waitingOn.bibliography.push(function () {\n return Controller.listeners.onCiteKeyCreated(event);\n });\n return;\n }\n var numbers = keys.map(function (key) {\n return frontMatter.citations.indexOf(key);\n });\n citeTag.numbers = numbers;\n var entries = keys.map(function (key) {\n return frontMatter.bibliography.get(key);\n });\n citeTag.entries = entries;\n },\n onCiteKeyChanged: function onCiteKeyChanged() {\n // const [citeTag, keys] = event.detail;\n\n // update citations\n frontMatter.citations = collect_citations();\n frontMatter.citationsCollected = true;\n var _iterator6 = _createForOfIteratorHelper(Controller.waitingOn.citations.slice()),\n _step6;\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var waitingCallback = _step6.value;\n waitingCallback();\n }\n\n // update bibliography\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n var citationListTag = document.querySelector(\"d-citation-list\");\n var bibliographyEntries = new Map(frontMatter.citations.map(function (citationKey) {\n return [citationKey, frontMatter.bibliography.get(citationKey)];\n }));\n citationListTag.citations = bibliographyEntries;\n var citeTags = document.querySelectorAll(\"d-cite\");\n var _iterator7 = _createForOfIteratorHelper(citeTags),\n _step7;\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var citeTag = _step7.value;\n console.log(citeTag);\n var keys = citeTag.keys;\n var numbers = keys.map(function (key) {\n return frontMatter.citations.indexOf(key);\n });\n citeTag.numbers = numbers;\n var entries = keys.map(function (key) {\n return frontMatter.bibliography.get(key);\n });\n citeTag.entries = entries;\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n },\n onCiteKeyRemoved: function onCiteKeyRemoved(event) {\n Controller.listeners.onCiteKeyChanged(event);\n },\n onBibliographyChanged: function onBibliographyChanged(event) {\n var citationListTag = document.querySelector(\"d-citation-list\");\n var bibliography = event.detail;\n frontMatter.bibliography = bibliography;\n frontMatter.bibliographyParsed = true;\n var _iterator8 = _createForOfIteratorHelper(Controller.waitingOn.bibliography.slice()),\n _step8;\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var waitingCallback = _step8.value;\n waitingCallback();\n }\n\n // ensure we have citations\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n if (!frontMatter.citationsCollected) {\n Controller.waitingOn.citations.push(function () {\n Controller.listeners.onBibliographyChanged({\n target: event.target,\n detail: event.detail\n });\n });\n return;\n }\n if (citationListTag.hasAttribute(\"distill-prerendered\")) {\n console.debug(\"Citation list was prerendered; not updating it.\");\n } else {\n var entries = new Map(frontMatter.citations.map(function (citationKey) {\n return [citationKey, frontMatter.bibliography.get(citationKey)];\n }));\n citationListTag.citations = entries;\n }\n },\n onFootnoteChanged: function onFootnoteChanged() {\n // const footnote = event.detail;\n //TODO: optimize to only update current footnote\n var footnotesList = document.querySelector(\"d-footnote-list\");\n if (footnotesList) {\n var footnotes = document.querySelectorAll(\"d-footnote\");\n footnotesList.footnotes = footnotes;\n }\n },\n onFrontMatterChanged: function onFrontMatterChanged(event) {\n var data = event.detail;\n mergeFromYMLFrontmatter(frontMatter, data);\n var interstitial = document.querySelector(\"d-interstitial\");\n if (interstitial) {\n if (typeof frontMatter.password !== \"undefined\") {\n interstitial.password = frontMatter.password;\n } else {\n interstitial.parentElement.removeChild(interstitial);\n }\n }\n var prerendered = document.body.hasAttribute(\"distill-prerendered\");\n if (!prerendered && domContentLoaded()) {\n optionalComponents(document, frontMatter);\n var appendix = document.querySelector(\"distill-appendix\");\n if (appendix) {\n appendix.frontMatter = frontMatter;\n }\n var _byline = document.querySelector(\"d-byline\");\n if (_byline) {\n _byline.frontMatter = frontMatter;\n }\n if (data.katex) {\n DMath.katexOptions = data.katex;\n }\n }\n },\n DOMContentLoaded: function DOMContentLoaded() {\n if (Controller.loaded) {\n console.warn(\"Controller received DOMContentLoaded but was already loaded!\");\n return;\n } else if (!domContentLoaded()) {\n console.warn(\"Controller received DOMContentLoaded at document.readyState: \" + document.readyState + \"!\");\n return;\n } else {\n Controller.loaded = true;\n console.debug(\"Runlevel 4: Controller running DOMContentLoaded\");\n }\n var frontMatterTag = document.querySelector(\"d-front-matter\");\n if (frontMatterTag) {\n var data = parseFrontmatter(frontMatterTag);\n Controller.listeners.onFrontMatterChanged({\n detail: data\n });\n }\n\n // Resolving \"citations\" dependency due to initial DOM load\n frontMatter.citations = collect_citations();\n frontMatter.citationsCollected = true;\n var _iterator9 = _createForOfIteratorHelper(Controller.waitingOn.citations.slice()),\n _step9;\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _waitingCallback = _step9.value;\n _waitingCallback();\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n if (frontMatter.bibliographyParsed) {\n var _iterator10 = _createForOfIteratorHelper(Controller.waitingOn.bibliography.slice()),\n _step10;\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var waitingCallback = _step10.value;\n waitingCallback();\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n }\n var footnotesList = document.querySelector(\"d-footnote-list\");\n if (footnotesList) {\n var footnotes = document.querySelectorAll(\"d-footnote\");\n footnotesList.footnotes = footnotes;\n }\n }\n } // listeners\n }; // Controller\n\n var base = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nhtml {\\n font-size: 14px;\\n\\tline-height: 1.6em;\\n /* font-family: \\\"Libre Franklin\\\", \\\"Helvetica Neue\\\", sans-serif; */\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen, Ubuntu, Cantarell, \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n /*, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";*/\\n text-size-adjust: 100%;\\n -ms-text-size-adjust: 100%;\\n -webkit-text-size-adjust: 100%;\\n}\\n\\n@media(min-width: 768px) {\\n html {\\n font-size: 16px;\\n }\\n}\\n\\nbody {\\n margin: 0;\\n}\\n\\na {\\n color: #004276;\\n}\\n\\nfigure {\\n margin: 0;\\n}\\n\\ntable {\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th {\\n\\ttext-align: left;\\n}\\n\\ntable thead {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\ntable thead th {\\n padding-bottom: 0.5em;\\n}\\n\\ntable tbody :first-child td {\\n padding-top: 0.5em;\\n}\\n\\npre {\\n overflow: auto;\\n max-width: 100%;\\n}\\n\\np {\\n margin-top: 0;\\n margin-bottom: 1em;\\n}\\n\\nsup, sub {\\n vertical-align: baseline;\\n position: relative;\\n top: -0.4em;\\n line-height: 1em;\\n}\\n\\nsub {\\n top: 0.4em;\\n}\\n\\n.kicker,\\n.marker {\\n font-size: 15px;\\n font-weight: 600;\\n color: rgba(0, 0, 0, 0.5);\\n}\\n\\n\\n/* Headline */\\n\\n@media(min-width: 1024px) {\\n d-title h1 span {\\n display: block;\\n }\\n}\\n\\n/* Figure */\\n\\nfigure {\\n position: relative;\\n margin-bottom: 2.5em;\\n margin-top: 1.5em;\\n}\\n\\nfigcaption+figure {\\n\\n}\\n\\nfigure img {\\n width: 100%;\\n}\\n\\nfigure svg text,\\nfigure svg tspan {\\n}\\n\\nfigcaption,\\n.figcaption {\\n color: rgba(0, 0, 0, 0.6);\\n font-size: 12px;\\n line-height: 1.5em;\\n}\\n\\n@media(min-width: 1024px) {\\nfigcaption,\\n.figcaption {\\n font-size: 13px;\\n }\\n}\\n\\nfigure.external img {\\n background: white;\\n border: 1px solid rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\\n padding: 18px;\\n box-sizing: border-box;\\n}\\n\\nfigcaption a {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\nfigcaption b,\\nfigcaption strong, {\\n font-weight: 600;\\n color: rgba(0, 0, 0, 1.0);\\n}\\n\";\n var layout = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@supports not (display: grid) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n display: block;\\n padding: 8px;\\n }\\n}\\n\\n.base-grid,\\ndistill-header,\\nd-title,\\nd-abstract,\\nd-article,\\nd-appendix,\\ndistill-appendix,\\nd-byline,\\nd-footnote-list,\\nd-citation-list,\\ndistill-footer {\\n display: grid;\\n justify-items: stretch;\\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\\n grid-column-gap: 8px;\\n}\\n\\n.grid {\\n display: grid;\\n grid-column-gap: 8px;\\n}\\n\\n@media(min-width: 768px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 16px;\\n }\\n\\n .grid {\\n grid-column-gap: 16px;\\n }\\n}\\n\\n@media(min-width: 1000px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 16px;\\n }\\n\\n .grid {\\n grid-column-gap: 16px;\\n }\\n}\\n\\n@media(min-width: 1180px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 32px;\\n }\\n\\n .grid {\\n grid-column-gap: 32px;\\n }\\n}\\n\\n\\n\\n\\n.base-grid {\\n grid-column: screen;\\n}\\n\\n/* .l-body,\\nd-article > * {\\n grid-column: text;\\n}\\n\\n.l-page,\\nd-title > *,\\nd-figure {\\n grid-column: page;\\n} */\\n\\n.l-gutter {\\n grid-column: gutter;\\n}\\n\\n.l-text,\\n.l-body {\\n grid-column: text;\\n}\\n\\n.l-page {\\n grid-column: page;\\n}\\n\\n.l-body-outset {\\n grid-column: middle;\\n}\\n\\n.l-page-outset {\\n grid-column: page;\\n}\\n\\n.l-screen {\\n grid-column: screen;\\n}\\n\\n.l-screen-inset {\\n grid-column: screen;\\n padding-left: 16px;\\n padding-left: 16px;\\n}\\n\\n\\n/* Aside */\\n\\nd-article aside {\\n grid-column: gutter;\\n font-size: 12px;\\n line-height: 1.6em;\\n color: rgba(0, 0, 0, 0.6)\\n}\\n\\n@media(min-width: 768px) {\\n aside {\\n grid-column: gutter;\\n }\\n\\n .side {\\n grid-column: gutter;\\n }\\n}\\n\";\n var print = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@media print {\\n\\n @page {\\n size: 8in 11in;\\n @bottom-right {\\n content: counter(page) \\\" of \\\" counter(pages);\\n }\\n }\\n\\n html {\\n /* no general margins -- CSS Grid takes care of those */\\n }\\n\\n p, code {\\n page-break-inside: avoid;\\n }\\n\\n h2, h3 {\\n page-break-after: avoid;\\n }\\n\\n d-header {\\n visibility: hidden;\\n }\\n\\n d-footer {\\n display: none!important;\\n }\\n\\n}\\n\";\n var byline = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-byline {\\n contain: style;\\n overflow: hidden;\\n border-top: 1px solid rgba(0, 0, 0, 0.1);\\n font-size: 0.8rem;\\n line-height: 1.8em;\\n padding: 1.5rem 0;\\n min-height: 1.8em;\\n}\\n\\n\\nd-byline .byline {\\n grid-template-columns: 1fr 1fr;\\n grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n d-byline .byline {\\n grid-template-columns: 1fr 1fr 1fr 1fr;\\n }\\n}\\n\\nd-byline .authors-affiliations {\\n grid-column-end: span 2;\\n grid-template-columns: 1fr 1fr;\\n margin-bottom: 1em;\\n}\\n\\n@media(min-width: 768px) {\\n d-byline .authors-affiliations {\\n margin-bottom: 0;\\n }\\n}\\n\\nd-byline h3 {\\n font-size: 0.6rem;\\n font-weight: 400;\\n color: rgba(0, 0, 0, 0.5);\\n margin: 0;\\n text-transform: uppercase;\\n}\\n\\nd-byline p {\\n margin: 0;\\n}\\n\\nd-byline a,\\nd-article d-byline a {\\n color: rgba(0, 0, 0, 0.8);\\n text-decoration: none;\\n border-bottom: none;\\n}\\n\\nd-article d-byline a:hover {\\n text-decoration: underline;\\n border-bottom: none;\\n}\\n\\nd-byline p.author {\\n font-weight: 500;\\n}\\n\\nd-byline .affiliations {\\n\\n}\\n\";\n var article = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-article {\\n contain: layout style;\\n overflow-x: hidden;\\n border-top: 1px solid rgba(0, 0, 0, 0.1);\\n padding-top: 2rem;\\n color: rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article > * {\\n grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n d-article {\\n font-size: 16px;\\n }\\n}\\n\\n@media(min-width: 1024px) {\\n d-article {\\n font-size: 1.06rem;\\n line-height: 1.7em;\\n }\\n}\\n\\n\\n/* H2 */\\n\\n\\nd-article .marker {\\n text-decoration: none;\\n border: none;\\n counter-reset: section;\\n grid-column: kicker;\\n line-height: 1.7em;\\n}\\n\\nd-article .marker:hover {\\n border: none;\\n}\\n\\nd-article .marker span {\\n padding: 0 3px 4px;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n position: relative;\\n top: 4px;\\n}\\n\\nd-article .marker:hover span {\\n color: rgba(0, 0, 0, 0.7);\\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\\n}\\n\\nd-article h2 {\\n font-weight: 600;\\n font-size: 24px;\\n line-height: 1.25em;\\n margin: 2rem 0 1.5rem 0;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n padding-bottom: 1rem;\\n}\\n\\n@media(min-width: 1024px) {\\n d-article h2 {\\n font-size: 36px;\\n }\\n}\\n\\n/* H3 */\\n\\nd-article h3 {\\n font-weight: 700;\\n font-size: 18px;\\n line-height: 1.4em;\\n margin-bottom: 1em;\\n margin-top: 2em;\\n}\\n\\n@media(min-width: 1024px) {\\n d-article h3 {\\n font-size: 20px;\\n }\\n}\\n\\n/* H4 */\\n\\nd-article h4 {\\n font-weight: 600;\\n text-transform: uppercase;\\n font-size: 14px;\\n line-height: 1.4em;\\n}\\n\\nd-article a {\\n color: inherit;\\n}\\n\\nd-article p,\\nd-article ul,\\nd-article ol,\\nd-article blockquote {\\n margin-top: 0;\\n margin-bottom: 1em;\\n margin-left: 0;\\n margin-right: 0;\\n}\\n\\nd-article blockquote {\\n border-left: 2px solid rgba(0, 0, 0, 0.2);\\n padding-left: 2em;\\n font-style: italic;\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\nd-article a {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\\n text-decoration: none;\\n}\\n\\nd-article a:hover {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article .link {\\n text-decoration: underline;\\n cursor: pointer;\\n}\\n\\nd-article ul,\\nd-article ol {\\n padding-left: 24px;\\n}\\n\\nd-article li {\\n margin-bottom: 0.2em;\\n margin-left: 0;\\n padding-left: 0;\\n}\\n\\nd-article li:last-child {\\n margin-bottom: 0;\\n}\\n\\nd-article pre {\\n font-size: 14px;\\n margin-bottom: 20px;\\n}\\n\\nd-article hr {\\n grid-column: screen;\\n width: 100%;\\n border: none;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n margin-top: 60px;\\n margin-bottom: 60px;\\n}\\n\\nd-article section {\\n margin-top: 60px;\\n margin-bottom: 60px;\\n}\\n\\nd-article span.equation-mimic {\\n font-family: georgia;\\n font-size: 115%;\\n font-style: italic;\\n}\\n\\nd-article > d-code,\\nd-article section > d-code {\\n display: block;\\n}\\n\\nd-article > d-math[block],\\nd-article section > d-math[block] {\\n display: block;\\n}\\n\\n@media (max-width: 768px) {\\n d-article > d-code,\\n d-article section > d-code,\\n d-article > d-math[block],\\n d-article section > d-math[block] {\\n overflow-x: scroll;\\n -ms-overflow-style: none; // IE 10+\\n overflow: -moz-scrollbars-none; // Firefox\\n }\\n\\n d-article > d-code::-webkit-scrollbar,\\n d-article section > d-code::-webkit-scrollbar,\\n d-article > d-math[block]::-webkit-scrollbar,\\n d-article section > d-math[block]::-webkit-scrollbar {\\n display: none; // Safari and Chrome\\n }\\n}\\n\\nd-article .citation {\\n color: #668;\\n cursor: pointer;\\n}\\n\\nd-include {\\n width: auto;\\n display: block;\\n}\\n\\nd-figure {\\n contain: layout style;\\n}\\n\\n/* KaTeX */\\n\\n.katex, .katex-prerendered {\\n contain: style;\\n display: inline-block;\\n}\\n\\n/* Tables */\\n\\nd-article table {\\n border-collapse: collapse;\\n margin-bottom: 1.5rem;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table th {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table td {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\nd-article table tr:last-of-type td {\\n border-bottom: none;\\n}\\n\\nd-article table th,\\nd-article table td {\\n font-size: 15px;\\n padding: 2px 8px;\\n}\\n\\nd-article table tbody :first-child td {\\n padding-top: 2px;\\n}\\n\";\n var title = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-title {\\n padding: 2rem 0 1.5rem;\\n contain: layout style;\\n overflow-x: hidden;\\n}\\n\\n@media(min-width: 768px) {\\n d-title {\\n padding: 4rem 0 1.5rem;\\n }\\n}\\n\\nd-title h1 {\\n grid-column: text;\\n font-size: 40px;\\n font-weight: 700;\\n line-height: 1.1em;\\n margin: 0 0 0.5rem;\\n}\\n\\n@media(min-width: 768px) {\\n d-title h1 {\\n font-size: 50px;\\n }\\n}\\n\\nd-title p {\\n font-weight: 300;\\n font-size: 1.2rem;\\n line-height: 1.55em;\\n grid-column: text;\\n}\\n\\nd-title .status {\\n margin-top: 0px;\\n font-size: 12px;\\n color: #009688;\\n opacity: 0.8;\\n grid-column: kicker;\\n}\\n\\nd-title .status span {\\n line-height: 1;\\n display: inline-block;\\n padding: 6px 0;\\n border-bottom: 1px solid #80cbc4;\\n font-size: 11px;\\n text-transform: uppercase;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n\n var styles = base + layout + title + byline + article + math + print;\n function makeStyleTag(dom) {\n var styleTagId = 'distill-prerendered-styles';\n var prerenderedTag = dom.getElementById(styleTagId);\n if (!prerenderedTag) {\n var styleTag = dom.createElement('style');\n styleTag.id = styleTagId;\n styleTag.type = 'text/css';\n var cssTextTag = dom.createTextNode(styles);\n styleTag.appendChild(cssTextTag);\n var firstScriptTag = dom.head.querySelector('script');\n dom.head.insertBefore(styleTag, firstScriptTag);\n }\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function addPolyfill(polyfill, polyfillLoadedCallback) {\n console.debug('Runlevel 0: Polyfill required: ' + polyfill.name);\n var script = document.createElement('script');\n script.src = polyfill.url;\n script.async = false;\n if (polyfillLoadedCallback) {\n script.onload = function () {\n polyfillLoadedCallback(polyfill);\n };\n }\n script.onerror = function () {\n new Error('Runlevel 0: Polyfills failed to load script ' + polyfill.name);\n };\n document.head.appendChild(script);\n }\n var polyfills = [{\n name: 'WebComponents',\n support: function support() {\n return 'customElements' in window && 'attachShadow' in Element.prototype && 'getRootNode' in Element.prototype && 'content' in document.createElement('template') && 'Promise' in window && 'from' in Array;\n },\n url: 'https://distill.pub/third-party/polyfills/webcomponents-lite.js'\n }, {\n name: 'IntersectionObserver',\n support: function support() {\n return 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window;\n },\n url: 'https://distill.pub/third-party/polyfills/intersection-observer.js'\n }];\n var Polyfills = /*#__PURE__*/function () {\n function Polyfills() {\n _classCallCheck(this, Polyfills);\n }\n return _createClass(Polyfills, null, [{\n key: \"browserSupportsAllFeatures\",\n value: function browserSupportsAllFeatures() {\n return polyfills.every(function (poly) {\n return poly.support();\n });\n }\n }, {\n key: \"load\",\n value: function load(callback) {\n // Define an intermediate callback that checks if all is loaded.\n var polyfillLoaded = function polyfillLoaded(polyfill) {\n polyfill.loaded = true;\n console.debug('Runlevel 0: Polyfill has finished loading: ' + polyfill.name);\n // console.debug(window[polyfill.name]);\n if (Polyfills.neededPolyfills.every(function (poly) {\n return poly.loaded;\n })) {\n console.debug('Runlevel 0: All required polyfills have finished loading.');\n console.debug('Runlevel 0->1.');\n window.distillRunlevel = 1;\n callback();\n }\n };\n // Add polyfill script tags\n var _iterator11 = _createForOfIteratorHelper(Polyfills.neededPolyfills),\n _step11;\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var polyfill = _step11.value;\n addPolyfill(polyfill, polyfillLoaded);\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n }, {\n key: \"neededPolyfills\",\n get: function get() {\n if (!Polyfills._neededPolyfills) {\n Polyfills._neededPolyfills = polyfills.filter(function (poly) {\n return !poly.support();\n });\n }\n return Polyfills._neededPolyfills;\n }\n }]);\n }(); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n // const marginSmall = 16;\n // const marginLarge = 3 * marginSmall;\n // const margin = marginSmall + marginLarge;\n // const gutter = marginSmall;\n // const outsetAmount = margin / 2;\n // const numCols = 4;\n // const numGutters = numCols - 1;\n // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;\n //\n // const screenwidth = 768;\n // const pageWidth = screenwidth - 2 * marginLarge;\n // const bodyWidth = pageWidth - columnWidth - gutter;\n function body(selector) {\n return \"\".concat(selector, \" {\\n grid-column: left / text;\\n }\\n \");\n }\n\n // Copyright 2018 The Distill Template Authors\n\n var T$1 = Template('d-abstract', \"\\n\\n\\n\\n\"));\n var Abstract = /*#__PURE__*/function (_T$) {\n function Abstract() {\n _classCallCheck(this, Abstract);\n return _callSuper(this, Abstract, arguments);\n }\n _inherits(Abstract, _T$);\n return _createClass(Abstract);\n }(T$1(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var T$2 = Template('d-appendix', \"\\n\\n\\n\", false);\n var Appendix = /*#__PURE__*/function (_T$2) {\n function Appendix() {\n _classCallCheck(this, Appendix);\n return _callSuper(this, Appendix, arguments);\n }\n _inherits(Appendix, _T$2);\n return _createClass(Appendix);\n }(T$2(HTMLElement)); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n // import { Template } from '../mixins/template';\n // import { Controller } from '../controller';\n var isOnlyWhitespace = /^\\s*$/;\n var Article = /*#__PURE__*/function (_HTMLElement2) {\n function Article() {\n var _this5;\n _classCallCheck(this, Article);\n _this5 = _callSuper(this, Article);\n new MutationObserver(function (mutations) {\n var _iterator12 = _createForOfIteratorHelper(mutations),\n _step12;\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var mutation = _step12.value;\n var _iterator13 = _createForOfIteratorHelper(mutation.addedNodes),\n _step13;\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var addedNode = _step13.value;\n switch (addedNode.nodeName) {\n case '#text':\n {\n // usually text nodes are only linebreaks.\n var text = addedNode.nodeValue;\n if (!isOnlyWhitespace.test(text)) {\n console.warn('Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a or

tag. We found the following text: ' + text);\n var wrapper = document.createElement('span');\n wrapper.innerHTML = addedNode.nodeValue;\n addedNode.parentNode.insertBefore(wrapper, addedNode);\n addedNode.parentNode.removeChild(addedNode);\n }\n }\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n }).observe(_this5, {\n childList: true\n });\n return _this5;\n }\n _inherits(Article, _HTMLElement2);\n return _createClass(Article, null, [{\n key: \"is\",\n get: function get() {\n return 'd-article';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement));\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {};\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n var bibtexParse = createCommonjsModule(function (module, exports) {\n /* start bibtexParse 0.0.22 */\n\n //Original work by Henrik Muehe (c) 2010\n //\n //CommonJS port by Mikola Lysenko 2013\n //\n //Port to Browser lib by ORCID / RCPETERS\n //\n //Issues:\n //no comment handling within strings\n //no string concatenation\n //no variable values yet\n //Grammar implemented here:\n //bibtex -> (string | preamble | comment | entry)*;\n //string -> '@STRING' '{' key_equals_value '}';\n //preamble -> '@PREAMBLE' '{' value '}';\n //comment -> '@COMMENT' '{' value '}';\n //entry -> '@' key '{' key ',' key_value_list '}';\n //key_value_list -> key_equals_value (',' key_equals_value)*;\n //key_equals_value -> key '=' value;\n //value -> value_quotes | value_braces | key;\n //value_quotes -> '\"' .*? '\"'; // not quite\n //value_braces -> '{' .*? '\"'; // not quite\n (function (exports) {\n function BibtexParser() {\n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',', '{', '}', ' ', '='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n this.currentEntry = \"\";\n this.setInput = function (t) {\n this.input = t;\n };\n this.getEntries = function () {\n return this.entries;\n };\n this.isWhitespace = function (s) {\n return s == ' ' || s == '\\r' || s == '\\t' || s == '\\n';\n };\n this.match = function (s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \" + this.input.substring(this.pos);\n }\n this.skipWhitespace(canCommentOut);\n };\n this.tryMatch = function (s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n }\n };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function () {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n }\n if (this.input[this.pos] == '@') {\n return true;\n }\n return false;\n };\n this.skipWhitespace = function (canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n }\n if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n }\n this.skipWhitespace(canCommentOut);\n }\n };\n this.value_braces = function () {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n }\n } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n }\n }\n if (this.input[this.pos] == '\\\\' && escaped == false) escaped = true;else escaped = false;\n this.pos++;\n }\n };\n this.value_comment = function () {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{') brcktCnt++;\n if (this.input[this.pos] == '}') brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n }\n this.pos++;\n }\n return str;\n };\n this.value_quotes = function () {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n }\n }\n if (this.input[this.pos] == '\\\\' && escaped == false) escaped = true;else escaped = false;\n this.pos++;\n }\n };\n this.single_value = function () {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\")) return k;else if (this.months.indexOf(k.toLowerCase()) >= 0) return k.toLowerCase();else throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n }\n };\n this.value = function () {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n }\n return values.join(\"\");\n };\n this.key = function () {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n } // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n }\n }\n };\n this.key_equals_value = function () {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [key, val];\n } else {\n throw \"... = value expected, equals sign missing:\" + this.input.substring(this.pos);\n }\n };\n this.key_value_list = function () {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n }\n };\n this.entry_body = function (d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key();\n this.currentEntry['entryType'] = d.substring(1);\n this.match(\",\");\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n this.directive = function () {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n this.preamble = function () {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n this.comment = function () {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n this.entry = function (d) {\n this.entry_body(d);\n };\n this.bibtex = function () {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n }\n };\n }\n exports.toJSON = function (bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function (json) {\n var out = '';\n for (var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey) out += json[i].citationKey + ', ';\n if (json[i].entry) out += json[i].entry;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0) tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n };\n })(exports);\n\n /* end bibtexParse */\n });\n\n // Copyright 2018 The Distill Template Authors\n\n function normalizeTag(string) {\n return string.replace(/[\\t\\n ]+/g, ' ').replace(/{\\\\[\"^`.'acu~Hvs]( )?([a-zA-Z])}/g, function (full, x, _char) {\n return _char;\n }).replace(/{\\\\([a-zA-Z])}/g, function (full, _char2) {\n return _char2;\n });\n }\n function parseBibtex(bibtex) {\n var bibliography = new Map();\n var parsedEntries = bibtexParse.toJSON(bibtex);\n var _iterator14 = _createForOfIteratorHelper(parsedEntries),\n _step14;\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var entry = _step14.value;\n // normalize tags; note entryTags is an object, not Map\n for (var _i = 0, _Object$entries = Object.entries(entry.entryTags); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n key = _Object$entries$_i[0],\n value = _Object$entries$_i[1];\n entry.entryTags[key.toLowerCase()] = normalizeTag(value);\n }\n entry.entryTags.type = entry.entryType;\n // add to bibliography\n bibliography.set(entry.citationKey, entry.entryTags);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n return bibliography;\n }\n function serializeFrontmatterToBibtex(frontMatter) {\n return \"@article{\".concat(frontMatter.slug, \",\\n author = {\").concat(frontMatter.bibtexAuthors, \"},\\n title = {\").concat(frontMatter.title, \"},\\n journal = {\").concat(frontMatter.journal.title, \"},\\n year = {\").concat(frontMatter.publishedYear, \"},\\n note = {\").concat(frontMatter.url, \"},\\n doi = {\").concat(frontMatter.doi, \"}\\n}\");\n }\n\n // Copyright 2018 The Distill Template Authors\n var Bibliography = /*#__PURE__*/function (_HTMLElement3) {\n function Bibliography() {\n var _this6;\n _classCallCheck(this, Bibliography);\n _this6 = _callSuper(this, Bibliography);\n\n // set up mutation observer\n var options = {\n childList: true,\n characterData: true,\n subtree: true\n };\n var observer = new MutationObserver(function (entries) {\n var _iterator15 = _createForOfIteratorHelper(entries),\n _step15;\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var entry = _step15.value;\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n _this6.parseIfPossible();\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n });\n observer.observe(_this6, options);\n return _this6;\n }\n _inherits(Bibliography, _HTMLElement3);\n return _createClass(Bibliography, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this7 = this;\n requestAnimationFrame(function () {\n _this7.parseIfPossible();\n });\n }\n }, {\n key: \"parseIfPossible\",\n value: function parseIfPossible() {\n var scriptTag = this.querySelector('script');\n if (!scriptTag) return;\n if (scriptTag.type == 'text/bibtex') {\n var newBibtex = scriptTag.textContent;\n if (this.bibtex !== newBibtex) {\n this.bibtex = newBibtex;\n var bibliography = parseBibtex(this.bibtex);\n this.notify(bibliography);\n }\n } else if (scriptTag.type == 'text/json') {\n var _bibliography = new Map(JSON.parse(scriptTag.textContent));\n this.notify(_bibliography);\n } else {\n console.warn('Unsupported bibliography script tag type: ' + scriptTag.type);\n }\n }\n }, {\n key: \"notify\",\n value: function notify(bibliography) {\n var options = {\n detail: bibliography,\n bubbles: true\n };\n var event = new CustomEvent('onBibliographyChanged', options);\n this.dispatchEvent(event);\n }\n\n /* observe 'src' attribute */\n }, {\n key: \"receivedBibtex\",\n value: function receivedBibtex(event) {\n var bibliography = parseBibtex(event.target.response);\n this.notify(bibliography);\n }\n }, {\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(name, oldValue, newValue) {\n var _this8 = this;\n var oReq = new XMLHttpRequest();\n oReq.onload = function (e) {\n return _this8.receivedBibtex(e);\n };\n oReq.onerror = function () {\n return console.warn(\"Could not load Bibtex! (tried \".concat(newValue, \")\"));\n };\n oReq.responseType = 'text';\n oReq.open('GET', newValue, true);\n oReq.send();\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-bibliography';\n }\n }, {\n key: \"observedAttributes\",\n get: function get() {\n return ['src'];\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement)); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n // import style from '../styles/d-byline.css';\n function bylineTemplate(frontMatter) {\n return \"\\n

\\n
\\n

Authors

\\n
\\n \".concat(frontMatter.authors.map(function (author, i) {\n return \"\\n \\n \".concat(author.personalURL ? \"\\n \").concat(author.name) + (i + 1 < frontMatter.authors.length ? \",\" : \"\") + \"\" : \"\\n \".concat(author.name) + (i + 1 < frontMatter.authors.length ? \",\" : \"\") + \"\", \"\\n \\n \");\n }).join(''), \"\\n
\\n
\\n
\\n

Affiliation

\\n
University of Bologna\\n
\\n
\\n
\\n

Published

\\n
March 28, 2025
\\n
\\n
\\n
\\n

Download

\\n \\n \\\"PDF\\\"\\n
\\n\");\n }\n var Byline = /*#__PURE__*/function (_HTMLElement4) {\n function Byline() {\n _classCallCheck(this, Byline);\n return _callSuper(this, Byline, arguments);\n }\n _inherits(Byline, _HTMLElement4);\n return _createClass(Byline, [{\n key: \"frontMatter\",\n set: function set(frontMatter) {\n this.innerHTML = bylineTemplate(frontMatter);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-byline';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var T$3 = Template(\"d-cite\", \"\\n\\n\\n\\n\\n
\\n \\n
\\n\");\n var Cite = /*#__PURE__*/function (_T$3) {\n /* Lifecycle */\n function Cite() {\n var _this9;\n _classCallCheck(this, Cite);\n _this9 = _callSuper(this, Cite);\n _this9._numbers = [];\n _this9._entries = [];\n return _this9;\n }\n _inherits(Cite, _T$3);\n return _createClass(Cite, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this10 = this;\n this.outerSpan = this.root.querySelector(\"#citation-\");\n this.innerSpan = this.root.querySelector(\".citation-number\");\n this.hoverBox = this.root.querySelector(\"d-hover-box\");\n window.customElements.whenDefined(\"d-hover-box\").then(function () {\n _this10.hoverBox.listen(_this10);\n });\n // in case this component got connected after values were set\n if (this.numbers) {\n this.displayNumbers(this.numbers);\n }\n if (this.entries) {\n this.displayEntries(this.entries);\n }\n }\n\n //TODO This causes an infinite loop on firefox with polyfills.\n // This is only needed for interactive editing so no priority.\n // disconnectedCallback() {\n // const options = { detail: [this, this.keys], bubbles: true };\n // const event = new CustomEvent('onCiteKeyRemoved', options);\n // document.dispatchEvent(event);\n // }\n\n /* observe 'key' attribute */\n }, {\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(name, oldValue, newValue) {\n var eventName = oldValue ? \"onCiteKeyChanged\" : \"onCiteKeyCreated\";\n var keys = newValue.split(\",\").map(function (k) {\n return k.trim();\n });\n var options = {\n detail: [this, keys],\n bubbles: true\n };\n var event = new CustomEvent(eventName, options);\n document.dispatchEvent(event);\n }\n }, {\n key: \"key\",\n get: function get() {\n return this.getAttribute(\"key\") || this.getAttribute(\"bibtex-key\");\n },\n set: function set(value) {\n this.setAttribute(\"key\", value);\n }\n }, {\n key: \"keys\",\n get: function get() {\n var result = this.key.split(\",\");\n console.log(result);\n return result;\n }\n\n /* Setters & Rendering */\n }, {\n key: \"numbers\",\n get: function get() {\n return this._numbers;\n },\n set: function set(numbers) {\n this._numbers = numbers;\n this.displayNumbers(numbers);\n }\n }, {\n key: \"displayNumbers\",\n value: function displayNumbers(numbers) {\n if (!this.innerSpan) return;\n var numberStrings = numbers.map(function (index) {\n return index == -1 ? \"?\" : index + 1 + \"\";\n });\n var textContent = \"[\" + numberStrings.join(\", \") + \"]\";\n this.innerSpan.textContent = textContent;\n }\n }, {\n key: \"entries\",\n get: function get() {\n return this._entries;\n },\n set: function set(entries) {\n this._entries = entries;\n this.displayEntries(entries);\n }\n }, {\n key: \"displayEntries\",\n value: function displayEntries(entries) {\n if (!this.hoverBox) return;\n this.hoverBox.innerHTML = \"\");\n }\n }], [{\n key: \"observedAttributes\",\n get: function get() {\n return [\"key\", \"bibtex-key\"];\n }\n }]);\n }(T$3(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var styles$1 = \"\\nd-citation-list {\\n contain: style;\\n}\\n\\nd-citation-list .references {\\n grid-column: text;\\n}\\n\\nd-citation-list .references .title {\\n font-weight: 500;\\n}\\n\";\n function renderCitationList(element, entries) {\n var dom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;\n if (entries.size > 0) {\n element.style.display = '';\n var list = element.querySelector('.references');\n if (list) {\n list.innerHTML = '';\n } else {\n var stylesTag = dom.createElement('style');\n stylesTag.innerHTML = styles$1;\n element.appendChild(stylesTag);\n var heading = dom.createElement('h3');\n heading.id = 'references';\n heading.textContent = 'References';\n element.appendChild(heading);\n list = dom.createElement('ol');\n list.id = 'references-list';\n list.className = 'references';\n element.appendChild(list);\n }\n var _iterator16 = _createForOfIteratorHelper(entries),\n _step16;\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var _step16$value = _slicedToArray(_step16.value, 2),\n key = _step16$value[0],\n entry = _step16$value[1];\n var listItem = dom.createElement('li');\n listItem.id = key;\n listItem.innerHTML = bibliography_cite(entry);\n list.appendChild(listItem);\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n } else {\n element.style.display = 'none';\n }\n }\n var CitationList = /*#__PURE__*/function (_HTMLElement5) {\n function CitationList() {\n _classCallCheck(this, CitationList);\n return _callSuper(this, CitationList, arguments);\n }\n _inherits(CitationList, _HTMLElement5);\n return _createClass(CitationList, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n if (!this.hasAttribute('distill-prerendered')) {\n this.style.display = 'none';\n }\n }\n }, {\n key: \"citations\",\n set: function set(citations) {\n renderCitationList(this, citations);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-citation-list';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement));\n var prism = createCommonjsModule(function (module) {\n /* **********************************************\r\n Begin prism-core.js\r\n ********************************************** */\n\n var _self = typeof window !== 'undefined' ? window // if in browser\n : typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self // if in worker\n : {} // if in node js\n ;\n\n /**\r\n * Prism: Lightweight, robust, elegant syntax highlighting\r\n * MIT license http://www.opensource.org/licenses/mit-license.php/\r\n * @author Lea Verou http://lea.verou.me\r\n */\n\n var Prism = function (_self) {\n // Private helper vars\n var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n var uniqueId = 0;\n var _ = {\n manual: _self.Prism && _self.Prism.manual,\n disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n util: {\n encode: function encode(tokens) {\n if (tokens instanceof Token) {\n return new Token(tokens.type, encode(tokens.content), tokens.alias);\n } else if (Array.isArray(tokens)) {\n return tokens.map(encode);\n } else {\n return tokens.replace(/&/g, '&').replace(/' + env.content + '';\n };\n\n /**\r\n * @param {string} text\r\n * @param {LinkedList} tokenList\r\n * @param {any} grammar\r\n * @param {LinkedListNode} startNode\r\n * @param {number} startPos\r\n * @param {boolean} [oneshot=false]\r\n * @param {string} [target]\r\n */\n function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {\n for (var token in grammar) {\n if (!grammar.hasOwnProperty(token) || !grammar[token]) {\n continue;\n }\n var patterns = grammar[token];\n patterns = Array.isArray(patterns) ? patterns : [patterns];\n for (var j = 0; j < patterns.length; ++j) {\n if (target && target == token + ',' + j) {\n return;\n }\n var pattern = patterns[j],\n inside = pattern.inside,\n lookbehind = !!pattern.lookbehind,\n greedy = !!pattern.greedy,\n lookbehindLength = 0,\n alias = pattern.alias;\n if (greedy && !pattern.pattern.global) {\n // Without the global flag, lastIndex won't work\n var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];\n pattern.pattern = RegExp(pattern.pattern.source, flags + 'g');\n }\n pattern = pattern.pattern || pattern;\n for (\n // iterate the token list and keep track of the current token/string position\n var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) {\n var str = currentNode.value;\n if (tokenList.length > text.length) {\n // Something went terribly wrong, ABORT, ABORT!\n return;\n }\n if (str instanceof Token) {\n continue;\n }\n var removeCount = 1; // this is the to parameter of removeBetween\n\n if (greedy && currentNode != tokenList.tail.prev) {\n pattern.lastIndex = pos;\n var match = pattern.exec(text);\n if (!match) {\n break;\n }\n var from = match.index + (lookbehind && match[1] ? match[1].length : 0);\n var to = match.index + match[0].length;\n var p = pos;\n\n // find the node that contains the match\n p += currentNode.value.length;\n while (from >= p) {\n currentNode = currentNode.next;\n p += currentNode.value.length;\n }\n // adjust pos (and p)\n p -= currentNode.value.length;\n pos = p;\n\n // the current node is a Token, then the match starts inside another Token, which is invalid\n if (currentNode.value instanceof Token) {\n continue;\n }\n\n // find the last node which is affected by this match\n for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string' && !k.prev.value.greedy); k = k.next) {\n removeCount++;\n p += k.value.length;\n }\n removeCount--;\n\n // replace with the new match\n str = text.slice(pos, p);\n match.index -= pos;\n } else {\n pattern.lastIndex = 0;\n var match = pattern.exec(str);\n }\n if (!match) {\n if (oneshot) {\n break;\n }\n continue;\n }\n if (lookbehind) {\n lookbehindLength = match[1] ? match[1].length : 0;\n }\n var from = match.index + lookbehindLength,\n match = match[0].slice(lookbehindLength),\n to = from + match.length,\n before = str.slice(0, from),\n after = str.slice(to);\n var removeFrom = currentNode.prev;\n if (before) {\n removeFrom = addAfter(tokenList, removeFrom, before);\n pos += before.length;\n }\n removeRange(tokenList, removeFrom, removeCount);\n var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);\n currentNode = addAfter(tokenList, removeFrom, wrapped);\n if (after) {\n addAfter(tokenList, currentNode, after);\n }\n if (removeCount > 1) matchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j);\n if (oneshot) break;\n }\n }\n }\n }\n\n /**\r\n * @typedef LinkedListNode\r\n * @property {T} value\r\n * @property {LinkedListNode | null} prev The previous node.\r\n * @property {LinkedListNode | null} next The next node.\r\n * @template T\r\n */\n\n /**\r\n * @template T\r\n */\n function LinkedList() {\n /** @type {LinkedListNode} */\n var head = {\n value: null,\n prev: null,\n next: null\n };\n /** @type {LinkedListNode} */\n var tail = {\n value: null,\n prev: head,\n next: null\n };\n head.next = tail;\n\n /** @type {LinkedListNode} */\n this.head = head;\n /** @type {LinkedListNode} */\n this.tail = tail;\n this.length = 0;\n }\n\n /**\r\n * Adds a new node with the given value to the list.\r\n * @param {LinkedList} list\r\n * @param {LinkedListNode} node\r\n * @param {T} value\r\n * @returns {LinkedListNode} The added node.\r\n * @template T\r\n */\n function addAfter(list, node, value) {\n // assumes that node != list.tail && values.length >= 0\n var next = node.next;\n var newNode = {\n value: value,\n prev: node,\n next: next\n };\n node.next = newNode;\n next.prev = newNode;\n list.length++;\n return newNode;\n }\n /**\r\n * Removes `count` nodes after the given node. The given node will not be removed.\r\n * @param {LinkedList} list\r\n * @param {LinkedListNode} node\r\n * @param {number} count\r\n * @template T\r\n */\n function removeRange(list, node, count) {\n var next = node.next;\n for (var i = 0; i < count && next !== list.tail; i++) {\n next = next.next;\n }\n node.next = next;\n next.prev = node;\n list.length -= i;\n }\n /**\r\n * @param {LinkedList} list\r\n * @returns {T[]}\r\n * @template T\r\n */\n function toArray(list) {\n var array = [];\n var node = list.head.next;\n while (node !== list.tail) {\n array.push(node.value);\n node = node.next;\n }\n return array;\n }\n if (!_self.document) {\n if (!_self.addEventListener) {\n // in Node.js\n return _;\n }\n if (!_.disableWorkerMessageHandler) {\n // In worker\n _self.addEventListener('message', function (evt) {\n var message = JSON.parse(evt.data),\n lang = message.language,\n code = message.code,\n immediateClose = message.immediateClose;\n _self.postMessage(_.highlight(code, _.languages[lang], lang));\n if (immediateClose) {\n _self.close();\n }\n }, false);\n }\n return _;\n }\n\n //Get current script and highlight\n var script = _.util.currentScript();\n if (script) {\n _.filename = script.src;\n if (script.hasAttribute('data-manual')) {\n _.manual = true;\n }\n }\n function highlightAutomaticallyCallback() {\n if (!_.manual) {\n _.highlightAll();\n }\n }\n if (!_.manual) {\n // If the document state is \"loading\", then we'll use DOMContentLoaded.\n // If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n // DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n // might take longer one animation frame to execute which can create a race condition where only some plugins have\n // been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n // See https://github.com/PrismJS/prism/issues/2102\n var readyState = document.readyState;\n if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n } else {\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(highlightAutomaticallyCallback);\n } else {\n window.setTimeout(highlightAutomaticallyCallback, 16);\n }\n }\n }\n return _;\n }(_self);\n if (module.exports) {\n module.exports = Prism;\n }\n\n // hack for components to work correctly in node.js\n if (typeof commonjsGlobal !== 'undefined') {\n commonjsGlobal.Prism = Prism;\n }\n\n /* **********************************************\r\n Begin prism-markup.js\r\n ********************************************** */\n\n Prism.languages.markup = {\n 'comment': //,\n 'prolog': /<\\?[\\s\\S]+?\\?>/,\n 'doctype': {\n pattern: /\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!)*\\]\\s*)?>/i,\n greedy: true\n },\n 'cdata': //i,\n 'tag': {\n pattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n greedy: true,\n inside: {\n 'tag': {\n pattern: /^<\\/?[^\\s>\\/]+/i,\n inside: {\n 'punctuation': /^<\\/?/,\n 'namespace': /^[^\\s>\\/:]+:/\n }\n },\n 'attr-value': {\n pattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n inside: {\n 'punctuation': [/^=/, {\n pattern: /^(\\s*)[\"']|[\"']$/,\n lookbehind: true\n }]\n }\n },\n 'punctuation': /\\/?>/,\n 'attr-name': {\n pattern: /[^\\s>\\/]+/,\n inside: {\n 'namespace': /^[^\\s>\\/:]+:/\n }\n }\n }\n },\n 'entity': /&#?[\\da-z]{1,8};/i\n };\n Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity'];\n\n // Plugin to make entity title show the real entity, idea by Roman Komarov\n Prism.hooks.add('wrap', function (env) {\n if (env.type === 'entity') {\n env.attributes['title'] = env.content.replace(/&/, '&');\n }\n });\n Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n /**\r\n * Adds an inlined language to markup.\r\n *\r\n * An example of an inlined language is CSS with `\\n\\n\\n\\n\"));\n var Code = /*#__PURE__*/function (_Mutating2) {\n function Code() {\n _classCallCheck(this, Code);\n return _callSuper(this, Code, arguments);\n }\n _inherits(Code, _Mutating2);\n return _createClass(Code, [{\n key: \"renderContent\",\n value: function renderContent() {\n // check if language can be highlighted\n this.languageName = this.getAttribute('language');\n if (!this.languageName) {\n console.warn('You need to provide a language attribute to your block to let us know how to highlight your code; e.g.:\\n zeros = np.zeros(shape).');\n return;\n }\n var language = prism.languages[this.languageName];\n if (language == undefined) {\n console.warn(\"Distill does not yet support highlighting your code block in \\\"\".concat(this.languageName, \"'.\"));\n return;\n }\n var content = this.textContent;\n var codeTag = this.shadowRoot.querySelector('#code-container');\n if (this.hasAttribute('block')) {\n // normalize the tab indents\n content = content.replace(/\\n/, '');\n var tabs = content.match(/\\s*/);\n content = content.replace(new RegExp('\\n' + tabs, 'g'), '\\n');\n content = content.trim();\n // wrap code block in pre tag if needed\n if (codeTag.parentNode instanceof ShadowRoot) {\n var preTag = document.createElement('pre');\n this.shadowRoot.removeChild(codeTag);\n preTag.appendChild(codeTag);\n this.shadowRoot.appendChild(preTag);\n }\n }\n codeTag.className = \"language-\".concat(this.languageName);\n codeTag.innerHTML = prism.highlight(content, language);\n }\n }]);\n }(Mutating(T$4(HTMLElement))); // Copyright 2018 The Distill Template Authors\n var T$5 = Template('d-footnote', \"\\n\\n\\n\\n
\\n \\n
\\n
\\n\\n\\n \\n\\n\\n\");\n var Footnote = /*#__PURE__*/function (_T$4) {\n function Footnote() {\n var _this11;\n _classCallCheck(this, Footnote);\n _this11 = _callSuper(this, Footnote);\n var options = {\n childList: true,\n characterData: true,\n subtree: true\n };\n var observer = new MutationObserver(_this11.notify);\n observer.observe(_this11, options);\n return _this11;\n }\n _inherits(Footnote, _T$4);\n return _createClass(Footnote, [{\n key: \"notify\",\n value: function notify() {\n var options = {\n detail: this,\n bubbles: true\n };\n var event = new CustomEvent('onFootnoteChanged', options);\n document.dispatchEvent(event);\n }\n }, {\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this12 = this;\n // listen and notify about changes to slotted content\n // const slot = this.shadowRoot.querySelector('#slot');\n // console.warn(slot.textContent);\n // slot.addEventListener('slotchange', this.notify);\n this.hoverBox = this.root.querySelector('d-hover-box');\n window.customElements.whenDefined('d-hover-box').then(function () {\n _this12.hoverBox.listen(_this12);\n });\n // create numeric ID\n Footnote.currentFootnoteId += 1;\n var IdString = Footnote.currentFootnoteId.toString();\n this.root.host.id = 'd-footnote-' + IdString;\n\n // set up hidden hover box\n var id = 'dt-fn-hover-box-' + IdString;\n this.hoverBox.id = id;\n\n // set up visible footnote marker\n var span = this.root.querySelector('#fn-');\n span.setAttribute('id', 'fn-' + IdString);\n span.setAttribute('data-hover-ref', id);\n span.textContent = IdString;\n }\n }]);\n }(T$5(HTMLElement));\n Footnote.currentFootnoteId = 0;\n\n // Copyright 2018 The Distill Template Authors\n\n var T$6 = Template('d-footnote-list', \"\\n\\n\\n

Footnotes

\\n
    \\n\", false);\n var FootnoteList = /*#__PURE__*/function (_T$5) {\n function FootnoteList() {\n _classCallCheck(this, FootnoteList);\n return _callSuper(this, FootnoteList, arguments);\n }\n _inherits(FootnoteList, _T$5);\n return _createClass(FootnoteList, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n _superPropGet(FootnoteList, \"connectedCallback\", this, 3)([]);\n this.list = this.root.querySelector('ol');\n // footnotes list is initially hidden\n this.root.style.display = 'none';\n // look through document and register existing footnotes\n // Store.subscribeTo('footnotes', (footnote) => {\n // this.renderFootnote(footnote);\n // });\n }\n\n // TODO: could optimize this to accept individual footnotes?\n }, {\n key: \"footnotes\",\n set: function set(footnotes) {\n this.list.innerHTML = '';\n if (footnotes.length) {\n // ensure footnote list is visible\n this.root.style.display = '';\n var _iterator17 = _createForOfIteratorHelper(footnotes),\n _step17;\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var footnote = _step17.value;\n // construct and append list item to show footnote\n var listItem = document.createElement('li');\n listItem.id = footnote.id + '-listing';\n listItem.innerHTML = footnote.innerHTML;\n var backlink = document.createElement('a');\n backlink.setAttribute('class', 'footnote-backlink');\n backlink.setAttribute('target', '_self');\n backlink.textContent = '[↩]';\n backlink.href = '#' + footnote.id;\n listItem.appendChild(backlink);\n this.list.appendChild(listItem);\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n } else {\n // ensure footnote list is invisible\n this.root.style.display = 'none';\n }\n }\n }]);\n }(T$6(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var T$7 = Template('d-hover-box', \"\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\");\n var HoverBox = /*#__PURE__*/function (_T$6) {\n function HoverBox() {\n _classCallCheck(this, HoverBox);\n return _callSuper(this, HoverBox);\n }\n _inherits(HoverBox, _T$6);\n return _createClass(HoverBox, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {}\n }, {\n key: \"listen\",\n value: function listen(element) {\n // console.log(element)\n this.bindDivEvents(this);\n this.bindTriggerEvents(element);\n // this.style.display = \"block\";\n }\n }, {\n key: \"bindDivEvents\",\n value: function bindDivEvents(element) {\n var _this13 = this;\n // For mice, same behavior as hovering on links\n element.addEventListener('mouseover', function () {\n if (!_this13.visible) _this13.showAtNode(element);\n _this13.stopTimeout();\n });\n element.addEventListener('mouseout', function () {\n _this13.extendTimeout(500);\n });\n // Don't trigger body touchstart event when touching within box\n element.addEventListener('touchstart', function (event) {\n event.stopPropagation();\n }, {\n passive: true\n });\n // Close box when touching outside box\n document.body.addEventListener('touchstart', function () {\n _this13.hide();\n }, {\n passive: true\n });\n }\n }, {\n key: \"bindTriggerEvents\",\n value: function bindTriggerEvents(node) {\n var _this14 = this;\n node.addEventListener('mouseover', function () {\n if (!_this14.visible) {\n _this14.showAtNode(node);\n }\n _this14.stopTimeout();\n });\n node.addEventListener('mouseout', function () {\n _this14.extendTimeout(300);\n });\n node.addEventListener('touchstart', function (event) {\n if (_this14.visible) {\n _this14.hide();\n } else {\n _this14.showAtNode(node);\n }\n // Don't trigger body touchstart event when touching link\n event.stopPropagation();\n }, {\n passive: true\n });\n }\n }, {\n key: \"show\",\n value: function show(position) {\n this.visible = true;\n this.style.display = 'block';\n // 10px extra offset from element\n this.style.top = Math.round(position[1] + 10) + 'px';\n }\n }, {\n key: \"showAtNode\",\n value: function showAtNode(node) {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop\n var bbox = node.getBoundingClientRect();\n this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.visible = false;\n this.style.display = 'none';\n this.stopTimeout();\n }\n }, {\n key: \"stopTimeout\",\n value: function stopTimeout() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n }, {\n key: \"extendTimeout\",\n value: function extendTimeout(time) {\n var _this15 = this;\n this.stopTimeout();\n this.timeout = setTimeout(function () {\n _this15.hide();\n }, time);\n }\n }]);\n }(T$7(HTMLElement)); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n var Title = /*#__PURE__*/function (_HTMLElement6) {\n function Title() {\n _classCallCheck(this, Title);\n return _callSuper(this, Title, arguments);\n }\n _inherits(Title, _HTMLElement6);\n return _createClass(Title, null, [{\n key: \"is\",\n get: function get() {\n return 'd-title';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var T$8 = Template('d-references', \"\\n\\n\", false);\n var References = /*#__PURE__*/function (_T$7) {\n function References() {\n _classCallCheck(this, References);\n return _callSuper(this, References, arguments);\n }\n _inherits(References, _T$7);\n return _createClass(References);\n }(T$8(HTMLElement)); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n var TOC = /*#__PURE__*/function (_HTMLElement7) {\n function TOC() {\n _classCallCheck(this, TOC);\n return _callSuper(this, TOC, arguments);\n }\n _inherits(TOC, _HTMLElement7);\n return _createClass(TOC, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this16 = this;\n if (!this.getAttribute('prerendered')) {\n window.onload = function () {\n var article = document.querySelector('d-article');\n var headings = article.querySelectorAll('h2, h3');\n renderTOC(_this16, headings);\n };\n }\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-toc';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement));\n function renderTOC(element, headings) {\n var ToC = \"\\n \\n \\n

    Table of contents

    \\n
      \";\n var _iterator18 = _createForOfIteratorHelper(headings),\n _step18;\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var el = _step18.value;\n // should element be included in TOC?\n var isInTitle = el.parentElement.tagName == 'D-TITLE';\n var isException = el.getAttribute('no-toc');\n if (isInTitle || isException) continue;\n // create TOC entry\n var _title = el.textContent;\n var link = '#' + el.getAttribute('id');\n var newLine = '
    • ' + '' + _title + '' + '
    • ';\n if (el.tagName == 'H3') {\n newLine = '
        ' + newLine + '
      ';\n } else {\n newLine += '
      ';\n }\n ToC += newLine;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n ToC += '
    ';\n element.innerHTML = ToC;\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // Figure\n //\n // d-figure provides a state-machine of visibility events:\n //\n // scroll out of view\n // +----------------+\n // *do work here* | |\n // +----------------+ +-+---------+ +-v---------+\n // | ready +----> onscreen | | offscreen |\n // +----------------+ +---------^-+ +---------+-+\n // | |\n // +----------------+\n // scroll into view\n //\n var Figure = /*#__PURE__*/function (_HTMLElement8) {\n function Figure() {\n var _this17;\n _classCallCheck(this, Figure);\n _this17 = _callSuper(this, Figure);\n // debugger\n _this17._ready = false;\n _this17._onscreen = false;\n _this17._offscreen = true;\n return _this17;\n }\n _inherits(Figure, _HTMLElement8);\n return _createClass(Figure, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n this.loadsWhileScrolling = this.hasAttribute('loadsWhileScrolling');\n Figure.marginObserver.observe(this);\n Figure.directObserver.observe(this);\n }\n }, {\n key: \"disconnectedCallback\",\n value: function disconnectedCallback() {\n Figure.marginObserver.unobserve(this);\n Figure.directObserver.unobserve(this);\n }\n\n // We use two separate observers:\n // One with an extra 1000px margin to warn if the viewpoint gets close,\n // And one for the actual on/off screen events\n }, {\n key: \"addEventListener\",\n value:\n // Notify listeners that registered late, too:\n\n function addEventListener(eventName, callback) {\n _superPropGet(Figure, \"addEventListener\", this, 3)([eventName, callback]);\n // if we had already dispatched something while presumingly no one was listening, we do so again\n // debugger\n if (eventName === 'ready') {\n if (Figure.readyQueue.indexOf(this) !== -1) {\n this._ready = false;\n Figure.runReadyQueue();\n }\n }\n if (eventName === 'onscreen') {\n this.onscreen();\n }\n }\n\n // Custom Events\n }, {\n key: \"ready\",\n value: function ready() {\n // debugger\n this._ready = true;\n Figure.marginObserver.unobserve(this);\n var event = new CustomEvent('ready');\n this.dispatchEvent(event);\n }\n }, {\n key: \"onscreen\",\n value: function onscreen() {\n this._onscreen = true;\n this._offscreen = false;\n var event = new CustomEvent('onscreen');\n this.dispatchEvent(event);\n }\n }, {\n key: \"offscreen\",\n value: function offscreen() {\n this._onscreen = false;\n this._offscreen = true;\n var event = new CustomEvent('offscreen');\n this.dispatchEvent(event);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-figure';\n }\n }, {\n key: \"readyQueue\",\n get: function get() {\n if (!Figure._readyQueue) {\n Figure._readyQueue = [];\n }\n return Figure._readyQueue;\n }\n }, {\n key: \"addToReadyQueue\",\n value: function addToReadyQueue(figure) {\n if (Figure.readyQueue.indexOf(figure) === -1) {\n Figure.readyQueue.push(figure);\n Figure.runReadyQueue();\n }\n }\n }, {\n key: \"runReadyQueue\",\n value: function runReadyQueue() {\n // console.log(\"Checking to run readyQueue, length: \" + Figure.readyQueue.length + \", scrolling: \" + Figure.isScrolling);\n // if (Figure.isScrolling) return;\n // console.log(\"Running ready Queue\");\n var figure = Figure.readyQueue.sort(function (a, b) {\n return a._seenOnScreen - b._seenOnScreen;\n }).filter(function (figure) {\n return !figure._ready;\n }).pop();\n if (figure) {\n figure.ready();\n requestAnimationFrame(Figure.runReadyQueue);\n }\n }\n }, {\n key: \"marginObserver\",\n get: function get() {\n if (!Figure._marginObserver) {\n // if (!('IntersectionObserver' in window)) {\n // throw new Error('no interscetionobbserver!');\n // }\n var viewportHeight = window.innerHeight;\n var margin = Math.floor(2 * viewportHeight);\n var options = {\n rootMargin: margin + 'px 0px ' + margin + 'px 0px',\n threshold: 0.01\n };\n var callback = Figure.didObserveMarginIntersection;\n var observer = new IntersectionObserver(callback, options);\n Figure._marginObserver = observer;\n }\n return Figure._marginObserver;\n }\n }, {\n key: \"didObserveMarginIntersection\",\n value: function didObserveMarginIntersection(entries) {\n var _iterator19 = _createForOfIteratorHelper(entries),\n _step19;\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var entry = _step19.value;\n var figure = entry.target;\n if (entry.isIntersecting && !figure._ready) {\n Figure.addToReadyQueue(figure);\n }\n }\n } catch (err) {\n _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n }\n }, {\n key: \"directObserver\",\n get: function get() {\n if (!Figure._directObserver) {\n Figure._directObserver = new IntersectionObserver(Figure.didObserveDirectIntersection, {\n rootMargin: '0px',\n threshold: [0, 1.0]\n });\n }\n return Figure._directObserver;\n }\n }, {\n key: \"didObserveDirectIntersection\",\n value: function didObserveDirectIntersection(entries) {\n var _iterator20 = _createForOfIteratorHelper(entries),\n _step20;\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var entry = _step20.value;\n var figure = entry.target;\n if (entry.isIntersecting) {\n figure._seenOnScreen = new Date();\n // if (!figure._ready) { figure.ready(); }\n if (figure._offscreen) {\n figure.onscreen();\n }\n } else {\n if (figure._onscreen) {\n figure.offscreen();\n }\n }\n }\n } catch (err) {\n _iterator20.e(err);\n } finally {\n _iterator20.f();\n }\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement));\n if (typeof window !== 'undefined') {\n Figure.isScrolling = false;\n var timeout;\n var resetTimer = function resetTimer() {\n Figure.isScrolling = true;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n Figure.isScrolling = false;\n Figure.runReadyQueue();\n }, 500);\n };\n window.addEventListener('scroll', resetTimer, true);\n }\n\n // Copyright 2018 The Distill Template Authors\n\n // This overlay is not secure.\n // It is only meant as a social deterrent.\n\n var productionHostname = 'distill.pub';\n var T$9 = Template('d-interstitial', \"\\n\\n\\n
    \\n
    \\n

    This article is in review.

    \\n

    Do not share this URL or the contents of this article. Thank you!

    \\n \\n

    Enter the password we shared with you as part of the review process to view the article.

    \\n
    \\n
    \\n\");\n var Interstitial = /*#__PURE__*/function (_T$8) {\n function Interstitial() {\n _classCallCheck(this, Interstitial);\n return _callSuper(this, Interstitial, arguments);\n }\n _inherits(Interstitial, _T$8);\n return _createClass(Interstitial, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this18 = this;\n if (this.shouldRemoveSelf()) {\n this.parentElement.removeChild(this);\n } else {\n var passwordInput = this.root.querySelector('#interstitial-password-input');\n passwordInput.oninput = function (event) {\n return _this18.passwordChanged(event);\n };\n }\n }\n }, {\n key: \"passwordChanged\",\n value: function passwordChanged(event) {\n var entered = event.target.value;\n if (entered === this.password) {\n console.log('Correct password entered.');\n this.parentElement.removeChild(this);\n if (typeof Storage !== 'undefined') {\n console.log('Saved that correct password was entered.');\n localStorage.setItem(this.localStorageIdentifier(), 'true');\n }\n }\n }\n }, {\n key: \"shouldRemoveSelf\",\n value: function shouldRemoveSelf() {\n // should never be visible in production\n if (window && window.location.hostname === productionHostname) {\n console.warn('Interstitial found on production, hiding it.');\n return true;\n }\n // should only have to enter password once\n if (typeof Storage !== 'undefined') {\n if (localStorage.getItem(this.localStorageIdentifier()) === 'true') {\n console.log('Loaded that correct password was entered before; skipping interstitial.');\n return true;\n }\n }\n // otherwise, leave visible\n return false;\n }\n }, {\n key: \"localStorageIdentifier\",\n value: function localStorageIdentifier() {\n var prefix = 'distill-drafts';\n var suffix = 'interstitial-password-correct';\n return prefix + (window ? window.location.pathname : '-') + suffix;\n }\n }]);\n }(T$9(HTMLElement));\n function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n function bisector(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;\n }\n return lo;\n },\n right: function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n function ascendingComparator(f) {\n return function (d, x) {\n return ascending(f(d), x);\n };\n }\n var ascendingBisect = bisector(ascending);\n var bisectRight = ascendingBisect.right;\n function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n while (++i < n) {\n range[i] = start + i * step;\n }\n return range;\n }\n var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n if (reverse) ticks.reverse();\n return ticks;\n }\n function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n }\n function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;else if (error >= e5) step1 *= 5;else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n }\n function initRange(domain, range) {\n switch (arguments.length) {\n case 0:\n break;\n case 1:\n this.range(domain);\n break;\n default:\n this.range(range).domain(domain);\n break;\n }\n return this;\n }\n function define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n }\n function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n }\n function Color() {}\n var _darker = 0.7;\n var _brighter = 1 / _darker;\n var reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n define(Color, color, {\n copy: function copy(channels) {\n return Object.assign(new this.constructor(), this, channels);\n },\n displayable: function displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex,\n // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n });\n function color_formatHex() {\n return this.rgb().formatHex();\n }\n function color_formatHsl() {\n return hslConvert(this).formatHsl();\n }\n function color_formatRgb() {\n return this.rgb().formatRgb();\n }\n function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb(m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, (m & 0xf) << 4 | m & 0xf, 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba(m >> 12 & 0xf | m >> 8 & 0xf0, m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, ((m & 0xf) << 4 | m & 0xf) / 0xff) // #f000\n : null // invalid hex\n ) : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0) : null;\n }\n function rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n }\n function rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n }\n function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb();\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n }\n function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n }\n function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n }\n define(Rgb, rgb, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function rgb() {\n return this;\n },\n displayable: function displayable() {\n return -0.5 <= this.r && this.r < 255.5 && -0.5 <= this.g && this.g < 255.5 && -0.5 <= this.b && this.b < 255.5 && 0 <= this.opacity && this.opacity <= 1;\n },\n hex: rgb_formatHex,\n // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n }));\n function rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n }\n function rgb_formatRgb() {\n var a = this.opacity;\n a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \" + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \" + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n function hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n }\n function hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;else if (l <= 0 || l >= 1) h = s = NaN;else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n }\n function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl();\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;else if (g === max) h = (b - r) / s + 2;else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n }\n function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n }\n function Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n define(Hsl, hsl, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);\n },\n displayable: function displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;\n },\n formatHsl: function formatHsl() {\n var a = this.opacity;\n a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\") + (this.h || 0) + \", \" + (this.s || 0) * 100 + \"%, \" + (this.l || 0) * 100 + \"%\" + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n }));\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;\n }\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n // https://observablehq.com/@mbostock/lab-and-rgb\n var K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n function labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn),\n x,\n z;\n if (r === g && g === b) x = z = y;else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n }\n function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n }\n function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n }\n define(Lab, lab, extend(Color, {\n brighter: function brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(lrgb2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z), lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), lrgb2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z), this.opacity);\n }\n }));\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n function lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n function rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n function hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n }\n function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n }\n function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n }\n function hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n define(Hcl, hcl, extend(Color, {\n brighter: function brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function rgb() {\n return hcl2lab(this).rgb();\n }\n }));\n var A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n function cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),\n // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n }\n function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n }\n function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n define(Cubehelix, cubehelix, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);\n }\n }));\n function constant(x) {\n return function () {\n return x;\n };\n }\n function linear(a, d) {\n return function (t) {\n return a + t * d;\n };\n }\n function exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {\n return Math.pow(a + t * b, y);\n };\n }\n function gamma(y) {\n return (y = +y) === 1 ? nogamma : function (a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n }\n function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n }\n var rgb$1 = function rgbGamma(y) {\n var color = gamma(y);\n function rgb$1(start, end) {\n var r = color((start = rgb(start)).r, (end = rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n rgb$1.gamma = rgbGamma;\n return rgb$1;\n }(1);\n function numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function (t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n }\n function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n }\n function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n return function (t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n }\n function date(a, b) {\n var d = new Date();\n return a = +a, b = +b, function (t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n }\n function interpolateNumber(a, b) {\n return a = +a, b = +b, function (t) {\n return a * (1 - t) + b * t;\n };\n }\n function object(a, b) {\n var i = {},\n c = {},\n k;\n if (a === null || _typeof(a) !== \"object\") a = {};\n if (b === null || _typeof(b) !== \"object\") b = {};\n for (k in b) {\n if (k in a) {\n i[k] = interpolate(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n return function (t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n function zero(b) {\n return function () {\n return b;\n };\n }\n function one(b) {\n return function (t) {\n return b(t) + \"\";\n };\n }\n function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0,\n // scan index for next number in b\n am,\n // current match in a\n bm,\n // current match in b\n bs,\n // string preceding current number in b, if any\n i = -1,\n // index in s\n s = [],\n // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({\n i: i,\n x: interpolateNumber(am, bm)\n });\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n function interpolate(a, b) {\n var t = _typeof(b),\n c;\n return b == null || t === \"boolean\" ? constant(b) : (t === \"number\" ? interpolateNumber : t === \"string\" ? (c = color(b)) ? (b = c, rgb$1) : string : b instanceof color ? rgb$1 : b instanceof Date ? date : isNumberArray(b) ? numberArray : Array.isArray(b) ? genericArray : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object : interpolateNumber)(a, b);\n }\n function interpolateRound(a, b) {\n return a = +a, b = +b, function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n }\n function constant$1(x) {\n return function () {\n return x;\n };\n }\n function number(x) {\n return +x;\n }\n var unit = [0, 1];\n function identity(x) {\n return x;\n }\n function normalize(a, b) {\n return (b -= a = +a) ? function (x) {\n return (x - a) / b;\n } : constant$1(isNaN(b) ? NaN : 0.5);\n }\n function clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function (x) {\n return Math.max(a, Math.min(b, x));\n };\n }\n\n // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n function bimap(domain, range, interpolate) {\n var d0 = domain[0],\n d1 = domain[1],\n r0 = range[0],\n r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function (x) {\n return r0(d0(x));\n };\n }\n function polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n return function (x) {\n var i = bisectRight(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n }\n function copy(source, target) {\n return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());\n }\n function transformer() {\n var domain = unit,\n range = unit,\n interpolate$1 = interpolate,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));\n }\n scale.invert = function (y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n scale.domain = function (_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n scale.range = function (_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n scale.rangeRound = function (_) {\n return range = Array.from(_), interpolate$1 = interpolateRound, rescale();\n };\n scale.clamp = function (_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n scale.interpolate = function (_) {\n return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;\n };\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n return function (t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n }\n function continuous() {\n return transformer()(identity, identity);\n }\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i,\n coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];\n }\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n function formatGroup(grouping, thousands) {\n return function (value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n return t.reverse().join(thousands);\n };\n }\n function formatNumerals(numerals) {\n return function (value) {\n return value.replace(/[0-9]/g, function (i) {\n return numerals[+i];\n });\n };\n }\n\n // [[fill]align][sign][symbol][0][width][,][.precision][~][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n }\n formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\n function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n }\n FormatSpecifier.prototype.toString = function () {\n return this.fill + this.align + this.sign + this.symbol + (this.zero ? \"0\" : \"\") + (this.width === undefined ? \"\" : Math.max(1, this.width | 0)) + (this.comma ? \",\" : \"\") + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0)) + (this.trim ? \"~\" : \"\") + this.type;\n };\n\n // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\":\n i0 = i1 = i;\n break;\n case \"0\":\n if (i0 === 0) i0 = i;\n i1 = i;\n break;\n default:\n if (!+s[i]) break out;\n if (i0 > 0) i0 = 0;\n break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n }\n var prefixExponent;\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join(\"0\") : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i) : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n }\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n var formatTypes = {\n \"%\": function _(x, p) {\n return (x * 100).toFixed(p);\n },\n \"b\": function b(x) {\n return Math.round(x).toString(2);\n },\n \"c\": function c(x) {\n return x + \"\";\n },\n \"d\": function d(x) {\n return Math.round(x).toString(10);\n },\n \"e\": function e(x, p) {\n return x.toExponential(p);\n },\n \"f\": function f(x, p) {\n return x.toFixed(p);\n },\n \"g\": function g(x, p) {\n return x.toPrecision(p);\n },\n \"o\": function o(x) {\n return Math.round(x).toString(8);\n },\n \"p\": function p(x, _p) {\n return formatRounded(x * 100, _p);\n },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function X(x) {\n return Math.round(x).toString(16).toUpperCase();\n },\n \"x\": function x(_x) {\n return Math.round(_x).toString(16);\n }\n };\n function identity$1(x) {\n return x;\n }\n var map = Array.prototype.map,\n prefixes = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"];\n function formatLocale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || fill === \"0\" && align === \"=\") zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i,\n n,\n c;\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? sign === \"(\" ? sign : minus : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\":\n value = valuePrefix + value + valueSuffix + padding;\n break;\n case \"=\":\n value = valuePrefix + padding + value + valueSuffix;\n break;\n case \"^\":\n value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n break;\n default:\n value = padding + valuePrefix + value + valueSuffix;\n break;\n }\n return numerals(value);\n }\n format.toString = function () {\n return specifier + \"\";\n };\n return format;\n }\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function (value) {\n return f(k * value) + prefix;\n };\n }\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n }\n var locale;\n var format;\n var formatPrefix;\n defaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n });\n function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n }\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n }\n function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\":\n {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\":\n {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\":\n {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n }\n function linearish(scale) {\n var domain = scale.domain;\n scale.ticks = function (count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n scale.tickFormat = function (count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n scale.nice = function (count) {\n if (count == null) count = 10;\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n step = tickIncrement(start, stop, count);\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n return scale;\n };\n return scale;\n }\n function linear$1() {\n var scale = continuous();\n scale.copy = function () {\n return copy(scale, linear$1());\n };\n initRange.apply(scale, arguments);\n return linearish(scale);\n }\n var t0$1 = new Date(),\n t1$1 = new Date();\n function newInterval(floori, offseti, count, field) {\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date() : new Date(+date)), date;\n }\n interval.floor = function (date) {\n return floori(date = new Date(+date)), date;\n };\n interval.ceil = function (date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n interval.round = function (date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n interval.offset = function (date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n interval.range = function (start, stop, step) {\n var range = [],\n previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start); while (previous < start && start < stop);\n return range;\n };\n interval.filter = function (test) {\n return newInterval(function (date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function (date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n if (count) {\n interval.count = function (start, end) {\n t0$1.setTime(+start), t1$1.setTime(+end);\n floori(t0$1), floori(t1$1);\n return Math.floor(count(t0$1, t1$1));\n };\n interval.every = function (step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null : !(step > 1) ? interval : interval.filter(field ? function (d) {\n return field(d) % step === 0;\n } : function (d) {\n return interval.count(0, d) % step === 0;\n });\n };\n }\n return interval;\n }\n var millisecond = newInterval(function () {\n // noop\n }, function (date, step) {\n date.setTime(+date + step);\n }, function (start, end) {\n return end - start;\n });\n\n // An optimized implementation for this simple case.\n millisecond.every = function (k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function (date) {\n date.setTime(Math.floor(date / k) * k);\n }, function (date, step) {\n date.setTime(+date + step * k);\n }, function (start, end) {\n return (end - start) / k;\n });\n };\n var durationSecond = 1e3;\n var durationMinute = 6e4;\n var durationHour = 36e5;\n var durationDay = 864e5;\n var durationWeek = 6048e5;\n var second = newInterval(function (date) {\n date.setTime(date - date.getMilliseconds());\n }, function (date, step) {\n date.setTime(+date + step * durationSecond);\n }, function (start, end) {\n return (end - start) / durationSecond;\n }, function (date) {\n return date.getUTCSeconds();\n });\n var minute = newInterval(function (date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n }, function (date, step) {\n date.setTime(+date + step * durationMinute);\n }, function (start, end) {\n return (end - start) / durationMinute;\n }, function (date) {\n return date.getMinutes();\n });\n var hour = newInterval(function (date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n }, function (date, step) {\n date.setTime(+date + step * durationHour);\n }, function (start, end) {\n return (end - start) / durationHour;\n }, function (date) {\n return date.getHours();\n });\n var day = newInterval(function (date) {\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setDate(date.getDate() + step);\n }, function (start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n }, function (date) {\n return date.getDate() - 1;\n });\n function weekday(i) {\n return newInterval(function (date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function (start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n }\n var sunday = weekday(0);\n var monday = weekday(1);\n var tuesday = weekday(2);\n var wednesday = weekday(3);\n var thursday = weekday(4);\n var friday = weekday(5);\n var saturday = weekday(6);\n var month = newInterval(function (date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setMonth(date.getMonth() + step);\n }, function (start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n }, function (date) {\n return date.getMonth();\n });\n var year = newInterval(function (date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function (start, end) {\n return end.getFullYear() - start.getFullYear();\n }, function (date) {\n return date.getFullYear();\n });\n\n // An optimized implementation for this simple case.\n year.every = function (k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function (date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n };\n var utcMinute = newInterval(function (date) {\n date.setUTCSeconds(0, 0);\n }, function (date, step) {\n date.setTime(+date + step * durationMinute);\n }, function (start, end) {\n return (end - start) / durationMinute;\n }, function (date) {\n return date.getUTCMinutes();\n });\n var utcHour = newInterval(function (date) {\n date.setUTCMinutes(0, 0, 0);\n }, function (date, step) {\n date.setTime(+date + step * durationHour);\n }, function (start, end) {\n return (end - start) / durationHour;\n }, function (date) {\n return date.getUTCHours();\n });\n var utcDay = newInterval(function (date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function (start, end) {\n return (end - start) / durationDay;\n }, function (date) {\n return date.getUTCDate() - 1;\n });\n function utcWeekday(i) {\n return newInterval(function (date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function (start, end) {\n return (end - start) / durationWeek;\n });\n }\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n var utcTuesday = utcWeekday(2);\n var utcWednesday = utcWeekday(3);\n var utcThursday = utcWeekday(4);\n var utcFriday = utcWeekday(5);\n var utcSaturday = utcWeekday(6);\n var utcMonth = newInterval(function (date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function (start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n }, function (date) {\n return date.getUTCMonth();\n });\n var utcYear = newInterval(function (date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function (start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n }, function (date) {\n return date.getUTCFullYear();\n });\n\n // An optimized implementation for this simple case.\n utcYear.every = function (k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function (date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function (date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n };\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n function newDate(y, m, d) {\n return {\n y: y,\n m: m,\n d: d,\n H: 0,\n M: 0,\n S: 0,\n L: 0\n };\n }\n function formatLocale$1(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n function newFormat(specifier, formats) {\n return function (date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n if (!(date instanceof Date)) date = new Date(+date);\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n function newParse(specifier, Z) {\n return function (string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week,\n day$1;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();\n week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();\n week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);\n week = day.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day$1 = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n return {\n format: function format(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function () {\n return specifier;\n };\n return f;\n },\n parse: function parse(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function () {\n return specifier;\n };\n return p;\n },\n utcFormat: function utcFormat(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function () {\n return specifier;\n };\n return f;\n },\n utcParse: function utcParse(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function () {\n return specifier;\n };\n return p;\n }\n };\n }\n var pads = {\n \"-\": \"\",\n \"_\": \" \",\n \"0\": \"0\"\n },\n numberRe = /^\\s*\\d+/,\n // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n function formatLookup(names) {\n var map = {},\n i = -1,\n n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n }\n function parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n function parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n }\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n function parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n }\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n function parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n }\n function parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n }\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n function parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n }\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n function parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n }\n function parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n }\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n function formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n }\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n function formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n }\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d) - 1, d), p, 2);\n }\n function formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = day >= 4 || day === 0 ? thursday(d) : thursday.ceil(d);\n return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n }\n function formatWeekdayNumberSunday(d) {\n return d.getDay();\n }\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d) - 1, d), p, 2);\n }\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\")) + pad(z / 60 | 0, \"0\", 2) + pad(z % 60, \"0\", 2);\n }\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n function formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n }\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n function formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n }\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n }\n function formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = day >= 4 || day === 0 ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n }\n function formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n }\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n }\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n function formatUTCZone() {\n return \"+0000\";\n }\n function formatLiteralPercent() {\n return \"%\";\n }\n function formatUnixTimestamp(d) {\n return +d;\n }\n function formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n }\n var locale$1;\n var timeFormat;\n var timeParse;\n var utcFormat;\n var utcParse;\n defaultLocale$1({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n });\n function defaultLocale$1(definition) {\n locale$1 = formatLocale$1(definition);\n timeFormat = locale$1.format;\n timeParse = locale$1.parse;\n utcFormat = locale$1.utcFormat;\n utcParse = locale$1.utcParse;\n return locale$1;\n }\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n function formatIsoNative(date) {\n return date.toISOString();\n }\n var formatIso = Date.prototype.toISOString ? formatIsoNative : utcFormat(isoSpecifier);\n function parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n }\n var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\") ? parseIsoNative : utcParse(isoSpecifier);\n var noop = {\n value: function value() {}\n };\n function dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || t in _ || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n }\n function Dispatch(_) {\n this._ = _;\n }\n function parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function (t) {\n var name = \"\",\n i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {\n type: t,\n name: name\n };\n });\n }\n Dispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function on(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n return this;\n },\n copy: function copy() {\n var copy = {},\n _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function call(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function apply(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n };\n function get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n }\n function set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({\n name: name,\n value: callback\n });\n return type;\n }\n var xhtml = \"http://www.w3.org/1999/xhtml\";\n var namespaces = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n function namespace(name) {\n var prefix = name += \"\",\n i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {\n space: namespaces[prefix],\n local: name\n } : name;\n }\n function creatorInherit(name) {\n return function () {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name);\n };\n }\n function creatorFixed(fullname) {\n return function () {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n }\n function creator(name) {\n var fullname = namespace(name);\n return (fullname.local ? creatorFixed : creatorInherit)(fullname);\n }\n function none() {}\n function selector(selector) {\n return selector == null ? none : function () {\n return this.querySelector(selector);\n };\n }\n function selection_select(select) {\n if (typeof select !== \"function\") select = selector(select);\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n return new Selection(subgroups, this._parents);\n }\n function empty() {\n return [];\n }\n function selectorAll(selector) {\n return selector == null ? empty : function () {\n return this.querySelectorAll(selector);\n };\n }\n function selection_selectAll(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n return new Selection(subgroups, parents);\n }\n function matcher(selector) {\n return function () {\n return this.matches(selector);\n };\n }\n function selection_filter(match) {\n if (typeof match !== \"function\") match = matcher(match);\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n return new Selection(subgroups, this._parents);\n }\n function sparse(update) {\n return new Array(update.length);\n }\n function selection_enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n }\n function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n }\n EnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function appendChild(child) {\n return this._parent.insertBefore(child, this._next);\n },\n insertBefore: function insertBefore(child, next) {\n return this._parent.insertBefore(child, next);\n },\n querySelector: function querySelector(selector) {\n return this._parent.querySelector(selector);\n },\n querySelectorAll: function querySelectorAll(selector) {\n return this._parent.querySelectorAll(selector);\n }\n };\n function constant$2(x) {\n return function () {\n return x;\n };\n }\n var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n function bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n }\n function bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && nodeByKeyValue[keyValues[i]] === node) {\n exit[i] = node;\n }\n }\n }\n function selection_data(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function (d) {\n data[++j] = d;\n });\n return data;\n }\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n if (typeof value !== \"function\") value = constant$2(value);\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n }\n function selection_exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n }\n function selection_join(onenter, onupdate, onexit) {\n var enter = this.enter(),\n update = this,\n exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove();else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n }\n function selection_merge(selection) {\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n return new Selection(merges, this._parents);\n }\n function selection_order() {\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n }\n function selection_sort(compare) {\n if (!compare) compare = ascending$1;\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n return new Selection(sortgroups, this._parents).order();\n }\n function ascending$1(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n function selection_call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n }\n function selection_nodes() {\n var nodes = new Array(this.size()),\n i = -1;\n this.each(function () {\n nodes[++i] = this;\n });\n return nodes;\n }\n function selection_node() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n }\n function selection_size() {\n var size = 0;\n this.each(function () {\n ++size;\n });\n return size;\n }\n function selection_empty() {\n return !this.node();\n }\n function selection_each(callback) {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n return this;\n }\n function attrRemove(name) {\n return function () {\n this.removeAttribute(name);\n };\n }\n function attrRemoveNS(fullname) {\n return function () {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n }\n function attrConstant(name, value) {\n return function () {\n this.setAttribute(name, value);\n };\n }\n function attrConstantNS(fullname, value) {\n return function () {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n }\n function attrFunction(name, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);else this.setAttribute(name, v);\n };\n }\n function attrFunctionNS(fullname, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n }\n function selection_attr(name, value) {\n var fullname = namespace(name);\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);\n }\n return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === \"function\" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value));\n }\n function defaultView(node) {\n return node.ownerDocument && node.ownerDocument.defaultView // node is a Node\n || node.document && node // node is a Window\n || node.defaultView; // node is a Document\n }\n function styleRemove(name) {\n return function () {\n this.style.removeProperty(name);\n };\n }\n function styleConstant(name, value, priority) {\n return function () {\n this.style.setProperty(name, value, priority);\n };\n }\n function styleFunction(name, value, priority) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority);\n };\n }\n function selection_style(name, value, priority) {\n return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === \"function\" ? styleFunction : styleConstant)(name, value, priority == null ? \"\" : priority)) : styleValue(this.node(), name);\n }\n function styleValue(node, name) {\n return node.style.getPropertyValue(name) || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n function propertyRemove(name) {\n return function () {\n delete this[name];\n };\n }\n function propertyConstant(name, value) {\n return function () {\n this[name] = value;\n };\n }\n function propertyFunction(name, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];else this[name] = v;\n };\n }\n function selection_property(name, value) {\n return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === \"function\" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name];\n }\n function classArray(string) {\n return string.trim().split(/^|\\s+/);\n }\n function classList(node) {\n return node.classList || new ClassList(node);\n }\n function ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n }\n ClassList.prototype = {\n add: function add(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function remove(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function contains(name) {\n return this._names.indexOf(name) >= 0;\n }\n };\n function classedAdd(node, names) {\n var list = classList(node),\n i = -1,\n n = names.length;\n while (++i < n) list.add(names[i]);\n }\n function classedRemove(node, names) {\n var list = classList(node),\n i = -1,\n n = names.length;\n while (++i < n) list.remove(names[i]);\n }\n function classedTrue(names) {\n return function () {\n classedAdd(this, names);\n };\n }\n function classedFalse(names) {\n return function () {\n classedRemove(this, names);\n };\n }\n function classedFunction(names, value) {\n return function () {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n }\n function selection_classed(name, value) {\n var names = classArray(name + \"\");\n if (arguments.length < 2) {\n var list = classList(this.node()),\n i = -1,\n n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n return this.each((typeof value === \"function\" ? classedFunction : value ? classedTrue : classedFalse)(names, value));\n }\n function textRemove() {\n this.textContent = \"\";\n }\n function textConstant(value) {\n return function () {\n this.textContent = value;\n };\n }\n function textFunction(value) {\n return function () {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n }\n function selection_text(value) {\n return arguments.length ? this.each(value == null ? textRemove : (typeof value === \"function\" ? textFunction : textConstant)(value)) : this.node().textContent;\n }\n function htmlRemove() {\n this.innerHTML = \"\";\n }\n function htmlConstant(value) {\n return function () {\n this.innerHTML = value;\n };\n }\n function htmlFunction(value) {\n return function () {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n }\n function selection_html(value) {\n return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === \"function\" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML;\n }\n function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n }\n function selection_raise() {\n return this.each(raise);\n }\n function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n }\n function selection_lower() {\n return this.each(lower);\n }\n function selection_append(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function () {\n return this.appendChild(create.apply(this, arguments));\n });\n }\n function constantNull() {\n return null;\n }\n function selection_insert(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function () {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n }\n function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n function selection_remove() {\n return this.each(remove);\n }\n function selection_cloneShallow() {\n var clone = this.cloneNode(false),\n parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n }\n function selection_cloneDeep() {\n var clone = this.cloneNode(true),\n parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n }\n function selection_clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n }\n function selection_datum(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.node().__data__;\n }\n var filterEvents = {};\n var event = null;\n if (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n };\n }\n }\n function filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function (event) {\n var related = event.relatedTarget;\n if (!related || related !== this && !(related.compareDocumentPosition(this) & 8)) {\n listener.call(this, event);\n }\n };\n }\n function contextListener(listener, index, group) {\n return function (event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n }\n function parseTypenames$1(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function (t) {\n var name = \"\",\n i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {\n type: t,\n name: name\n };\n });\n }\n function onRemove(typename) {\n return function () {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;else delete this.__on;\n };\n }\n function onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function (d, i, group) {\n var on = this.__on,\n o,\n listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {\n type: typename.type,\n name: typename.name,\n value: value,\n listener: listener,\n capture: capture\n };\n if (!on) this.__on = [o];else on.push(o);\n };\n }\n function selection_on(typename, value, capture) {\n var typenames = parseTypenames$1(typename + \"\"),\n i,\n n = typenames.length,\n t;\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n }\n function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n }\n function dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false);\n }\n node.dispatchEvent(event);\n }\n function dispatchConstant(type, params) {\n return function () {\n return dispatchEvent(this, type, params);\n };\n }\n function dispatchFunction(type, params) {\n return function () {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n }\n function selection_dispatch(type, params) {\n return this.each((typeof params === \"function\" ? dispatchFunction : dispatchConstant)(type, params));\n }\n var root = [null];\n function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n }\n function selection() {\n return new Selection([[document.documentElement]], root);\n }\n Selection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n };\n function select(selector) {\n return typeof selector === \"string\" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root);\n }\n function sourceEvent() {\n var current = event,\n source;\n while (source = current.sourceEvent) current = source;\n return current;\n }\n function point(node, event) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n function mouse(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n }\n function touch(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n return null;\n }\n function nopropagation() {\n event.stopImmediatePropagation();\n }\n function noevent() {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n function nodrag(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n }\n function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function () {\n selection.on(\"click.drag\", null);\n }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n }\n function constant$3(x) {\n return function () {\n return x;\n };\n }\n function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n }\n DragEvent.prototype.on = function () {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n };\n\n // Ignore right-click, since that should open the context menu.\n function defaultFilter() {\n return !event.ctrlKey && !event.button;\n }\n function defaultContainer() {\n return this.parentNode;\n }\n function defaultSubject(d) {\n return d == null ? {\n x: event.x,\n y: event.y\n } : d;\n }\n function defaultTouchable() {\n return navigator.maxTouchPoints || \"ontouchstart\" in this;\n }\n function drag() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n function drag(selection) {\n selection.on(\"mousedown.drag\", mousedowned).filter(touchable).on(\"touchstart.drag\", touchstarted).on(\"touchmove.drag\", touchmoved).on(\"touchend.drag touchcancel.drag\", touchended).style(\"touch-action\", \"none\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx,\n dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length,\n i,\n gesture;\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length,\n i,\n gesture;\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length,\n i,\n gesture;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function () {\n touchending = null;\n }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n function beforestart(id, container, point, that, args) {\n var p = point(container, id),\n s,\n dx,\n dy,\n sublisteners = listeners.copy();\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function () {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n return function gesture(type) {\n var p0 = p,\n n;\n switch (type) {\n case \"start\":\n gestures[id] = gesture, n = active++;\n break;\n case \"end\":\n delete gestures[id], --active;\n // nobreak\n case \"drag\":\n p = point(container, id), n = active;\n break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n drag.filter = function (_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : filter;\n };\n drag.container = function (_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$3(_), drag) : container;\n };\n drag.subject = function (_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$3(_), drag) : subject;\n };\n drag.touchable = function (_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : touchable;\n };\n drag.on = function () {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n drag.clickDistance = function (_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n return drag;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n var T$a = Template('d-slider', \"\\n\\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n\n // ARIA\n // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.\n // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.\n\n var keyCodes = {\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n pageUp: 33,\n pageDown: 34,\n end: 35,\n home: 36\n };\n var Slider = /*#__PURE__*/function (_T$a) {\n function Slider() {\n _classCallCheck(this, Slider);\n return _callSuper(this, Slider, arguments);\n }\n _inherits(Slider, _T$a);\n return _createClass(Slider, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this19 = this;\n this.connected = true;\n this.setAttribute('role', 'slider');\n // Makes the element tab-able.\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', 0);\n }\n\n // Keeps track of keyboard vs. mouse interactions for focus rings\n this.mouseEvent = false;\n\n // Handles to shadow DOM elements\n this.knob = this.root.querySelector('.knob-container');\n this.background = this.root.querySelector('.background');\n this.trackFill = this.root.querySelector('.track-fill');\n this.track = this.root.querySelector('.track');\n\n // Default values for attributes\n this.min = this.min ? this.min : 0;\n this.max = this.max ? this.max : 100;\n this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);\n this.origin = this.origin !== undefined ? this.origin : this.min;\n this.step = this.step ? this.step : 1;\n this.update(this.value ? this.value : 0);\n this.ticks = this.ticks ? this.ticks : false;\n this.renderTicks();\n this.drag = drag().container(this.background).on('start', function () {\n _this19.mouseEvent = true;\n _this19.background.classList.add('mousedown');\n _this19.changeValue = _this19.value;\n _this19.dragUpdate();\n }).on('drag', function () {\n _this19.dragUpdate();\n }).on('end', function () {\n _this19.mouseEvent = false;\n _this19.background.classList.remove('mousedown');\n _this19.dragUpdate();\n if (_this19.changeValue !== _this19.value) _this19.dispatchChange();\n _this19.changeValue = _this19.value;\n });\n this.drag(select(this.background));\n this.addEventListener('focusin', function () {\n if (!_this19.mouseEvent) {\n _this19.background.classList.add('focus');\n }\n });\n this.addEventListener('focusout', function () {\n _this19.background.classList.remove('focus');\n });\n this.addEventListener('keydown', this.onKeyDown);\n }\n }, {\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(attr, oldValue, newValue) {\n if (isNaN(newValue) || newValue === undefined || newValue === null) return;\n if (attr == 'min') {\n this.min = +newValue;\n this.setAttribute('aria-valuemin', this.min);\n }\n if (attr == 'max') {\n this.max = +newValue;\n this.setAttribute('aria-valuemax', this.max);\n }\n if (attr == 'value') {\n this.update(+newValue);\n }\n if (attr == 'origin') {\n this.origin = +newValue;\n // this.update(this.value);\n }\n if (attr == 'step') {\n if (newValue > 0) {\n this.step = +newValue;\n }\n }\n if (attr == 'ticks') {\n this.ticks = newValue === '' ? true : newValue;\n }\n }\n }, {\n key: \"onKeyDown\",\n value: function onKeyDown(event) {\n this.changeValue = this.value;\n var stopPropagation = false;\n switch (event.keyCode) {\n case keyCodes.left:\n case keyCodes.down:\n this.update(this.value - this.step);\n stopPropagation = true;\n break;\n case keyCodes.right:\n case keyCodes.up:\n this.update(this.value + this.step);\n stopPropagation = true;\n break;\n case keyCodes.pageUp:\n this.update(this.value + this.step * 10);\n stopPropagation = true;\n break;\n case keyCodes.pageDown:\n this.update(this.value + this.step * 10);\n stopPropagation = true;\n break;\n case keyCodes.home:\n this.update(this.min);\n stopPropagation = true;\n break;\n case keyCodes.end:\n this.update(this.max);\n stopPropagation = true;\n break;\n }\n if (stopPropagation) {\n this.background.classList.add('focus');\n event.preventDefault();\n event.stopPropagation();\n if (this.changeValue !== this.value) this.dispatchChange();\n }\n }\n }, {\n key: \"validateValueRange\",\n value: function validateValueRange(min, max, value) {\n return Math.max(Math.min(max, value), min);\n }\n }, {\n key: \"quantizeValue\",\n value: function quantizeValue(value, step) {\n return Math.round(value / step) * step;\n }\n }, {\n key: \"dragUpdate\",\n value: function dragUpdate() {\n var bbox = this.background.getBoundingClientRect();\n var x = event.x;\n var width = bbox.width;\n this.update(this.scale.invert(x / width));\n }\n }, {\n key: \"update\",\n value: function update(value) {\n var v = value;\n if (this.step !== 'any') {\n v = this.quantizeValue(value, this.step);\n }\n v = this.validateValueRange(this.min, this.max, v);\n if (this.connected) {\n this.knob.style.left = this.scale(v) * 100 + '%';\n this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + '%';\n this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + '%';\n }\n if (this.value !== v) {\n this.value = v;\n this.setAttribute('aria-valuenow', this.value);\n this.dispatchInput();\n }\n }\n\n // Dispatches only on a committed change (basically only on mouseup).\n }, {\n key: \"dispatchChange\",\n value: function dispatchChange() {\n var e = new Event('change');\n this.dispatchEvent(e, {});\n }\n\n // Dispatches on each value change.\n }, {\n key: \"dispatchInput\",\n value: function dispatchInput() {\n var e = new Event('input');\n this.dispatchEvent(e, {});\n }\n }, {\n key: \"renderTicks\",\n value: function renderTicks() {\n var _this20 = this;\n var ticksContainer = this.root.querySelector('.ticks');\n if (this.ticks !== false) {\n var tickData = [];\n if (this.ticks > 0) {\n tickData = this.scale.ticks(this.ticks);\n } else if (this.step === 'any') {\n tickData = this.scale.ticks();\n } else {\n tickData = range(this.min, this.max + 1e-6, this.step);\n }\n tickData.forEach(function (d) {\n var tick = document.createElement('div');\n tick.classList.add('tick');\n tick.style.left = _this20.scale(d) * 100 + '%';\n ticksContainer.appendChild(tick);\n });\n } else {\n ticksContainer.style.display = 'none';\n }\n }\n }], [{\n key: \"observedAttributes\",\n get: function get() {\n return ['min', 'max', 'value', 'step', 'ticks', 'origin', 'tickValues', 'tickLabels'];\n }\n }]);\n }(T$a(HTMLElement));\n var logo = \"\\n \\n\\n\";\n var headerTemplate = \"\\n\\n\\n\");\n\n // Copyright 2018 The Distill Template Authors\n\n var T$b = Template('distill-header', headerTemplate, false);\n var DistillHeader = /*#__PURE__*/function (_T$b) {\n function DistillHeader() {\n _classCallCheck(this, DistillHeader);\n return _callSuper(this, DistillHeader, arguments);\n }\n _inherits(DistillHeader, _T$b);\n return _createClass(DistillHeader);\n }(T$b(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var styles$2 = \"\\n\\n\";\n function appendixTemplate(frontMatter) {\n var html = styles$2;\n if (typeof frontMatter.githubUrl !== 'undefined') {\n html += \"\\n

    Updates and Corrections

    \\n

    \";\n if (frontMatter.githubCompareUpdatesUrl) {\n html += \"View all changes to this article since it was first published.\");\n }\n html += \"\\n If you see mistakes or want to suggest changes, please create an issue on GitHub.

    \\n \");\n }\n var journal = frontMatter.journal;\n if (typeof journal !== 'undefined' && journal.title === 'Distill') {\n html += \"\\n

    Reuse

    \\n

    Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don\\u2019t fall under this license and can be recognized by a note in their caption: \\u201CFigure from \\u2026\\u201D.

    \\n \");\n }\n if (typeof frontMatter.publishedDate !== 'undefined') {\n html += \"\\n

    Citation

    \\n

    For attribution in academic contexts, please cite this work as

    \\n
    \".concat(frontMatter.concatenatedAuthors, \", \\\"\").concat(frontMatter.title, \"\\\", Distill, \").concat(frontMatter.publishedYear, \".
    \\n

    BibTeX citation

    \\n
    \").concat(serializeFrontmatterToBibtex(frontMatter), \"
    \\n \");\n }\n return html;\n }\n var DistillAppendix = /*#__PURE__*/function (_HTMLElement9) {\n function DistillAppendix() {\n _classCallCheck(this, DistillAppendix);\n return _callSuper(this, DistillAppendix, arguments);\n }\n _inherits(DistillAppendix, _HTMLElement9);\n return _createClass(DistillAppendix, [{\n key: \"frontMatter\",\n set: function set(frontMatter) {\n this.innerHTML = appendixTemplate(frontMatter);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'distill-appendix';\n }\n }]);\n }(/*#__PURE__*/_wrapNativeSuper(HTMLElement));\n var footerTemplate = \"\\n\\n\\n\\n\\n\");\n\n // Copyright 2018 The Distill Template Authors\n\n var T$c = Template('distill-footer', footerTemplate);\n var DistillFooter = /*#__PURE__*/function (_T$c) {\n function DistillFooter() {\n _classCallCheck(this, DistillFooter);\n return _callSuper(this, DistillFooter, arguments);\n }\n _inherits(DistillFooter, _T$c);\n return _createClass(DistillFooter);\n }(T$c(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var templateIsLoading = false;\n var runlevel = 0;\n var initialize = function initialize() {\n if (window.distill.runlevel < 1) {\n throw new Error(\"Insufficient Runlevel for Distill Template!\");\n }\n\n /* 1. Flag that we're being loaded */\n if (\"distill\" in window && window.distill.templateIsLoading) {\n throw new Error(\"Runlevel 1: Distill Template is getting loaded more than once, aborting!\");\n } else {\n window.distill.templateIsLoading = true;\n console.debug(\"Runlevel 1: Distill Template has started loading.\");\n }\n\n /* 2. Add styles if they weren't added during prerendering */\n makeStyleTag(document);\n console.debug(\"Runlevel 1: Static Distill styles have been added.\");\n console.debug(\"Runlevel 1->2.\");\n window.distill.runlevel += 1;\n\n /* 3. Register Controller listener functions */\n /* Needs to happen before components to their connected callbacks have a controller to talk to. */\n for (var _i2 = 0, _Object$entries2 = Object.entries(Controller.listeners); _i2 < _Object$entries2.length; _i2++) {\n var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),\n functionName = _Object$entries2$_i[0],\n callback = _Object$entries2$_i[1];\n if (typeof callback === \"function\") {\n document.addEventListener(functionName, callback);\n } else {\n console.error(\"Runlevel 2: Controller listeners need to be functions!\");\n }\n }\n console.debug(\"Runlevel 2: We can now listen to controller events.\");\n console.debug(\"Runlevel 2->3.\");\n window.distill.runlevel += 1;\n\n /* 4. Register components */\n var components = [Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code, Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure, Slider, Interstitial];\n var distillComponents = [DistillHeader, DistillAppendix, DistillFooter];\n if (window.distill.runlevel < 2) {\n throw new Error(\"Insufficient Runlevel for adding custom elements!\");\n }\n var allComponents = components.concat(distillComponents);\n var _iterator21 = _createForOfIteratorHelper(allComponents),\n _step21;\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var component = _step21.value;\n console.debug(\"Runlevel 2: Registering custom element: \" + component.is);\n customElements.define(component.is, component);\n }\n } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\n console.debug(\"Runlevel 3: Distill Template finished registering custom elements.\");\n console.debug(\"Runlevel 3->4.\");\n window.distill.runlevel += 1;\n\n // If template was added after DOMContentLoaded we may have missed that event.\n // Controller will check for that case, so trigger the event explicitly:\n if (domContentLoaded()) {\n Controller.listeners.DOMContentLoaded();\n }\n console.debug(\"Runlevel 4: Distill Template initialisation complete.\");\n window.distill.templateIsLoading = false;\n window.distill.templateHasLoaded = true;\n };\n window.distill = {\n runlevel: runlevel,\n initialize: initialize,\n templateIsLoading: templateIsLoading\n };\n\n /* 0. Check browser feature support; synchronously polyfill if needed */\n if (Polyfills.browserSupportsAllFeatures()) {\n console.debug(\"Runlevel 0: No need for polyfills.\");\n console.debug(\"Runlevel 0->1.\");\n window.distill.runlevel += 1;\n window.distill.initialize();\n } else {\n console.debug(\"Runlevel 0: Distill Template is loading polyfills.\");\n Polyfills.load(window.distill.initialize);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dEI2QyxVQUFVLENBQUNFLFNBQVMsQ0FBQ3VCLGdCQUFnQixDQUFDLENBQUM7SUFDekM7SUFFQWhULE9BQU8sQ0FBQzBTLEtBQUssQ0FBQyx1REFBdUQsQ0FBQztJQUN0RTVOLE1BQU0sQ0FBQ3dqRCxPQUFPLENBQUNILGlCQUFpQixHQUFHLEtBQUs7SUFDeENyakQsTUFBTSxDQUFDd2pELE9BQU8sQ0FBQ1ksaUJBQWlCLEdBQUcsSUFBSTtFQUN6QyxDQUFDO0VBRURwa0QsTUFBTSxDQUFDd2pELE9BQU8sR0FBRztJQUFFRixRQUFRLEVBQVJBLFFBQVE7SUFBRUMsVUFBVSxFQUFWQSxVQUFVO0lBQUVGLGlCQUFpQixFQUFqQkE7RUFBa0IsQ0FBQzs7RUFFNUQ7RUFDQSxJQUFJdnpDLFNBQVMsQ0FBQ0MsMEJBQTBCLENBQUMsQ0FBQyxFQUFFO0lBQzFDN1UsT0FBTyxDQUFDMFMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDO0lBQ25EMVMsT0FBTyxDQUFDMFMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBQy9CNU4sTUFBTSxDQUFDd2pELE9BQU8sQ0FBQ0YsUUFBUSxJQUFJLENBQUM7SUFDNUJ0akQsTUFBTSxDQUFDd2pELE9BQU8sQ0FBQ0QsVUFBVSxDQUFDLENBQUM7RUFDN0IsQ0FBQyxNQUFNO0lBQ0xyb0QsT0FBTyxDQUFDMFMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDO0lBQ25Fa0MsU0FBUyxDQUFDSSxJQUFJLENBQUNsUSxNQUFNLENBQUN3akQsT0FBTyxDQUFDRCxVQUFVLENBQUM7RUFDM0M7QUFFRixDQUFFLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ncG9zdC8uL3NyYy9kaXN0aWxsLmpzP2U5N2MiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcclxuICBmYWN0b3J5KCk7XHJcbn0oKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcbiAgLy9cclxuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICAvL1xyXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAgLy9cclxuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuXHJcbiAgY29uc3QgZGF5cyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcclxuICBjb25zdCBtb250aHMgPSBbJ0phbi4nLCAnRmViLicsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Zy4nLCAnU2VwdC4nLCAnT2N0LicsICdOb3YuJywgJ0RlYy4nXTtcclxuICBjb25zdCB6ZXJvUGFkID0gbiA9PiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcclxuXHJcbiAgY29uc3QgUkZDID0gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgY29uc3QgZGF5ID0gZGF5c1tkYXRlLmdldERheSgpXS5zdWJzdHJpbmcoMCwgMyk7XHJcbiAgICBjb25zdCBwYWRkZWREYXRlID0gemVyb1BhZChkYXRlLmdldERhdGUoKSk7XHJcbiAgICBjb25zdCBtb250aCA9IG1vbnRoc1tkYXRlLmdldE1vbnRoKCldLnN1YnN0cmluZygwLDMpO1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xyXG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKTtcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpO1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gYCR7ZGF5fSwgJHtwYWRkZWREYXRlfSAke21vbnRofSAke3llYXJ9ICR7aG91cnN9OiR7bWludXRlc306JHtzZWNvbmRzfSBaYDtcclxuICB9O1xyXG5cclxuICBjb25zdCBvYmplY3RGcm9tTWFwID0gZnVuY3Rpb24obWFwKSB7XHJcbiAgICBjb25zdCBvYmplY3QgPSBBcnJheS5mcm9tKG1hcCkucmVkdWNlKChvYmplY3QsIFtrZXksIHZhbHVlXSkgPT4gKFxyXG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgeyBba2V5XTogdmFsdWUgfSkgLy8gQmUgY2FyZWZ1bCEgTWFwcyBjYW4gaGF2ZSBub24tU3RyaW5nIGtleXM7IG9iamVjdCBsaXRlcmFscyBjYW4ndC5cclxuICAgICksIHt9KTtcclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgbWFwRnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCkge1xyXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xyXG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KSB7XHJcbiAgICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICAgICAgbWFwLnNldChwcm9wZXJ0eSwgb2JqZWN0W3Byb3BlcnR5XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtYXA7XHJcbiAgfTtcclxuXHJcbiAgY2xhc3MgQXV0aG9yIHtcclxuXHJcbiAgICAvLyBjb25zdHJ1Y3RvcihuYW1lPScnLCBwZXJzb25hbFVSTD0nJywgYWZmaWxpYXRpb249JycsIGFmZmlsaWF0aW9uVVJMPScnKSB7XHJcbiAgICAvLyAgIHRoaXMubmFtZSA9IG5hbWU7IC8vICdDaHJpcyBPbGFoJ1xyXG4gICAgLy8gICB0aGlzLnBlcnNvbmFsVVJMID0gcGVyc29uYWxVUkw7IC8vICdodHRwczovL2NvbGFoLmdpdGh1Yi5pbydcclxuICAgIC8vICAgdGhpcy5hZmZpbGlhdGlvbiA9IGFmZmlsaWF0aW9uOyAvLyAnR29vZ2xlIEJyYWluJ1xyXG4gICAgLy8gICB0aGlzLmFmZmlsaWF0aW9uVVJMID0gYWZmaWxpYXRpb25VUkw7IC8vICdodHRwczovL2cuY28vYnJhaW4nXHJcbiAgICAvLyB9XHJcblxyXG4gICAgY29uc3RydWN0b3Iob2JqZWN0KSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG9iamVjdC5hdXRob3I7IC8vICdDaHJpcyBPbGFoJ1xyXG4gICAgICB0aGlzLnBlcnNvbmFsVVJMID0gb2JqZWN0LmF1dGhvclVSTDsgLy8gJ2h0dHBzOi8vY29sYWguZ2l0aHViLmlvJ1xyXG4gICAgICB0aGlzLmFmZmlsaWF0aW9uID0gb2JqZWN0LmFmZmlsaWF0aW9uOyAvLyAnR29vZ2xlIEJyYWluJ1xyXG4gICAgICB0aGlzLmFmZmlsaWF0aW9uVVJMID0gb2JqZWN0LmFmZmlsaWF0aW9uVVJMOyAvLyAnaHR0cHM6Ly9nLmNvL2JyYWluJ1xyXG4gICAgICB0aGlzLmFmZmlsaWF0aW9ucyA9IG9iamVjdC5hZmZpbGlhdGlvbnMgfHwgW107IC8vIG5ldy1zdHlsZSBhZmZpbGlhdGlvbnNcclxuICAgIH1cclxuXHJcbiAgICAvLyAnQ2hyaXMnXHJcbiAgICBnZXQgZmlyc3ROYW1lKCkge1xyXG4gICAgICBjb25zdCBuYW1lcyA9IHRoaXMubmFtZS5zcGxpdCgnICcpO1xyXG4gICAgICByZXR1cm4gbmFtZXMuc2xpY2UoMCwgbmFtZXMubGVuZ3RoIC0gMSkuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICdPbGFoJ1xyXG4gICAgZ2V0IGxhc3ROYW1lKCkge1xyXG4gICAgICBjb25zdCBuYW1lcyA9IHRoaXMubmFtZS5zcGxpdCgnICcpO1xyXG4gICAgICByZXR1cm4gbmFtZXNbbmFtZXMubGVuZ3RoIC0xXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1lcmdlRnJvbVlNTEZyb250bWF0dGVyKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICB0YXJnZXQudGl0bGUgPSBzb3VyY2UudGl0bGU7XHJcbiAgICBpZiAoc291cmNlLnB1Ymxpc2hlZCkge1xyXG4gICAgICBpZiAoc291cmNlLnB1Ymxpc2hlZCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICB0YXJnZXQucHVibGlzaGVkRGF0ZSA9IHNvdXJjZS5wdWJsaXNoZWQ7XHJcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlLnB1Ymxpc2hlZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XHJcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZERhdGUgPSBuZXcgRGF0ZShzb3VyY2UucHVibGlzaGVkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNvdXJjZS5wdWJsaXNoZWREYXRlKSB7XHJcbiAgICAgIGlmIChzb3VyY2UucHVibGlzaGVkRGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICB0YXJnZXQucHVibGlzaGVkRGF0ZSA9IHNvdXJjZS5wdWJsaXNoZWREYXRlO1xyXG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZS5wdWJsaXNoZWREYXRlLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcclxuICAgICAgICB0YXJnZXQucHVibGlzaGVkRGF0ZSA9IG5ldyBEYXRlKHNvdXJjZS5wdWJsaXNoZWREYXRlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdEb25cXCd0IGtub3cgd2hhdCB0byBkbyB3aXRoIHB1Ymxpc2hlZCBkYXRlOiAnICsgc291cmNlLnB1Ymxpc2hlZERhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0YXJnZXQuZGVzY3JpcHRpb24gPSBzb3VyY2UuZGVzY3JpcHRpb247XHJcbiAgICB0YXJnZXQuYXV0aG9ycyA9IHNvdXJjZS5hdXRob3JzLm1hcCggKGF1dGhvck9iamVjdCkgPT4gbmV3IEF1dGhvcihhdXRob3JPYmplY3QpKTtcclxuICAgIHRhcmdldC5rYXRleCA9IHNvdXJjZS5rYXRleDtcclxuICAgIHRhcmdldC5wYXNzd29yZCA9IHNvdXJjZS5wYXNzd29yZDtcclxuICAgIGlmIChzb3VyY2UuZG9pKSB7XHJcbiAgICAgIHRhcmdldC5kb2kgPSBzb3VyY2UuZG9pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgRnJvbnRNYXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIHRoaXMudGl0bGUgPSAndW5uYW1lZCBhcnRpY2xlJzsgLy8gJ0F0dGVudGlvbiBhbmQgQXVnbWVudGVkIFJlY3VycmVudCBOZXVyYWwgTmV0d29ya3MnXHJcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSAnJzsgLy8gJ0EgdmlzdWFsIG92ZXJ2aWV3IG9mIG5ldXJhbCBhdHRlbnRpb24uLi4nXHJcbiAgICAgIHRoaXMuYXV0aG9ycyA9IFtdOyAvLyBBcnJheSBvZiBBdXRob3IocylcclxuXHJcbiAgICAgIHRoaXMuYmlibGlvZ3JhcGh5ID0gbmV3IE1hcCgpO1xyXG4gICAgICB0aGlzLmJpYmxpb2dyYXBoeVBhcnNlZCA9IGZhbHNlO1xyXG4gICAgICAvLyAge1xyXG4gICAgICAvLyAgICAnZ3JlZ29yMjAxNWRyYXcnOiB7XHJcbiAgICAgIC8vICAgICAgJ3RpdGxlJzogJ0RSQVc6IEEgcmVjdXJyZW50IG5ldXJhbCBuZXR3b3JrIGZvciBpbWFnZSBnZW5lcmF0aW9uJyxcclxuICAgICAgLy8gICAgICAnYXV0aG9yJzogJ0dyZWdvciwgS2Fyb2wgYW5kIERhbmloZWxrYSwgSXZvIGFuZCBHcmF2ZXMsIEFsZXggYW5kIFJlemVuZGUsIERhbmlsbyBKaW1lbmV6IGFuZCBXaWVyc3RyYSwgRGFhbicsXHJcbiAgICAgIC8vICAgICAgJ2pvdXJuYWwnOiAnYXJYaXYgcHJlcHJpbnQgYXJYaXY6MTUwMi4wNDYyMycsXHJcbiAgICAgIC8vICAgICAgJ3llYXInOiAnMjAxNScsXHJcbiAgICAgIC8vICAgICAgJ3VybCc6ICdodHRwczovL2FyeGl2Lm9yZy9wZGYvMTUwMi4wNDYyMy5wZGYnLFxyXG4gICAgICAvLyAgICAgICd0eXBlJzogJ2FydGljbGUnXHJcbiAgICAgIC8vICAgIH0sXHJcbiAgICAgIC8vICB9XHJcblxyXG4gICAgICAvLyBDaXRhdGlvbiBrZXlzIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgYXBwZWFyIGluIHRoZSBkb2N1bWVudC5cclxuICAgICAgLy8gRWFjaCBrZXkgcmVmZXJzIHRvIGEga2V5IGluIHRoZSBiaWJsaW9ncmFwaHkgZGljdGlvbmFyeS5cclxuICAgICAgdGhpcy5jaXRhdGlvbnMgPSBbXTsgLy8gWyAnZ3JlZ29yMjAxNWRyYXcnLCAnbWVyY2llcjIwMTFodW1hbnMnIF1cclxuICAgICAgdGhpcy5jaXRhdGlvbnNDb2xsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIEFzc2lnbmVkIGZyb20gcG9zdHMuY3N2XHJcbiAgICAgIC8vXHJcblxyXG4gICAgICAvLyAgcHVibGlzaGVkRGF0ZTogMjAxNi0wOS0wOFQwNzowMDowMC4wMDBaLFxyXG4gICAgICAvLyAgdGFnczogWyAncm5uJyBdLFxyXG4gICAgICAvLyAgZGlzdGlsbFBhdGg6ICcyMDE2L2F1Z21lbnRlZC1ybm5zJyxcclxuICAgICAgLy8gIGdpdGh1YlBhdGg6ICdkaXN0aWxscHViL3Bvc3QtLWF1Z21lbnRlZC1ybm5zJyxcclxuICAgICAgLy8gIGRvaVN1ZmZpeDogMSxcclxuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIEFzc2lnbmVkIGZyb20gam91cm5hbFxyXG4gICAgICAvL1xyXG4gICAgICB0aGlzLmpvdXJuYWwgPSB7fTtcclxuICAgICAgLy8gIGpvdXJuYWw6IHtcclxuICAgICAgLy8gICAgJ3RpdGxlJzogJ0Rpc3RpbGwnLFxyXG4gICAgICAvLyAgICAnZnVsbF90aXRsZSc6ICdEaXN0aWxsJyxcclxuICAgICAgLy8gICAgJ2FiYnJldl90aXRsZSc6ICdEaXN0aWxsJyxcclxuICAgICAgLy8gICAgJ3VybCc6ICdodHRwOi8vZGlzdGlsbC5wdWInLFxyXG4gICAgICAvLyAgICAnZG9pJzogJzEwLjIzOTE1L2Rpc3RpbGwnLFxyXG4gICAgICAvLyAgICAncHVibGlzaGVyTmFtZSc6ICdEaXN0aWxsIFdvcmtpbmcgR3JvdXAnLFxyXG4gICAgICAvLyAgICAncHVibGlzaGVyRW1haWwnOiAnYWRtaW5AZGlzdGlsbC5wdWInLFxyXG4gICAgICAvLyAgICAnaXNzbic6ICcyNDc2LTA3NTcnLFxyXG4gICAgICAvLyAgICAnZWRpdG9ycyc6IFsuLi5dLFxyXG4gICAgICAvLyAgICAnY29tbWl0dGVlJzogWy4uLl1cclxuICAgICAgLy8gIH1cclxuICAgICAgLy8gIHZvbHVtZTogMSxcclxuICAgICAgLy8gIGlzc3VlOiA5LFxyXG5cclxuICAgICAgdGhpcy5rYXRleCA9IHt9O1xyXG5cclxuICAgICAgLy9cclxuICAgICAgLy8gQXNzaWduZWQgZnJvbSBwdWJsaXNoaW5nIHByb2Nlc3NcclxuICAgICAgLy9cclxuXHJcbiAgICAgIC8vICBnaXRodWJDb21wYXJlVXBkYXRlc1VybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9kaXN0aWxscHViL3Bvc3QtLWF1Z21lbnRlZC1ybm5zL2NvbXBhcmUvMTU5NmUwOTRkODk0M2QyZGMwZWE0NDVkOTIwNzExMjljNjQxOWM1OS4uLjNiZDkyMDllMGMyNGQwMjBmODdjZjYxNTJkY2VjYzYwMTdjYmMxOTMnLFxyXG4gICAgICAvLyAgdXBkYXRlZERhdGU6IDIwMTctMDMtMjFUMDc6MTM6MTYuMDAwWixcclxuICAgICAgLy8gIGRvaTogJzEwLjIzOTE1L2Rpc3RpbGwuMDAwMDEnLFxyXG4gICAgICB0aGlzLmRvaSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5wdWJsaXNoZWREYXRlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4YW1wbGU6XHJcbiAgICAvLyB0aXRsZTogRGVtbyBUaXRsZSBBdHRlbnRpb24gYW5kIEF1Z21lbnRlZCBSZWN1cnJlbnQgTmV1cmFsIE5ldHdvcmtzXHJcbiAgICAvLyBwdWJsaXNoZWQ6IEphbiAxMCwgMjAxN1xyXG4gICAgLy8gYXV0aG9yczpcclxuICAgIC8vIC0gQ2hyaXMgT2xhaDpcclxuICAgIC8vIC0gU2hhbiBDYXJ0ZXI6IGh0dHA6Ly9zaGFuY2FydGVyLmNvbVxyXG4gICAgLy8gYWZmaWxpYXRpb25zOlxyXG4gICAgLy8gLSBHb29nbGUgQnJhaW46XHJcbiAgICAvLyAtIEdvb2dsZSBCcmFpbjogaHR0cDovL2cuY28vYnJhaW5cclxuXHJcbiAgICAvL1xyXG4gICAgLy8gQ29tcHV0ZWQgUHJvcGVydGllc1xyXG4gICAgLy9cclxuXHJcbiAgICAvLyAnaHR0cDovL2Rpc3RpbGwucHViLzIwMTYvYXVnbWVudGVkLXJubnMnLFxyXG4gICAgc2V0IHVybCh2YWx1ZSkge1xyXG4gICAgICB0aGlzLl91cmwgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGdldCB1cmwoKSB7XHJcbiAgICAgIGlmICh0aGlzLl91cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXJsO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlzdGlsbFBhdGggJiYgdGhpcy5qb3VybmFsLnVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmpvdXJuYWwudXJsICsgJy8nICsgdGhpcy5kaXN0aWxsUGF0aDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmpvdXJuYWwudXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuam91cm5hbC51cmw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAnaHR0cHM6Ly9naXRodWIuY29tL2Rpc3RpbGxwdWIvcG9zdC0tYXVnbWVudGVkLXJubnMnLFxyXG4gICAgZ2V0IGdpdGh1YlVybCgpIHtcclxuICAgICAgaWYgKHRoaXMuZ2l0aHViUGF0aCkge1xyXG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9naXRodWIuY29tLycgKyB0aGlzLmdpdGh1YlBhdGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE8gcmVzb2x2ZSBkaWZmZXJlbmNlcyBpbiBuYW1pbmcgb2YgVVJML1VybC91cmwuXHJcbiAgICAvLyAnaHR0cDovL2Rpc3RpbGwucHViLzIwMTYvYXVnbWVudGVkLXJubnMvdGh1bWJuYWlsLmpwZycsXHJcbiAgICBzZXQgcHJldmlld1VSTCh2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9wcmV2aWV3VVJMID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBnZXQgcHJldmlld1VSTCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpZXdVUkwgPyB0aGlzLl9wcmV2aWV3VVJMIDogdGhpcy51cmwgKyAnL3RodW1ibmFpbC5qcGcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICdUaHUsIDA4IFNlcCAyMDE2IDAwOjAwOjAwIC0wNzAwJyxcclxuICAgIGdldCBwdWJsaXNoZWREYXRlUkZDKCkge1xyXG4gICAgICByZXR1cm4gUkZDKHRoaXMucHVibGlzaGVkRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gJ1RodSwgMDggU2VwIDIwMTYgMDA6MDA6MDAgLTA3MDAnLFxyXG4gICAgZ2V0IHVwZGF0ZWREYXRlUkZDKCkge1xyXG4gICAgICByZXR1cm4gUkZDKHRoaXMudXBkYXRlZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIwMTYsXHJcbiAgICBnZXQgcHVibGlzaGVkWWVhcigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHVibGlzaGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICdTZXB0JyxcclxuICAgIGdldCBwdWJsaXNoZWRNb250aCgpIHtcclxuICAgICAgcmV0dXJuIG1vbnRoc1t0aGlzLnB1Ymxpc2hlZERhdGUuZ2V0TW9udGgoKV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gOCxcclxuICAgIGdldCBwdWJsaXNoZWREYXkoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnB1Ymxpc2hlZERhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICcwOScsXHJcbiAgICBnZXQgcHVibGlzaGVkTW9udGhQYWRkZWQoKSB7XHJcbiAgICAgIHJldHVybiB6ZXJvUGFkKHRoaXMucHVibGlzaGVkRGF0ZS5nZXRNb250aCgpICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gJzA4JyxcclxuICAgIGdldCBwdWJsaXNoZWREYXlQYWRkZWQoKSB7XHJcbiAgICAgIHJldHVybiB6ZXJvUGFkKHRoaXMucHVibGlzaGVkRGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwdWJsaXNoZWRJU09EYXRlT25seSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHVibGlzaGVkRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZvbHVtZSgpIHtcclxuICAgICAgY29uc3Qgdm9sdW1lID0gdGhpcy5wdWJsaXNoZWRZZWFyIC0gMjAxNTtcclxuICAgICAgaWYgKHZvbHVtZSA8IDEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVibGlzaCBkYXRlIGRldGVjdGVkIGR1cmluZyBjb21wdXRpbmcgdm9sdW1lJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZvbHVtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNzdWUoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnB1Ymxpc2hlZERhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gJ09sYWggJiBDYXJ0ZXInLFxyXG4gICAgZ2V0IGNvbmNhdGVuYXRlZEF1dGhvcnMoKSB7XHJcbiAgICAgIGlmICh0aGlzLmF1dGhvcnMubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcnNbMF0ubGFzdE5hbWUgKyAnLCBldCBhbC4nO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0aG9ycy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRob3JzWzBdLmxhc3ROYW1lICsgJyAmICcgKyB0aGlzLmF1dGhvcnNbMV0ubGFzdE5hbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdXRob3JzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcnNbMF0ubGFzdE5hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAnT2xhaCwgQ2hyaXMgYW5kIENhcnRlciwgU2hhbicsXHJcbiAgICBnZXQgYmlidGV4QXV0aG9ycygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXV0aG9ycy5tYXAoYXV0aG9yID0+IHtcclxuICAgICAgICByZXR1cm4gYXV0aG9yLmxhc3ROYW1lICsgJywgJyArIGF1dGhvci5maXJzdE5hbWU7XHJcbiAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gJ29sYWgyMDE2YXR0ZW50aW9uJ1xyXG4gICAgZ2V0IHNsdWcoKSB7XHJcbiAgICAgIGxldCBzbHVnID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmF1dGhvcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgc2x1ZyArPSB0aGlzLmF1dGhvcnNbMF0ubGFzdE5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBzbHVnICs9IHRoaXMucHVibGlzaGVkWWVhcjtcclxuICAgICAgICBzbHVnICs9IHRoaXMudGl0bGUuc3BsaXQoJyAnKVswXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzbHVnIHx8ICdVbnRpdGxlZCc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJpYmxpb2dyYXBoeUVudHJpZXMoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTWFwKHRoaXMuY2l0YXRpb25zLm1hcCggY2l0YXRpb25LZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5iaWJsaW9ncmFwaHkuZ2V0KGNpdGF0aW9uS2V5KTtcclxuICAgICAgICByZXR1cm4gW2NpdGF0aW9uS2V5LCBlbnRyeV07XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgYmlibGlvZ3JhcGh5KGJpYmxpb2dyYXBoeSkge1xyXG4gICAgICBpZiAoYmlibGlvZ3JhcGh5IGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgdGhpcy5fYmlibGlvZ3JhcGh5ID0gYmlibGlvZ3JhcGh5O1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBiaWJsaW9ncmFwaHkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhpcy5fYmlibGlvZ3JhcGh5ID0gbWFwRnJvbU9iamVjdChiaWJsaW9ncmFwaHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJpYmxpb2dyYXBoeSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2JpYmxpb2dyYXBoeTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbU9iamVjdChzb3VyY2UpIHtcclxuICAgICAgY29uc3QgZnJvbnRNYXR0ZXIgPSBuZXcgRnJvbnRNYXR0ZXIoKTtcclxuICAgICAgT2JqZWN0LmFzc2lnbihmcm9udE1hdHRlciwgc291cmNlKTtcclxuICAgICAgcmV0dXJuIGZyb250TWF0dGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnblRvT2JqZWN0KHRhcmdldCkge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgdGhpcyk7XHJcbiAgICAgIHRhcmdldC5iaWJsaW9ncmFwaHkgPSBvYmplY3RGcm9tTWFwKHRoaXMuYmlibGlvZ3JhcGh5RW50cmllcyk7XHJcbiAgICAgIHRhcmdldC51cmwgPSB0aGlzLnVybDtcclxuICAgICAgdGFyZ2V0LmRvaSA9IHRoaXMuZG9pO1xyXG4gICAgICB0YXJnZXQuZ2l0aHViVXJsID0gdGhpcy5naXRodWJVcmw7XHJcbiAgICAgIHRhcmdldC5wcmV2aWV3VVJMID0gdGhpcy5wcmV2aWV3VVJMO1xyXG4gICAgICBpZiAodGhpcy5wdWJsaXNoZWREYXRlKSB7XHJcbiAgICAgICAgdGFyZ2V0LnZvbHVtZSA9IHRoaXMudm9sdW1lO1xyXG4gICAgICAgIHRhcmdldC5pc3N1ZSA9IHRoaXMuaXNzdWU7XHJcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZERhdGVSRkMgPSB0aGlzLnB1Ymxpc2hlZERhdGVSRkM7XHJcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZFllYXIgPSB0aGlzLnB1Ymxpc2hlZFllYXI7XHJcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZE1vbnRoID0gdGhpcy5wdWJsaXNoZWRNb250aDtcclxuICAgICAgICB0YXJnZXQucHVibGlzaGVkRGF5ID0gdGhpcy5wdWJsaXNoZWREYXk7XHJcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZE1vbnRoUGFkZGVkID0gdGhpcy5wdWJsaXNoZWRNb250aFBhZGRlZDtcclxuICAgICAgICB0YXJnZXQucHVibGlzaGVkRGF5UGFkZGVkID0gdGhpcy5wdWJsaXNoZWREYXlQYWRkZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudXBkYXRlZERhdGUpIHtcclxuICAgICAgICB0YXJnZXQudXBkYXRlZERhdGVSRkMgPSB0aGlzLnVwZGF0ZWREYXRlUkZDO1xyXG4gICAgICB9XHJcbiAgICAgIHRhcmdldC5jb25jYXRlbmF0ZWRBdXRob3JzID0gdGhpcy5jb25jYXRlbmF0ZWRBdXRob3JzO1xyXG4gICAgICB0YXJnZXQuYmlidGV4QXV0aG9ycyA9IHRoaXMuYmlidGV4QXV0aG9ycztcclxuICAgICAgdGFyZ2V0LnNsdWcgPSB0aGlzLnNsdWc7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIGNvbnN0IE11dGF0aW5nID0gKHN1cGVyY2xhc3MpID0+IHtcclxuICAgIHJldHVybiBjbGFzcyBleHRlbmRzIHN1cGVyY2xhc3Mge1xyXG5cclxuICAgICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHVwIG11dGF0aW9uIG9ic2VydmVyXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWV9O1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoICgpID0+IHtcclxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVySWZQb3NzaWJsZSgpO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvcHRpb25zKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gLi4uYW5kIGxpc3RlbiBmb3IgY2hhbmdlc1xyXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVySWZQb3NzaWJsZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBwb3RlbnRpYWwgVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggZm9yIGFsbCBvdXIgdXNlY2FzZXNcclxuICAgICAgLy8gbWF5YmUgcHJvdmlkZSBhIGN1c3RvbSBmdW5jdGlvbiB0byB0ZWxsIGlmIHdlIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlbmRlclxyXG4gICAgICByZW5kZXJJZlBvc3NpYmxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRleHRDb250ZW50ICYmIHRoaXMucm9vdCkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb250ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZW5kZXJDb250ZW50KCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFlvdXIgY2xhc3MgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IG11c3QgcHJvdmlkZSBhIGN1c3RvbSByZW5kZXJDb250ZW50KCkgbWV0aG9kIWAgKTtcclxuICAgICAgfVxyXG5cclxuICAgIH07IC8vIGVuZCBjbGFzc1xyXG4gIH07IC8vIGVuZCBtaXhpbiBmdW5jdGlvblxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcbiAgLy9cclxuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICAvL1xyXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAgLy9cclxuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuXHJcbiAgLypnbG9iYWwgU2hhZHlDU1MqL1xyXG5cclxuICBjb25zdCBUZW1wbGF0ZSA9IChuYW1lLCB0ZW1wbGF0ZVN0cmluZywgdXNlU2hhZG93ID0gdHJ1ZSkgPT4ge1xyXG5cclxuICAgIHJldHVybiAoc3VwZXJjbGFzcykgPT4ge1xyXG5cclxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xyXG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSB0ZW1wbGF0ZVN0cmluZztcclxuXHJcbiAgICAgIGlmICh1c2VTaGFkb3cgJiYgJ1NoYWR5Q1NTJyBpbiB3aW5kb3cpIHtcclxuICAgICAgICBTaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUodGVtcGxhdGUsIG5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBzdXBlcmNsYXNzIHtcclxuXHJcbiAgICAgICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuIG5hbWU7IH1cclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2xvbmUgPSBkb2N1bWVudC5pbXBvcnROb2RlKHRlbXBsYXRlLmNvbnRlbnQsIHRydWUpO1xyXG4gICAgICAgICAgaWYgKHVzZVNoYWRvdykge1xyXG4gICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0aGlzLmNsb25lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdkaXN0aWxsLXByZXJlbmRlcmVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHVzZVNoYWRvdykge1xyXG4gICAgICAgICAgICBpZiAoJ1NoYWR5Q1NTJyBpbiB3aW5kb3cpIHtcclxuICAgICAgICAgICAgICBTaGFkeUNTUy5zdHlsZUVsZW1lbnQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmUsIHRoaXMuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICAgIGlmICh1c2VTaGFkb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogVE9ETzogQXJlIHdlIHVzaW5nIHRoZXNlPyBTaG91bGQgd2UgZXZlbj8gKi9cclxuICAgICAgICAkKHF1ZXJ5KSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IocXVlcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCQocXVlcnkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICB2YXIgbWF0aCA9IFwiLypcXG4gKiBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXFxuICpcXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXFxcIkxpY2Vuc2VcXFwiKTtcXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXFxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XFxuICpcXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxcbiAqXFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFxcXCJBUyBJU1xcXCIgQkFTSVMsXFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXFxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxcbiAqL1xcblxcbnNwYW4ua2F0ZXgtZGlzcGxheSB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgcGFkZGluZzogOHB4IDAgOHB4IDA7XFxuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMWVtO1xcbn1cXG5cXG5zcGFuLmthdGV4IHtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIGZvbnQtc2l6ZTogMS4xOGVtO1xcbn1cXG5cIjtcclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIC8vIFRoaXMgaXMgYSBzdHJhaWdodCBjb25jYXRlbmF0aW9uIG9mIGNvZGUgZnJvbSBLYVRlWCdzIGNvbnRyaWIgZm9sZGVyLFxyXG4gIC8vIGJ1dCB3ZSBhcmVuJ3QgdXNpbmcgc29tZSBvZiB0aGVpciBoZWxwZXJzIHRoYXQgZG9uJ3Qgd29yayB3ZWxsIG91dHNpZGUgYSBicm93c2VyIGVudmlyb25tZW50LlxyXG5cclxuICAvKmdsb2JhbCBrYXRleCAqL1xyXG5cclxuICBjb25zdCBmaW5kRW5kT2ZNYXRoID0gZnVuY3Rpb24oZGVsaW1pdGVyLCB0ZXh0LCBzdGFydEluZGV4KSB7XHJcbiAgICAvLyBBZGFwdGVkIGZyb21cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaGFuL3BlcnNldXMvYmxvYi9tYXN0ZXIvc3JjL3BlcnNldXMtbWFya2Rvd24uanN4XHJcbiAgICBsZXQgaW5kZXggPSBzdGFydEluZGV4O1xyXG4gICAgbGV0IGJyYWNlTGV2ZWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IGRlbGltTGVuZ3RoID0gZGVsaW1pdGVyLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBjaGFyYWN0ZXIgPSB0ZXh0W2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBicmFjZUxldmVsIDw9IDAgJiZcclxuICAgICAgICB0ZXh0LnNsaWNlKGluZGV4LCBpbmRleCArIGRlbGltTGVuZ3RoKSA9PT0gZGVsaW1pdGVyXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IFwiXFxcXFwiKSB7XHJcbiAgICAgICAgaW5kZXgrKztcclxuICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IFwie1wiKSB7XHJcbiAgICAgICAgYnJhY2VMZXZlbCsrO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gXCJ9XCIpIHtcclxuICAgICAgICBicmFjZUxldmVsLS07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNwbGl0QXREZWxpbWl0ZXJzID0gZnVuY3Rpb24oc3RhcnREYXRhLCBsZWZ0RGVsaW0sIHJpZ2h0RGVsaW0sIGRpc3BsYXkpIHtcclxuICAgIGNvbnN0IGZpbmFsRGF0YSA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChzdGFydERhdGFbaV0udHlwZSA9PT0gXCJ0ZXh0XCIpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gc3RhcnREYXRhW2ldLmRhdGE7XHJcblxyXG4gICAgICAgIGxldCBsb29raW5nRm9yTGVmdCA9IHRydWU7XHJcbiAgICAgICAgbGV0IGN1cnJJbmRleCA9IDA7XHJcbiAgICAgICAgbGV0IG5leHRJbmRleDtcclxuXHJcbiAgICAgICAgbmV4dEluZGV4ID0gdGV4dC5pbmRleE9mKGxlZnREZWxpbSk7XHJcbiAgICAgICAgaWYgKG5leHRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGN1cnJJbmRleCA9IG5leHRJbmRleDtcclxuICAgICAgICAgIGZpbmFsRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIGRhdGE6IHRleHQuc2xpY2UoMCwgY3VyckluZGV4KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBsb29raW5nRm9yTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXHJcbiAgICAgICAgICBpZiAobG9va2luZ0ZvckxlZnQpIHtcclxuICAgICAgICAgICAgbmV4dEluZGV4ID0gdGV4dC5pbmRleE9mKGxlZnREZWxpbSwgY3VyckluZGV4KTtcclxuICAgICAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZmluYWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgIGRhdGE6IHRleHQuc2xpY2UoY3VyckluZGV4LCBuZXh0SW5kZXgpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY3VyckluZGV4ID0gbmV4dEluZGV4O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV4dEluZGV4ID0gZmluZEVuZE9mTWF0aChcclxuICAgICAgICAgICAgICByaWdodERlbGltLFxyXG4gICAgICAgICAgICAgIHRleHQsXHJcbiAgICAgICAgICAgICAgY3VyckluZGV4ICsgbGVmdERlbGltLmxlbmd0aFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAobmV4dEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmaW5hbERhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgdHlwZTogXCJtYXRoXCIsXHJcbiAgICAgICAgICAgICAgZGF0YTogdGV4dC5zbGljZShjdXJySW5kZXggKyBsZWZ0RGVsaW0ubGVuZ3RoLCBuZXh0SW5kZXgpLFxyXG4gICAgICAgICAgICAgIHJhd0RhdGE6IHRleHQuc2xpY2UoY3VyckluZGV4LCBuZXh0SW5kZXggKyByaWdodERlbGltLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJJbmRleCA9IG5leHRJbmRleCArIHJpZ2h0RGVsaW0ubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxvb2tpbmdGb3JMZWZ0ID0gIWxvb2tpbmdGb3JMZWZ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmluYWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICBkYXRhOiB0ZXh0LnNsaWNlKGN1cnJJbmRleClcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaW5hbERhdGEucHVzaChzdGFydERhdGFbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsRGF0YTtcclxuICB9O1xyXG5cclxuICBjb25zdCBzcGxpdFdpdGhEZWxpbWl0ZXJzID0gZnVuY3Rpb24odGV4dCwgZGVsaW1pdGVycykge1xyXG4gICAgbGV0IGRhdGEgPSBbeyB0eXBlOiBcInRleHRcIiwgZGF0YTogdGV4dCB9XTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVsaW1pdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXJzW2ldO1xyXG4gICAgICBkYXRhID0gc3BsaXRBdERlbGltaXRlcnMoXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBkZWxpbWl0ZXIubGVmdCxcclxuICAgICAgICBkZWxpbWl0ZXIucmlnaHQsXHJcbiAgICAgICAgZGVsaW1pdGVyLmRpc3BsYXkgfHwgZmFsc2VcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH07XHJcblxyXG4gIC8qIE5vdGU6IG9wdGlvbnNDb3B5IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QuIElmIGl0IGlzIGV2ZXIgZXhwb3NlZCBpbiB0aGVcclxuICAgKiBBUEksIHdlIHNob3VsZCBjb3B5IGl0IGJlZm9yZSBtdXRhdGluZy5cclxuICAgKi9cclxuICBjb25zdCByZW5kZXJNYXRoSW5UZXh0ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9uc0NvcHkpIHtcclxuICAgIGNvbnN0IGRhdGEgPSBzcGxpdFdpdGhEZWxpbWl0ZXJzKHRleHQsIG9wdGlvbnNDb3B5LmRlbGltaXRlcnMpO1xyXG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2ldLnR5cGUgPT09IFwidGV4dFwiKSB7XHJcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YVtpXS5kYXRhKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImQtbWF0aFwiKTtcclxuICAgICAgICBjb25zdCBtYXRoID0gZGF0YVtpXS5kYXRhO1xyXG4gICAgICAgIC8vIE92ZXJyaWRlIGFueSBkaXNwbGF5IG1vZGUgZGVmaW5lZCBpbiB0aGUgc2V0dGluZ3Mgd2l0aCB0aGF0XHJcbiAgICAgICAgLy8gZGVmaW5lZCBieSB0aGUgdGV4dCBpdHNlbGZcclxuICAgICAgICBvcHRpb25zQ29weS5kaXNwbGF5TW9kZSA9IGRhdGFbaV0uZGlzcGxheTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGFnLnRleHRDb250ZW50ID0gbWF0aDtcclxuICAgICAgICAgIGlmIChvcHRpb25zQ29weS5kaXNwbGF5TW9kZSkge1xyXG4gICAgICAgICAgICB0YWcuc2V0QXR0cmlidXRlKFwiYmxvY2tcIiwgXCJcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIGthdGV4LlBhcnNlRXJyb3IpKSB7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvcHRpb25zQ29weS5lcnJvckNhbGxiYWNrKFxyXG4gICAgICAgICAgICBcIkthVGVYIGF1dG8tcmVuZGVyOiBGYWlsZWQgdG8gcGFyc2UgYFwiICsgZGF0YVtpXS5kYXRhICsgXCJgIHdpdGggXCIsXHJcbiAgICAgICAgICAgIGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhW2ldLnJhd0RhdGEpKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0YWcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZyYWdtZW50O1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlbmRlckVsZW0gPSBmdW5jdGlvbihlbGVtLCBvcHRpb25zQ29weSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGROb2RlID0gZWxlbS5jaGlsZE5vZGVzW2ldO1xyXG4gICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgLy8gVGV4dCBub2RlXHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGNoaWxkTm9kZS50ZXh0Q29udGVudDtcclxuICAgICAgICBpZiAob3B0aW9uc0NvcHkubWlnaHRIYXZlTWF0aCh0ZXh0KSkge1xyXG4gICAgICAgICAgY29uc3QgZnJhZyA9IHJlbmRlck1hdGhJblRleHQodGV4dCwgb3B0aW9uc0NvcHkpO1xyXG4gICAgICAgICAgaSArPSBmcmFnLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgIGVsZW0ucmVwbGFjZUNoaWxkKGZyYWcsIGNoaWxkTm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgIC8vIEVsZW1lbnQgbm9kZVxyXG4gICAgICAgIGNvbnN0IHNob3VsZFJlbmRlciA9XHJcbiAgICAgICAgICBvcHRpb25zQ29weS5pZ25vcmVkVGFncy5pbmRleE9mKGNoaWxkTm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT1cclxuICAgICAgICAgIC0xO1xyXG5cclxuICAgICAgICBpZiAoc2hvdWxkUmVuZGVyKSB7XHJcbiAgICAgICAgICByZW5kZXJFbGVtKGNoaWxkTm9kZSwgb3B0aW9uc0NvcHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBPdGhlcndpc2UsIGl0J3Mgc29tZXRoaW5nIGVsc2UsIGFuZCBpZ25vcmUgaXQuXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZGVmYXVsdEF1dG9SZW5kZXJPcHRpb25zID0ge1xyXG4gICAgZGVsaW1pdGVyczogW1xyXG4gICAgICB7IGxlZnQ6IFwiJCRcIiwgcmlnaHQ6IFwiJCRcIiwgZGlzcGxheTogdHJ1ZSB9LFxyXG4gICAgICB7IGxlZnQ6IFwiXFxcXFtcIiwgcmlnaHQ6IFwiXFxcXF1cIiwgZGlzcGxheTogdHJ1ZSB9LFxyXG4gICAgICB7IGxlZnQ6IFwiXFxcXChcIiwgcmlnaHQ6IFwiXFxcXClcIiwgZGlzcGxheTogZmFsc2UgfVxyXG4gICAgICAvLyBMYVRlWCB1c2VzIHRoaXMsIGJ1dCBpdCBydWlucyB0aGUgZGlzcGxheSBvZiBub3JtYWwgYCRgIGluIHRleHQ6XHJcbiAgICAgIC8vIHtsZWZ0OiAnJCcsIHJpZ2h0OiAnJCcsIGRpc3BsYXk6IGZhbHNlfSxcclxuICAgIF0sXHJcblxyXG4gICAgaWdub3JlZFRhZ3M6IFtcclxuICAgICAgXCJzY3JpcHRcIixcclxuICAgICAgXCJub3NjcmlwdFwiLFxyXG4gICAgICBcInN0eWxlXCIsXHJcbiAgICAgIFwidGV4dGFyZWFcIixcclxuICAgICAgXCJwcmVcIixcclxuICAgICAgXCJjb2RlXCIsXHJcbiAgICAgIFwic3ZnXCJcclxuICAgIF0sXHJcblxyXG4gICAgZXJyb3JDYWxsYmFjazogZnVuY3Rpb24obXNnLCBlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihtc2csIGVycik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcmVuZGVyTWF0aEluRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcclxuICAgIGlmICghZWxlbSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBlbGVtZW50IHByb3ZpZGVkIHRvIHJlbmRlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvcHRpb25zQ29weSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRBdXRvUmVuZGVyT3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgICBjb25zdCBkZWxpbWl0ZXJTdHJpbmdzID0gb3B0aW9uc0NvcHkuZGVsaW1pdGVycy5mbGF0TWFwKGQgPT4gW1xyXG4gICAgICBkLmxlZnQsXHJcbiAgICAgIGQucmlnaHRcclxuICAgIF0pO1xyXG4gICAgY29uc3QgbWlnaHRIYXZlTWF0aCA9IHRleHQgPT5cclxuICAgICAgZGVsaW1pdGVyU3RyaW5ncy5zb21lKGQgPT4gdGV4dC5pbmRleE9mKGQpICE9PSAtMSk7XHJcbiAgICBvcHRpb25zQ29weS5taWdodEhhdmVNYXRoID0gbWlnaHRIYXZlTWF0aDtcclxuICAgIHJlbmRlckVsZW0oZWxlbSwgb3B0aW9uc0NvcHkpO1xyXG4gIH07XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3Qga2F0ZXhKU1VSTCA9ICdodHRwczovL2Rpc3RpbGwucHViL3RoaXJkLXBhcnR5L2thdGV4L2thdGV4Lm1pbi5qcyc7XHJcbiAgY29uc3Qga2F0ZXhDU1NUYWcgPSAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczovL2Rpc3RpbGwucHViL3RoaXJkLXBhcnR5L2thdGV4L2thdGV4Lm1pbi5jc3NcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPic7XHJcblxyXG4gIGNvbnN0IFQgPSBUZW1wbGF0ZSgnZC1tYXRoJywgYFxyXG4ke2thdGV4Q1NTVGFnfVxyXG48c3R5bGU+XHJcblxyXG46aG9zdCB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIGNvbnRhaW46IHN0eWxlO1xyXG59XHJcblxyXG46aG9zdChbYmxvY2tdKSB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuXHJcbiR7bWF0aH1cclxuPC9zdHlsZT5cclxuPHNwYW4gaWQ9J2thdGV4LWNvbnRhaW5lcic+PC9zcGFuPlxyXG5gKTtcclxuXHJcbiAgLy8gRE1hdGgsIG5vdCBNYXRoLCBiZWNhdXNlIHRoYXQgd291bGQgY29uZmxpY3Qgd2l0aCB0aGUgSlMgYnVpbHQtaW5cclxuICBjbGFzcyBETWF0aCBleHRlbmRzIE11dGF0aW5nKFQoSFRNTEVsZW1lbnQpKSB7XHJcblxyXG4gICAgc3RhdGljIHNldCBrYXRleE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICBETWF0aC5fa2F0ZXhPcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgaWYgKERNYXRoLmthdGV4T3B0aW9ucy5kZWxpbWl0ZXJzKSB7XHJcbiAgICAgICAgaWYgKCFETWF0aC5rYXRleEFkZGVkKSB7XHJcbiAgICAgICAgICBETWF0aC5hZGRLYXRleCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBETWF0aC5rYXRleExvYWRlZENhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBrYXRleE9wdGlvbnMoKSB7XHJcbiAgICAgIGlmICghRE1hdGguX2thdGV4T3B0aW9ucykge1xyXG4gICAgICAgIERNYXRoLl9rYXRleE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBkZWxpbWl0ZXJzOiBbIHsgJ2xlZnQnOickJCcsICdyaWdodCc6JyQkJywgJ2Rpc3BsYXknOiBmYWxzZSB9IF1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBETWF0aC5fa2F0ZXhPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBrYXRleExvYWRlZENhbGxiYWNrKCkge1xyXG4gICAgICAvLyByZW5kZXIgYWxsIGQtbWF0aCB0YWdzXHJcbiAgICAgIGNvbnN0IG1hdGhUYWdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZC1tYXRoJyk7XHJcbiAgICAgIGZvciAoY29uc3QgbWF0aFRhZyBvZiBtYXRoVGFncykge1xyXG4gICAgICAgIG1hdGhUYWcucmVuZGVyQ29udGVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRyYW5zZm9ybSBpbmxpbmUgZGVsaW1pdGVkIG1hdGggdG8gZC1tYXRoIHRhZ3NcclxuICAgICAgaWYgKERNYXRoLmthdGV4T3B0aW9ucy5kZWxpbWl0ZXJzKSB7XHJcbiAgICAgICAgcmVuZGVyTWF0aEluRWxlbWVudChkb2N1bWVudC5ib2R5LCBETWF0aC5rYXRleE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFkZEthdGV4KCkge1xyXG4gICAgICAvLyBjc3MgdGFnIGNhbiB1c2UgdGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvblxyXG4gICAgICBkb2N1bWVudC5oZWFkLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywga2F0ZXhDU1NUYWcpO1xyXG4gICAgICAvLyBzY3JpcHQgdGFnIGhhcyB0byBiZSBjcmVhdGVkIHRvIHdvcmsgcHJvcGVybHlcclxuICAgICAgY29uc3Qgc2NyaXB0VGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgIHNjcmlwdFRhZy5zcmMgPSBrYXRleEpTVVJMO1xyXG4gICAgICBzY3JpcHRUYWcuYXN5bmMgPSB0cnVlO1xyXG4gICAgICBzY3JpcHRUYWcub25sb2FkID0gRE1hdGgua2F0ZXhMb2FkZWRDYWxsYmFjaztcclxuICAgICAgc2NyaXB0VGFnLmNyb3Nzb3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0VGFnKTtcclxuXHJcbiAgICAgIERNYXRoLmthdGV4QWRkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICBjb25zdCBsb2NhbE9wdGlvbnMgPSB7IGRpc3BsYXlNb2RlOiB0aGlzLmhhc0F0dHJpYnV0ZSgnYmxvY2snKSB9O1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihsb2NhbE9wdGlvbnMsIERNYXRoLmthdGV4T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcbiAgICAgIGlmICghRE1hdGgua2F0ZXhBZGRlZCkge1xyXG4gICAgICAgIERNYXRoLmFkZEthdGV4KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJDb250ZW50KCkge1xyXG4gICAgICBpZiAodHlwZW9mIGthdGV4ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcja2F0ZXgtY29udGFpbmVyJyk7XHJcbiAgICAgICAga2F0ZXgucmVuZGVyKHRoaXMudGV4dENvbnRlbnQsIGNvbnRhaW5lciwgdGhpcy5vcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIERNYXRoLmthdGV4QWRkZWQgPSBmYWxzZTtcclxuICBETWF0aC5pbmxpbmVNYXRoUmVuZGVyZWQgPSBmYWxzZTtcclxuICB3aW5kb3cuRE1hdGggPSBETWF0aDsgLy8gVE9ETzogY2hlY2sgaWYgdGhpcyBjYW4gYmUgcmVtb3ZlZCwgb3IgaWYgd2Ugc2hvdWxkIGV4cG9zZSBhIGRpc3RpbGwgZ2xvYmFsXHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuICAvL1xyXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gIC8vXHJcbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICAvL1xyXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG5cclxuICBmdW5jdGlvbiBjb2xsZWN0X2NpdGF0aW9ucyhkb20gPSBkb2N1bWVudCkge1xyXG4gICAgY29uc3QgY2l0YXRpb25zID0gbmV3IFNldCgpO1xyXG4gICAgY29uc3QgY2l0ZVRhZ3MgPSBkb20ucXVlcnlTZWxlY3RvckFsbChcImQtY2l0ZVwiKTtcclxuICAgIGZvciAoY29uc3QgdGFnIG9mIGNpdGVUYWdzKSB7XHJcbiAgICAgIGNvbnN0IGtleVN0cmluZyA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJrZXlcIikgfHwgdGFnLmdldEF0dHJpYnV0ZShcImJpYnRleC1rZXlcIik7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlTdHJpbmcuc3BsaXQoXCIsXCIpLm1hcChrID0+IGsudHJpbSgpKTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgIGNpdGF0aW9ucy5hZGQoa2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFsuLi5jaXRhdGlvbnNdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXV0aG9yX3N0cmluZyhlbnQsIHRlbXBsYXRlLCBzZXAsIGZpbmFsU2VwKSB7XHJcbiAgICBpZiAoZW50LmF1dGhvciA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgdmFyIG5hbWVzID0gZW50LmF1dGhvci5zcGxpdChcIiBhbmQgXCIpO1xyXG4gICAgbGV0IG5hbWVfc3RyaW5ncyA9IG5hbWVzLm1hcChuYW1lID0+IHtcclxuICAgICAgbmFtZSA9IG5hbWUudHJpbSgpO1xyXG4gICAgICBpZiAobmFtZS5pbmRleE9mKFwiLFwiKSAhPSAtMSkge1xyXG4gICAgICAgIHZhciBsYXN0ID0gbmFtZS5zcGxpdChcIixcIilbMF0udHJpbSgpO1xyXG4gICAgICAgIHZhciBmaXJzdHMgPSBuYW1lLnNwbGl0KFwiLFwiKVsxXTtcclxuICAgICAgfSBlbHNlIGlmIChuYW1lLmluZGV4T2YoXCIgXCIpICE9IC0xKSB7XHJcbiAgICAgICAgdmFyIGxhc3QgPSBuYW1lXHJcbiAgICAgICAgICAuc3BsaXQoXCIgXCIpXHJcbiAgICAgICAgICAuc2xpY2UoLTEpWzBdXHJcbiAgICAgICAgICAudHJpbSgpO1xyXG4gICAgICAgIHZhciBmaXJzdHMgPSBuYW1lXHJcbiAgICAgICAgICAuc3BsaXQoXCIgXCIpXHJcbiAgICAgICAgICAuc2xpY2UoMCwgLTEpXHJcbiAgICAgICAgICAuam9pbihcIiBcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGxhc3QgPSBuYW1lLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgaW5pdGlhbHMgPSBcIlwiO1xyXG4gICAgICBpZiAoZmlyc3RzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGluaXRpYWxzID0gZmlyc3RzXHJcbiAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAuc3BsaXQoXCIgXCIpXHJcbiAgICAgICAgICAubWFwKHMgPT4gcy50cmltKClbMF0pO1xyXG4gICAgICAgIGluaXRpYWxzID0gaW5pdGlhbHMuam9pbihcIi5cIikgKyBcIi5cIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcGxhdGVcclxuICAgICAgICAucmVwbGFjZShcIiR7Rn1cIiwgZmlyc3RzKVxyXG4gICAgICAgIC5yZXBsYWNlKFwiJHtMfVwiLCBsYXN0KVxyXG4gICAgICAgIC5yZXBsYWNlKFwiJHtJfVwiLCBpbml0aWFscylcclxuICAgICAgICAudHJpbSgpOyAvLyBpbiBjYXNlIG9uZSBvZiBmaXJzdCBvciBsYXN0IHdhcyBlbXB0eVxyXG4gICAgfSk7XHJcbiAgICBpZiAobmFtZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB2YXIgc3RyID0gbmFtZV9zdHJpbmdzLnNsaWNlKDAsIG5hbWVzLmxlbmd0aCAtIDEpLmpvaW4oc2VwKTtcclxuICAgICAgc3RyICs9IChmaW5hbFNlcCB8fCBzZXApICsgbmFtZV9zdHJpbmdzW25hbWVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5hbWVfc3RyaW5nc1swXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHZlbnVlX3N0cmluZyhlbnQpIHtcclxuICAgIHZhciBjaXRlID0gZW50LmpvdXJuYWwgfHwgZW50LmJvb2t0aXRsZSB8fCBcIlwiO1xyXG4gICAgaWYgKFwidm9sdW1lXCIgaW4gZW50KSB7XHJcbiAgICAgIHZhciBpc3N1ZSA9IGVudC5pc3N1ZSB8fCBlbnQubnVtYmVyO1xyXG4gICAgICBpc3N1ZSA9IGlzc3VlICE9IHVuZGVmaW5lZCA/IFwiKFwiICsgaXNzdWUgKyBcIilcIiA6IFwiXCI7XHJcbiAgICAgIGNpdGUgKz0gXCIsIFZvbCBcIiArIGVudC52b2x1bWUgKyBpc3N1ZTtcclxuICAgIH1cclxuICAgIGlmIChcInBhZ2VzXCIgaW4gZW50KSB7XHJcbiAgICAgIGNpdGUgKz0gXCIsIHBwLiBcIiArIGVudC5wYWdlcztcclxuICAgIH1cclxuICAgIGlmIChjaXRlICE9IFwiXCIpIGNpdGUgKz0gXCIuIFwiO1xyXG4gICAgaWYgKFwicHVibGlzaGVyXCIgaW4gZW50KSB7XHJcbiAgICAgIGNpdGUgKz0gZW50LnB1Ymxpc2hlcjtcclxuICAgICAgaWYgKGNpdGVbY2l0ZS5sZW5ndGggLSAxXSAhPSBcIi5cIikgY2l0ZSArPSBcIi5cIjtcclxuICAgIH1cclxuICAgIHJldHVybiBjaXRlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGlua19zdHJpbmcoZW50KSB7XHJcbiAgICBpZiAoXCJ1cmxcIiBpbiBlbnQpIHtcclxuICAgICAgdmFyIHVybCA9IGVudC51cmw7XHJcbiAgICAgIHZhciBhcnhpdl9tYXRjaCA9IC9hcnhpdlxcLm9yZ1xcL2Fic1xcLyhbMC05XFwuXSopLy5leGVjKHVybCk7XHJcbiAgICAgIGlmIChhcnhpdl9tYXRjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgdXJsID0gYGh0dHA6Ly9hcnhpdi5vcmcvcGRmLyR7YXJ4aXZfbWF0Y2hbMV19LnBkZmA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh1cmwuc2xpY2UoLTQpID09IFwiLnBkZlwiKSB7XHJcbiAgICAgICAgdmFyIGxhYmVsID0gXCJQREZcIjtcclxuICAgICAgfSBlbHNlIGlmICh1cmwuc2xpY2UoLTUpID09IFwiLmh0bWxcIikge1xyXG4gICAgICAgIHZhciBsYWJlbCA9IFwiSFRNTFwiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBgICZlbnNwOzxhIGhyZWY9XCIke3VybH1cIj5bJHtsYWJlbCB8fCBcImxpbmtcIn1dPC9hPmA7XHJcbiAgICB9IC8qIGVsc2UgaWYgKFwiZG9pXCIgaW4gZW50KXtcclxuICAgICAgcmV0dXJuIGAgJmVuc3A7PGEgaHJlZj1cImh0dHBzOi8vZG9pLm9yZy8ke2VudC5kb2l9XCIgPltET0ldPC9hPmA7XHJcbiAgICB9Ki8gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuICBmdW5jdGlvbiBkb2lfc3RyaW5nKGVudCwgbmV3X2xpbmUpIHtcclxuICAgIGlmIChcImRvaVwiIGluIGVudCkge1xyXG4gICAgICByZXR1cm4gYCR7bmV3X2xpbmUgPyBcIjxicj5cIiA6IFwiXCJ9IDxhIGhyZWY9XCJodHRwczovL2RvaS5vcmcvJHtcclxuICAgICAgZW50LmRvaVxyXG4gICAgfVwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7XCI+RE9JOiAke2VudC5kb2l9PC9hPmA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRpdGxlX3N0cmluZyhlbnQpIHtcclxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPicgKyBlbnQudGl0bGUgKyBcIjwvc3Bhbj4gXCI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBiaWJsaW9ncmFwaHlfY2l0ZShlbnQsIGZhbmN5KSB7XHJcbiAgICBpZiAoZW50KSB7XHJcbiAgICAgIHZhciBjaXRlID0gdGl0bGVfc3RyaW5nKGVudCk7XHJcbiAgICAgIGNpdGUgKz0gbGlua19zdHJpbmcoZW50KSArIFwiPGJyPlwiO1xyXG4gICAgICBpZiAoZW50LmF1dGhvcikge1xyXG4gICAgICAgIGNpdGUgKz0gYXV0aG9yX3N0cmluZyhlbnQsIFwiJHtMfSwgJHtJfVwiLCBcIiwgXCIsIFwiIGFuZCBcIik7XHJcbiAgICAgICAgaWYgKGVudC55ZWFyIHx8IGVudC5kYXRlKSB7XHJcbiAgICAgICAgICBjaXRlICs9IFwiLCBcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVudC55ZWFyIHx8IGVudC5kYXRlKSB7XHJcbiAgICAgICAgY2l0ZSArPSAoZW50LnllYXIgfHwgZW50LmRhdGUpICsgXCIuIFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNpdGUgKz0gXCIuIFwiO1xyXG4gICAgICB9XHJcbiAgICAgIGNpdGUgKz0gdmVudWVfc3RyaW5nKGVudCk7XHJcbiAgICAgIGNpdGUgKz0gZG9pX3N0cmluZyhlbnQpO1xyXG4gICAgICByZXR1cm4gY2l0ZTtcclxuICAgICAgLyp2YXIgY2l0ZSA9ICBhdXRob3Jfc3RyaW5nKGVudCwgXCIke0x9LCAke0l9XCIsIFwiLCBcIiwgXCIgYW5kIFwiKTtcclxuICAgICAgaWYgKGVudC55ZWFyIHx8IGVudC5kYXRlKXtcclxuICAgICAgICBjaXRlICs9IFwiLCBcIiArIChlbnQueWVhciB8fCBlbnQuZGF0ZSkgKyBcIi4gXCJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjaXRlICs9IFwiLiBcIlxyXG4gICAgICB9XHJcbiAgICAgIGNpdGUgKz0gXCI8Yj5cIiArIGVudC50aXRsZSArIFwiPC9iPi4gXCI7XHJcbiAgICAgIGNpdGUgKz0gdmVudWVfc3RyaW5nKGVudCk7XHJcbiAgICAgIGNpdGUgKz0gZG9pX3N0cmluZyhlbnQpO1xyXG4gICAgICBjaXRlICs9IGxpbmtfc3RyaW5nKGVudCk7XHJcbiAgICAgIHJldHVybiBjaXRlKi9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcIj9cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhvdmVyX2NpdGUoZW50KSB7XHJcbiAgICBpZiAoZW50KSB7XHJcbiAgICAgIHZhciBjaXRlID0gXCJcIjtcclxuICAgICAgY2l0ZSArPSBcIjxzdHJvbmc+XCIgKyBlbnQudGl0bGUgKyBcIjwvc3Ryb25nPlwiO1xyXG4gICAgICBjaXRlICs9IGxpbmtfc3RyaW5nKGVudCk7XHJcbiAgICAgIGNpdGUgKz0gXCI8YnI+XCI7XHJcblxyXG4gICAgICB2YXIgYV9zdHIgPSBhdXRob3Jfc3RyaW5nKGVudCwgXCIke0l9ICR7TH1cIiwgXCIsIFwiKSArIFwiLlwiO1xyXG4gICAgICB2YXIgdl9zdHIgPVxyXG4gICAgICAgIHZlbnVlX3N0cmluZyhlbnQpLnRyaW0oKSArIFwiIFwiICsgZW50LnllYXIgKyBcIi4gXCIgKyBkb2lfc3RyaW5nKGVudCwgdHJ1ZSk7XHJcblxyXG4gICAgICBpZiAoKGFfc3RyICsgdl9zdHIpLmxlbmd0aCA8IE1hdGgubWluKDQwLCBlbnQudGl0bGUubGVuZ3RoKSkge1xyXG4gICAgICAgIGNpdGUgKz0gYV9zdHIgKyBcIiBcIiArIHZfc3RyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNpdGUgKz0gYV9zdHIgKyBcIjxicj5cIiArIHZfc3RyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjaXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiP1wiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZG9tQ29udGVudExvYWRlZCgpIHtcclxuICAgIHJldHVybiBbJ2ludGVyYWN0aXZlJywgJ2NvbXBsZXRlJ10uaW5kZXhPZihkb2N1bWVudC5yZWFkeVN0YXRlKSAhPT0gLTE7XHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcbiAgLy9cclxuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICAvL1xyXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAgLy9cclxuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuXHJcbiAgZnVuY3Rpb24gX21vdmVMZWdhY3lBZmZpbGlhdGlvbkZvcm1hdEludG9BcnJheShmcm9udE1hdHRlcikge1xyXG4gICAgLy8gYXV0aG9ycyB1c2VkIHRvIGhhdmUgcHJvcG9lcnRpZXMgXCJhZmZpbGlhdGlvblwiIGFuZCBcImFmZmlsaWF0aW9uVVJMXCIuXHJcbiAgICAvLyBXZSBub3cgZW5jb3VyYWdlIHVzaW5nIGFuIGFycmF5IGZvciBhZmZpbGlhdGlvbnMgY29udGFpbmluZyBvYmplY3RzIHdpdGhcclxuICAgIC8vIHByb3BlcnRpZXMgXCJuYW1lXCIgYW5kIFwidXJsXCIuXHJcbiAgICBmb3IgKGxldCBhdXRob3Igb2YgZnJvbnRNYXR0ZXIuYXV0aG9ycykge1xyXG4gICAgICBjb25zdCBoYXNPbGRTdHlsZSA9IEJvb2xlYW4oYXV0aG9yLmFmZmlsaWF0aW9uKTtcclxuICAgICAgY29uc3QgaGFzTmV3U3R5bGUgPSBCb29sZWFuKGF1dGhvci5hZmZpbGlhdGlvbnMpO1xyXG4gICAgICBpZiAoIWhhc09sZFN0eWxlKSBjb250aW51ZTtcclxuICAgICAgaWYgKGhhc05ld1N0eWxlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBBdXRob3IgJHthdXRob3IuYXV0aG9yfSBoYXMgYm90aCBvbGQtc3R5bGUgKFwiYWZmaWxpYXRpb25cIiAmIFwiYWZmaWxpYXRpb25VUkxcIikgYW5kIG5ldyBzdHlsZSAoXCJhZmZpbGlhdGlvbnNcIikgYWZmaWxpYXRpb24gaW5mb3JtYXRpb24hYCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IG5ld0FmZmlsaWF0aW9uID0ge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IGF1dGhvci5hZmZpbGlhdGlvblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGF1dGhvci5hZmZpbGlhdGlvblVSTCkgbmV3QWZmaWxpYXRpb24udXJsID0gYXV0aG9yLmFmZmlsaWF0aW9uVVJMO1xyXG4gICAgICAgIGF1dGhvci5hZmZpbGlhdGlvbnMgPSBbbmV3QWZmaWxpYXRpb25dO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJvbnRNYXR0ZXJcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXIoZWxlbWVudCkge1xyXG4gICAgY29uc3Qgc2NyaXB0VGFnID0gZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgIGlmIChzY3JpcHRUYWcpIHtcclxuICAgICAgY29uc3QgdHlwZSA9IHNjcmlwdFRhZy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcclxuICAgICAgaWYgKHR5cGUuc3BsaXQoJy8nKVsxXSA9PSAnanNvbicpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gc2NyaXB0VGFnLnRleHRDb250ZW50O1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcbiAgICAgICAgcmV0dXJuIF9tb3ZlTGVnYWN5QWZmaWxpYXRpb25Gb3JtYXRJbnRvQXJyYXkocGFyc2VkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdEaXN0aWxsIG9ubHkgc3VwcG9ydHMgSlNPTiBmcm9udG1hdHRlciB0YWdzIGFueW1vcmU7IG5vIG1vcmUgWUFNTC4nKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignWW91IGFkZGVkIGEgZnJvbnRtYXR0ZXIgdGFnIGJ1dCBkaWQgbm90IHByb3ZpZGUgYSBzY3JpcHQgdGFnIHdpdGggZnJvbnQgbWF0dGVyIGRhdGEgaW4gaXQuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBvdXIgdGVtcGxhdGVzLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgY2xhc3MgRnJvbnRNYXR0ZXIkMSBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2QtZnJvbnQtbWF0dGVyJzsgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWV9O1xyXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCAoZW50cmllcykgPT4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xyXG4gICAgICAgICAgaWYgKGVudHJ5LnRhcmdldC5ub2RlTmFtZSA9PT0gJ1NDUklQVCcgfHwgZW50cnkudHlwZSA9PT0gJ2NoYXJhY3RlckRhdGEnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBwYXJzZUZyb250bWF0dGVyKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmeShkYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5vdGlmeShkYXRhKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGRldGFpbDogZGF0YSwgYnViYmxlczogdHJ1ZSB9O1xyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25Gcm9udE1hdHRlckNoYW5nZWQnLCBvcHRpb25zKTtcclxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIC8vIG5vIGFwcGVuZGl4IC0+IGFkZCBhcHBlbmRpeFxyXG4gIC8vIHRpdGxlIGluIGZyb250LCBubyBoMSAtPiBhZGQgaXRcclxuICAvLyBubyB0aXRsZSBpbiBmcm9udCwgaDEgLT4gcmVhZCBhbmQgcHV0IGludG8gZnJvbnRNYXR0ZXJcclxuICAvLyBmb290bm90ZSAtPiBmb290bm90ZSBsaXN0XHJcbiAgLy8gYnJlYWsgdXAgYmliXHJcbiAgLy8gaWYgY2l0YXRpb24sIG5vIGJpYi1saXN0IC0+IGFkZCBjaXRhdGlvbi1saXN0XHJcblxyXG4gIC8vIGlmIGF1dGhvcnMsIG5vIGJ5bGluZSAtPiBhZGQgYnlsaW5lXHJcblxyXG4gIGZ1bmN0aW9uIG9wdGlvbmFsQ29tcG9uZW50cyhkb20sIGRhdGEpIHtcclxuICAgIGNvbnN0IGJvZHkgPSBkb20uYm9keTtcclxuICAgIGNvbnN0IGFydGljbGUgPSBib2R5LnF1ZXJ5U2VsZWN0b3IoJ2QtYXJ0aWNsZScpO1xyXG5cclxuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW4gYXJ0aWNsZSB0YWcsIHNvbWV0aGluZyB3ZWlyZCBpcyBnb2luZyBvbuKAlGdpdmluZyB1cC5cclxuICAgIGlmICghYXJ0aWNsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIGQtYXJ0aWNsZSB0YWcgZm91bmQ7IHNraXBwaW5nIGFkZGluZyBvcHRpb25hbCBjb21wb25lbnRzIScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGJ5bGluZSA9IGRvbS5xdWVyeVNlbGVjdG9yKCdkLWJ5bGluZScpO1xyXG4gICAgaWYgKCFieWxpbmUpIHtcclxuICAgICAgaWYgKGRhdGEuYXV0aG9ycykge1xyXG4gICAgICAgIGJ5bGluZSA9IGRvbS5jcmVhdGVFbGVtZW50KCdkLWJ5bGluZScpO1xyXG4gICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKGJ5bGluZSwgYXJ0aWNsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdObyBhdXRob3JzIGZvdW5kIGluIGZyb250IG1hdHRlcjsgcGxlYXNlIGFkZCB0aGVtIGJlZm9yZSBzdWJtaXNzaW9uIScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRpdGxlID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJ2QtdGl0bGUnKTtcclxuICAgIGlmICghdGl0bGUpIHtcclxuICAgICAgdGl0bGUgPSBkb20uY3JlYXRlRWxlbWVudCgnZC10aXRsZScpO1xyXG4gICAgICBib2R5Lmluc2VydEJlZm9yZSh0aXRsZSwgYnlsaW5lKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaDEgPSB0aXRsZS5xdWVyeVNlbGVjdG9yKCdoMScpO1xyXG4gICAgaWYgKCFoMSkge1xyXG4gICAgICBoMSA9IGRvbS5jcmVhdGVFbGVtZW50KCdoMScpO1xyXG4gICAgICBoMS50ZXh0Q29udGVudCA9IGRhdGEudGl0bGU7XHJcbiAgICAgIHRpdGxlLmluc2VydEJlZm9yZShoMSwgdGl0bGUuZmlyc3RDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGFzUGFzc3dvcmQgPSB0eXBlb2YgZGF0YS5wYXNzd29yZCAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICBsZXQgaW50ZXJzdGl0aWFsID0gYm9keS5xdWVyeVNlbGVjdG9yKCdkLWludGVyc3RpdGlhbCcpO1xyXG4gICAgaWYgKGhhc1Bhc3N3b3JkICYmICFpbnRlcnN0aXRpYWwpIHtcclxuICAgICAgY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgICAgIGNvbnN0IG9uTG9jYWxob3N0ID0gaW5Ccm93c2VyICYmIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0Jyk7XHJcbiAgICAgIGlmICghaW5Ccm93c2VyIHx8ICFvbkxvY2FsaG9zdCkge1xyXG4gICAgICAgIGludGVyc3RpdGlhbCA9IGRvbS5jcmVhdGVFbGVtZW50KCdkLWludGVyc3RpdGlhbCcpO1xyXG4gICAgICAgIGludGVyc3RpdGlhbC5wYXNzd29yZCA9IGRhdGEucGFzc3dvcmQ7XHJcbiAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoaW50ZXJzdGl0aWFsLCBib2R5LmZpcnN0Q2hpbGQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFoYXNQYXNzd29yZCAmJiBpbnRlcnN0aXRpYWwpIHtcclxuICAgICAgaW50ZXJzdGl0aWFsLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFwcGVuZGl4ID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJ2QtYXBwZW5kaXgnKTtcclxuICAgIGlmICghYXBwZW5kaXgpIHtcclxuICAgICAgYXBwZW5kaXggPSBkb20uY3JlYXRlRWxlbWVudCgnZC1hcHBlbmRpeCcpO1xyXG4gICAgICBkb20uYm9keS5hcHBlbmRDaGlsZChhcHBlbmRpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZvb3Rub3RlTGlzdCA9IGRvbS5xdWVyeVNlbGVjdG9yKCdkLWZvb3Rub3RlLWxpc3QnKTtcclxuICAgIGlmICghZm9vdG5vdGVMaXN0KSB7XHJcbiAgICAgIGZvb3Rub3RlTGlzdCA9IGRvbS5jcmVhdGVFbGVtZW50KCdkLWZvb3Rub3RlLWxpc3QnKTtcclxuICAgICAgYXBwZW5kaXguYXBwZW5kQ2hpbGQoZm9vdG5vdGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2l0YXRpb25MaXN0ID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJ2QtY2l0YXRpb24tbGlzdCcpO1xyXG4gICAgaWYgKCFjaXRhdGlvbkxpc3QpIHtcclxuICAgICAgY2l0YXRpb25MaXN0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ2QtY2l0YXRpb24tbGlzdCcpO1xyXG4gICAgICBhcHBlbmRpeC5hcHBlbmRDaGlsZChjaXRhdGlvbkxpc3QpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgZnJvbnRNYXR0ZXIgPSBuZXcgRnJvbnRNYXR0ZXIoKTtcclxuXHJcbiAgY29uc3QgQ29udHJvbGxlciA9IHtcclxuICAgIGZyb250TWF0dGVyOiBmcm9udE1hdHRlcixcclxuICAgIHdhaXRpbmdPbjoge1xyXG4gICAgICBiaWJsaW9ncmFwaHk6IFtdLFxyXG4gICAgICBjaXRhdGlvbnM6IFtdXHJcbiAgICB9LFxyXG4gICAgbGlzdGVuZXJzOiB7XHJcbiAgICAgIG9uQ2l0ZUtleUNyZWF0ZWQoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCBbY2l0ZVRhZywga2V5c10gPSBldmVudC5kZXRhaWw7XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGNpdGF0aW9uc1xyXG4gICAgICAgIGlmICghZnJvbnRNYXR0ZXIuY2l0YXRpb25zQ29sbGVjdGVkKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdvbkNpdGVLZXlDcmVhdGVkLCBidXQgdW5yZXNvbHZlZCBkZXBlbmRlbmN5IChcImNpdGF0aW9uc1wiKS4gRW5xdWVpbmcuJyk7XHJcbiAgICAgICAgICBDb250cm9sbGVyLndhaXRpbmdPbi5jaXRhdGlvbnMucHVzaCgoKSA9PlxyXG4gICAgICAgICAgICBDb250cm9sbGVyLmxpc3RlbmVycy5vbkNpdGVLZXlDcmVhdGVkKGV2ZW50KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGEgbG9hZGVkIGJpYmxpb2dyYXBoeVxyXG4gICAgICAgIGlmICghZnJvbnRNYXR0ZXIuYmlibGlvZ3JhcGh5UGFyc2VkKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdvbkNpdGVLZXlDcmVhdGVkLCBidXQgdW5yZXNvbHZlZCBkZXBlbmRlbmN5IChcImJpYmxpb2dyYXBoeVwiKS4gRW5xdWVpbmcuJyk7XHJcbiAgICAgICAgICBDb250cm9sbGVyLndhaXRpbmdPbi5iaWJsaW9ncmFwaHkucHVzaCgoKSA9PlxyXG4gICAgICAgICAgICBDb250cm9sbGVyLmxpc3RlbmVycy5vbkNpdGVLZXlDcmVhdGVkKGV2ZW50KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBrZXlzLm1hcChrZXkgPT4gZnJvbnRNYXR0ZXIuY2l0YXRpb25zLmluZGV4T2Yoa2V5KSk7XHJcbiAgICAgICAgY2l0ZVRhZy5udW1iZXJzID0gbnVtYmVycztcclxuICAgICAgICBjb25zdCBlbnRyaWVzID0ga2V5cy5tYXAoa2V5ID0+IGZyb250TWF0dGVyLmJpYmxpb2dyYXBoeS5nZXQoa2V5KSk7XHJcbiAgICAgICAgY2l0ZVRhZy5lbnRyaWVzID0gZW50cmllcztcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uQ2l0ZUtleUNoYW5nZWQoKSB7XHJcbiAgICAgICAgLy8gY29uc3QgW2NpdGVUYWcsIGtleXNdID0gZXZlbnQuZGV0YWlsO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY2l0YXRpb25zXHJcbiAgICAgICAgZnJvbnRNYXR0ZXIuY2l0YXRpb25zID0gY29sbGVjdF9jaXRhdGlvbnMoKTtcclxuICAgICAgICBmcm9udE1hdHRlci5jaXRhdGlvbnNDb2xsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGZvciAoY29uc3Qgd2FpdGluZ0NhbGxiYWNrIG9mIENvbnRyb2xsZXIud2FpdGluZ09uLmNpdGF0aW9ucy5zbGljZSgpKSB7XHJcbiAgICAgICAgICB3YWl0aW5nQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBiaWJsaW9ncmFwaHlcclxuICAgICAgICBjb25zdCBjaXRhdGlvbkxpc3RUYWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZC1jaXRhdGlvbi1saXN0XCIpO1xyXG4gICAgICAgIGNvbnN0IGJpYmxpb2dyYXBoeUVudHJpZXMgPSBuZXcgTWFwKFxyXG4gICAgICAgICAgZnJvbnRNYXR0ZXIuY2l0YXRpb25zLm1hcChjaXRhdGlvbktleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbY2l0YXRpb25LZXksIGZyb250TWF0dGVyLmJpYmxpb2dyYXBoeS5nZXQoY2l0YXRpb25LZXkpXTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjaXRhdGlvbkxpc3RUYWcuY2l0YXRpb25zID0gYmlibGlvZ3JhcGh5RW50cmllcztcclxuXHJcbiAgICAgICAgY29uc3QgY2l0ZVRhZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiZC1jaXRlXCIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgY2l0ZVRhZyBvZiBjaXRlVGFncykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coY2l0ZVRhZyk7XHJcbiAgICAgICAgICBjb25zdCBrZXlzID0gY2l0ZVRhZy5rZXlzO1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVycyA9IGtleXMubWFwKGtleSA9PiBmcm9udE1hdHRlci5jaXRhdGlvbnMuaW5kZXhPZihrZXkpKTtcclxuICAgICAgICAgIGNpdGVUYWcubnVtYmVycyA9IG51bWJlcnM7XHJcbiAgICAgICAgICBjb25zdCBlbnRyaWVzID0ga2V5cy5tYXAoa2V5ID0+IGZyb250TWF0dGVyLmJpYmxpb2dyYXBoeS5nZXQoa2V5KSk7XHJcbiAgICAgICAgICBjaXRlVGFnLmVudHJpZXMgPSBlbnRyaWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uQ2l0ZUtleVJlbW92ZWQoZXZlbnQpIHtcclxuICAgICAgICBDb250cm9sbGVyLmxpc3RlbmVycy5vbkNpdGVLZXlDaGFuZ2VkKGV2ZW50KTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uQmlibGlvZ3JhcGh5Q2hhbmdlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IGNpdGF0aW9uTGlzdFRhZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkLWNpdGF0aW9uLWxpc3RcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGJpYmxpb2dyYXBoeSA9IGV2ZW50LmRldGFpbDtcclxuXHJcbiAgICAgICAgZnJvbnRNYXR0ZXIuYmlibGlvZ3JhcGh5ID0gYmlibGlvZ3JhcGh5O1xyXG4gICAgICAgIGZyb250TWF0dGVyLmJpYmxpb2dyYXBoeVBhcnNlZCA9IHRydWU7XHJcbiAgICAgICAgZm9yIChjb25zdCB3YWl0aW5nQ2FsbGJhY2sgb2YgQ29udHJvbGxlci53YWl0aW5nT24uYmlibGlvZ3JhcGh5LnNsaWNlKCkpIHtcclxuICAgICAgICAgIHdhaXRpbmdDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgY2l0YXRpb25zXHJcbiAgICAgICAgaWYgKCFmcm9udE1hdHRlci5jaXRhdGlvbnNDb2xsZWN0ZWQpIHtcclxuICAgICAgICAgIENvbnRyb2xsZXIud2FpdGluZ09uLmNpdGF0aW9ucy5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBDb250cm9sbGVyLmxpc3RlbmVycy5vbkJpYmxpb2dyYXBoeUNoYW5nZWQoe1xyXG4gICAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgICAgICAgIGRldGFpbDogZXZlbnQuZGV0YWlsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2l0YXRpb25MaXN0VGFnLmhhc0F0dHJpYnV0ZShcImRpc3RpbGwtcHJlcmVuZGVyZWRcIikpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJDaXRhdGlvbiBsaXN0IHdhcyBwcmVyZW5kZXJlZDsgbm90IHVwZGF0aW5nIGl0LlwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZW50cmllcyA9IG5ldyBNYXAoXHJcbiAgICAgICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9ucy5tYXAoY2l0YXRpb25LZXkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbY2l0YXRpb25LZXksIGZyb250TWF0dGVyLmJpYmxpb2dyYXBoeS5nZXQoY2l0YXRpb25LZXkpXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjaXRhdGlvbkxpc3RUYWcuY2l0YXRpb25zID0gZW50cmllcztcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvbkZvb3Rub3RlQ2hhbmdlZCgpIHtcclxuICAgICAgICAvLyBjb25zdCBmb290bm90ZSA9IGV2ZW50LmRldGFpbDtcclxuICAgICAgICAvL1RPRE86IG9wdGltaXplIHRvIG9ubHkgdXBkYXRlIGN1cnJlbnQgZm9vdG5vdGVcclxuICAgICAgICBjb25zdCBmb290bm90ZXNMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImQtZm9vdG5vdGUtbGlzdFwiKTtcclxuICAgICAgICBpZiAoZm9vdG5vdGVzTGlzdCkge1xyXG4gICAgICAgICAgY29uc3QgZm9vdG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImQtZm9vdG5vdGVcIik7XHJcbiAgICAgICAgICBmb290bm90ZXNMaXN0LmZvb3Rub3RlcyA9IGZvb3Rub3RlcztcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvbkZyb250TWF0dGVyQ2hhbmdlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kZXRhaWw7XHJcbiAgICAgICAgbWVyZ2VGcm9tWU1MRnJvbnRtYXR0ZXIoZnJvbnRNYXR0ZXIsIGRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBpbnRlcnN0aXRpYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZC1pbnRlcnN0aXRpYWxcIik7XHJcbiAgICAgICAgaWYgKGludGVyc3RpdGlhbCkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmcm9udE1hdHRlci5wYXNzd29yZCAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBpbnRlcnN0aXRpYWwucGFzc3dvcmQgPSBmcm9udE1hdHRlci5wYXNzd29yZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGludGVyc3RpdGlhbC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGludGVyc3RpdGlhbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmVyZW5kZXJlZCA9IGRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKFwiZGlzdGlsbC1wcmVyZW5kZXJlZFwiKTtcclxuICAgICAgICBpZiAoIXByZXJlbmRlcmVkICYmIGRvbUNvbnRlbnRMb2FkZWQoKSkge1xyXG4gICAgICAgICAgb3B0aW9uYWxDb21wb25lbnRzKGRvY3VtZW50LCBmcm9udE1hdHRlcik7XHJcblxyXG4gICAgICAgICAgY29uc3QgYXBwZW5kaXggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZGlzdGlsbC1hcHBlbmRpeFwiKTtcclxuICAgICAgICAgIGlmIChhcHBlbmRpeCkge1xyXG4gICAgICAgICAgICBhcHBlbmRpeC5mcm9udE1hdHRlciA9IGZyb250TWF0dGVyO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGJ5bGluZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkLWJ5bGluZVwiKTtcclxuICAgICAgICAgIGlmIChieWxpbmUpIHtcclxuICAgICAgICAgICAgYnlsaW5lLmZyb250TWF0dGVyID0gZnJvbnRNYXR0ZXI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGEua2F0ZXgpIHtcclxuICAgICAgICAgICAgRE1hdGgua2F0ZXhPcHRpb25zID0gZGF0YS5rYXRleDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBET01Db250ZW50TG9hZGVkKCkge1xyXG4gICAgICAgIGlmIChDb250cm9sbGVyLmxvYWRlZCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIkNvbnRyb2xsZXIgcmVjZWl2ZWQgRE9NQ29udGVudExvYWRlZCBidXQgd2FzIGFscmVhZHkgbG9hZGVkIVwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIWRvbUNvbnRlbnRMb2FkZWQoKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIkNvbnRyb2xsZXIgcmVjZWl2ZWQgRE9NQ29udGVudExvYWRlZCBhdCBkb2N1bWVudC5yZWFkeVN0YXRlOiBcIiArXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVhZHlTdGF0ZSArXHJcbiAgICAgICAgICAgICAgXCIhXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIENvbnRyb2xsZXIubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCA0OiBDb250cm9sbGVyIHJ1bm5pbmcgRE9NQ29udGVudExvYWRlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZyb250TWF0dGVyVGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImQtZnJvbnQtbWF0dGVyXCIpO1xyXG4gICAgICAgIGlmIChmcm9udE1hdHRlclRhZykge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHBhcnNlRnJvbnRtYXR0ZXIoZnJvbnRNYXR0ZXJUYWcpO1xyXG4gICAgICAgICAgQ29udHJvbGxlci5saXN0ZW5lcnMub25Gcm9udE1hdHRlckNoYW5nZWQoeyBkZXRhaWw6IGRhdGEgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNvbHZpbmcgXCJjaXRhdGlvbnNcIiBkZXBlbmRlbmN5IGR1ZSB0byBpbml0aWFsIERPTSBsb2FkXHJcbiAgICAgICAgZnJvbnRNYXR0ZXIuY2l0YXRpb25zID0gY29sbGVjdF9jaXRhdGlvbnMoKTtcclxuICAgICAgICBmcm9udE1hdHRlci5jaXRhdGlvbnNDb2xsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGZvciAoY29uc3Qgd2FpdGluZ0NhbGxiYWNrIG9mIENvbnRyb2xsZXIud2FpdGluZ09uLmNpdGF0aW9ucy5zbGljZSgpKSB7XHJcbiAgICAgICAgICB3YWl0aW5nQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcm9udE1hdHRlci5iaWJsaW9ncmFwaHlQYXJzZWQpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qgd2FpdGluZ0NhbGxiYWNrIG9mIENvbnRyb2xsZXIud2FpdGluZ09uLmJpYmxpb2dyYXBoeS5zbGljZSgpKSB7XHJcbiAgICAgICAgICAgIHdhaXRpbmdDYWxsYmFjaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZm9vdG5vdGVzTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkLWZvb3Rub3RlLWxpc3RcIik7XHJcbiAgICAgICAgaWYgKGZvb3Rub3Rlc0xpc3QpIHtcclxuICAgICAgICAgIGNvbnN0IGZvb3Rub3RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJkLWZvb3Rub3RlXCIpO1xyXG4gICAgICAgICAgZm9vdG5vdGVzTGlzdC5mb290bm90ZXMgPSBmb290bm90ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IC8vIGxpc3RlbmVyc1xyXG4gIH07IC8vIENvbnRyb2xsZXJcclxuXHJcbiAgdmFyIGJhc2UgPSBcIi8qXFxuICogQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xcbiAqXFxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFxcXCJMaWNlbnNlXFxcIik7XFxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxcbiAqXFxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcXG4gKlxcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcXFwiQVMgSVNcXFwiIEJBU0lTLFxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cXG4gKi9cXG5cXG5odG1sIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG5cXHRsaW5lLWhlaWdodDogMS42ZW07XFxuICAvKiBmb250LWZhbWlseTogXFxcIkxpYnJlIEZyYW5rbGluXFxcIiwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgc2Fucy1zZXJpZjsgKi9cXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgT3h5Z2VuLCBVYnVudHUsIENhbnRhcmVsbCwgXFxcIkZpcmEgU2Fuc1xcXCIsIFxcXCJEcm9pZCBTYW5zXFxcIiwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XFxuICAvKiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7Ki9cXG4gIHRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIGh0bWwge1xcbiAgICBmb250LXNpemU6IDE2cHg7XFxuICB9XFxufVxcblxcbmJvZHkge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiAjMDA0Mjc2O1xcbn1cXG5cXG5maWd1cmUge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG50YWJsZSB7XFxuXFx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG5cXHRib3JkZXItc3BhY2luZzogMDtcXG59XFxuXFxudGFibGUgdGgge1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbnRhYmxlIHRoZWFkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG5cXG50YWJsZSB0aGVhZCB0aCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMC41ZW07XFxufVxcblxcbnRhYmxlIHRib2R5IDpmaXJzdC1jaGlsZCB0ZCB7XFxuICBwYWRkaW5nLXRvcDogMC41ZW07XFxufVxcblxcbnByZSB7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuXFxucCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbn1cXG5cXG5zdXAsIHN1YiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IC0wLjRlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxZW07XFxufVxcblxcbnN1YiB7XFxuICB0b3A6IDAuNGVtO1xcbn1cXG5cXG4ua2lja2VyLFxcbi5tYXJrZXIge1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxufVxcblxcblxcbi8qIEhlYWRsaW5lICovXFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuICBkLXRpdGxlIGgxIHNwYW4ge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gIH1cXG59XFxuXFxuLyogRmlndXJlICovXFxuXFxuZmlndXJlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbi1ib3R0b206IDIuNWVtO1xcbiAgbWFyZ2luLXRvcDogMS41ZW07XFxufVxcblxcbmZpZ2NhcHRpb24rZmlndXJlIHtcXG5cXG59XFxuXFxuZmlndXJlIGltZyB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuZmlndXJlIHN2ZyB0ZXh0LFxcbmZpZ3VyZSBzdmcgdHNwYW4ge1xcbn1cXG5cXG5maWdjYXB0aW9uLFxcbi5maWdjYXB0aW9uIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBsaW5lLWhlaWdodDogMS41ZW07XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDEwMjRweCkge1xcbmZpZ2NhcHRpb24sXFxuLmZpZ2NhcHRpb24ge1xcbiAgICBmb250LXNpemU6IDEzcHg7XFxuICB9XFxufVxcblxcbmZpZ3VyZS5leHRlcm5hbCBpbWcge1xcbiAgYmFja2dyb3VuZDogd2hpdGU7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBib3gtc2hhZG93OiAwIDFweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgcGFkZGluZzogMThweDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmZpZ2NhcHRpb24gYSB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xcbn1cXG5cXG5maWdjYXB0aW9uIGIsXFxuZmlnY2FwdGlvbiBzdHJvbmcsIHtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAxLjApO1xcbn1cXG5cIjtcclxuXHJcbiAgdmFyIGxheW91dCA9IFwiLypcXG4gKiBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXFxuICpcXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXFxcIkxpY2Vuc2VcXFwiKTtcXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXFxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XFxuICpcXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxcbiAqXFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFxcXCJBUyBJU1xcXCIgQkFTSVMsXFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXFxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxcbiAqL1xcblxcbkBzdXBwb3J0cyBub3QgKGRpc3BsYXk6IGdyaWQpIHtcXG4gIC5iYXNlLWdyaWQsXFxuICBkaXN0aWxsLWhlYWRlcixcXG4gIGQtdGl0bGUsXFxuICBkLWFic3RyYWN0LFxcbiAgZC1hcnRpY2xlLFxcbiAgZC1hcHBlbmRpeCxcXG4gIGRpc3RpbGwtYXBwZW5kaXgsXFxuICBkLWJ5bGluZSxcXG4gIGQtZm9vdG5vdGUtbGlzdCxcXG4gIGQtY2l0YXRpb24tbGlzdCxcXG4gIGRpc3RpbGwtZm9vdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHBhZGRpbmc6IDhweDtcXG4gIH1cXG59XFxuXFxuLmJhc2UtZ3JpZCxcXG5kaXN0aWxsLWhlYWRlcixcXG5kLXRpdGxlLFxcbmQtYWJzdHJhY3QsXFxuZC1hcnRpY2xlLFxcbmQtYXBwZW5kaXgsXFxuZGlzdGlsbC1hcHBlbmRpeCxcXG5kLWJ5bGluZSxcXG5kLWZvb3Rub3RlLWxpc3QsXFxuZC1jaXRhdGlvbi1saXN0LFxcbmRpc3RpbGwtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBqdXN0aWZ5LWl0ZW1zOiBzdHJldGNoO1xcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBbc2NyZWVuLXN0YXJ0XSA4cHggW3BhZ2Utc3RhcnQga2lja2VyLXN0YXJ0IHRleHQtc3RhcnQgZ3V0dGVyLXN0YXJ0IG1pZGRsZS1zdGFydF0gMWZyIDFmciAxZnIgMWZyIDFmciAxZnIgMWZyIDFmciBbdGV4dC1lbmQgcGFnZS1lbmQgZ3V0dGVyLWVuZCBraWNrZXItZW5kIG1pZGRsZS1lbmRdIDhweCBbc2NyZWVuLWVuZF07XFxuICBncmlkLWNvbHVtbi1nYXA6IDhweDtcXG59XFxuXFxuLmdyaWQge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGdyaWQtY29sdW1uLWdhcDogOHB4O1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmJhc2UtZ3JpZCxcXG4gIGRpc3RpbGwtaGVhZGVyLFxcbiAgZC10aXRsZSxcXG4gIGQtYWJzdHJhY3QsXFxuICBkLWFydGljbGUsXFxuICBkLWFwcGVuZGl4LFxcbiAgZGlzdGlsbC1hcHBlbmRpeCxcXG4gIGQtYnlsaW5lLFxcbiAgZC1mb290bm90ZS1saXN0LFxcbiAgZC1jaXRhdGlvbi1saXN0LFxcbiAgZGlzdGlsbC1mb290ZXIge1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IFtzY3JlZW4tc3RhcnRdIDFmciBbcGFnZS1zdGFydCBraWNrZXItc3RhcnQgbWlkZGxlLXN0YXJ0IHRleHQtc3RhcnRdIDQ1cHggNDVweCA0NXB4IDQ1cHggNDVweCA0NXB4IDQ1cHggNDVweCBbIGtpY2tlci1lbmQgdGV4dC1lbmQgZ3V0dGVyLXN0YXJ0XSA0NXB4IFttaWRkbGUtZW5kXSA0NXB4IFtwYWdlLWVuZCBndXR0ZXItZW5kXSAxZnIgW3NjcmVlbi1lbmRdO1xcbiAgICBncmlkLWNvbHVtbi1nYXA6IDE2cHg7XFxuICB9XFxuXFxuICAuZ3JpZCB7XFxuICAgIGdyaWQtY29sdW1uLWdhcDogMTZweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTAwMHB4KSB7XFxuICAuYmFzZS1ncmlkLFxcbiAgZGlzdGlsbC1oZWFkZXIsXFxuICBkLXRpdGxlLFxcbiAgZC1hYnN0cmFjdCxcXG4gIGQtYXJ0aWNsZSxcXG4gIGQtYXBwZW5kaXgsXFxuICBkaXN0aWxsLWFwcGVuZGl4LFxcbiAgZC1ieWxpbmUsXFxuICBkLWZvb3Rub3RlLWxpc3QsXFxuICBkLWNpdGF0aW9uLWxpc3QsXFxuICBkaXN0aWxsLWZvb3RlciB7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogW3NjcmVlbi1zdGFydF0gMWZyIFtwYWdlLXN0YXJ0IGtpY2tlci1zdGFydF0gNTBweCBbbWlkZGxlLXN0YXJ0XSA1MHB4IFt0ZXh0LXN0YXJ0IGtpY2tlci1lbmRdIDUwcHggNTBweCA1MHB4IDUwcHggNTBweCA1MHB4IDUwcHggNTBweCBbdGV4dC1lbmQgZ3V0dGVyLXN0YXJ0XSA1MHB4IFttaWRkbGUtZW5kXSA1MHB4IFtwYWdlLWVuZCBndXR0ZXItZW5kXSAxZnIgW3NjcmVlbi1lbmRdO1xcbiAgICBncmlkLWNvbHVtbi1nYXA6IDE2cHg7XFxuICB9XFxuXFxuICAuZ3JpZCB7XFxuICAgIGdyaWQtY29sdW1uLWdhcDogMTZweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTE4MHB4KSB7XFxuICAuYmFzZS1ncmlkLFxcbiAgZGlzdGlsbC1oZWFkZXIsXFxuICBkLXRpdGxlLFxcbiAgZC1hYnN0cmFjdCxcXG4gIGQtYXJ0aWNsZSxcXG4gIGQtYXBwZW5kaXgsXFxuICBkaXN0aWxsLWFwcGVuZGl4LFxcbiAgZC1ieWxpbmUsXFxuICBkLWZvb3Rub3RlLWxpc3QsXFxuICBkLWNpdGF0aW9uLWxpc3QsXFxuICBkaXN0aWxsLWZvb3RlciB7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogW3NjcmVlbi1zdGFydF0gMWZyIFtwYWdlLXN0YXJ0IGtpY2tlci1zdGFydF0gNjBweCBbbWlkZGxlLXN0YXJ0XSA2MHB4IFt0ZXh0LXN0YXJ0IGtpY2tlci1lbmRdIDYwcHggNjBweCA2MHB4IDYwcHggNjBweCA2MHB4IDYwcHggNjBweCBbdGV4dC1lbmQgZ3V0dGVyLXN0YXJ0XSA2MHB4IFttaWRkbGUtZW5kXSA2MHB4IFtwYWdlLWVuZCBndXR0ZXItZW5kXSAxZnIgW3NjcmVlbi1lbmRdO1xcbiAgICBncmlkLWNvbHVtbi1nYXA6IDMycHg7XFxuICB9XFxuXFxuICAuZ3JpZCB7XFxuICAgIGdyaWQtY29sdW1uLWdhcDogMzJweDtcXG4gIH1cXG59XFxuXFxuXFxuXFxuXFxuLmJhc2UtZ3JpZCB7XFxuICBncmlkLWNvbHVtbjogc2NyZWVuO1xcbn1cXG5cXG4vKiAubC1ib2R5LFxcbmQtYXJ0aWNsZSA+ICogIHtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG4ubC1wYWdlLFxcbmQtdGl0bGUgPiAqLFxcbmQtZmlndXJlIHtcXG4gIGdyaWQtY29sdW1uOiBwYWdlO1xcbn0gKi9cXG5cXG4ubC1ndXR0ZXIge1xcbiAgZ3JpZC1jb2x1bW46IGd1dHRlcjtcXG59XFxuXFxuLmwtdGV4dCxcXG4ubC1ib2R5IHtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG4ubC1wYWdlIHtcXG4gIGdyaWQtY29sdW1uOiBwYWdlO1xcbn1cXG5cXG4ubC1ib2R5LW91dHNldCB7XFxuICBncmlkLWNvbHVtbjogbWlkZGxlO1xcbn1cXG5cXG4ubC1wYWdlLW91dHNldCB7XFxuICBncmlkLWNvbHVtbjogcGFnZTtcXG59XFxuXFxuLmwtc2NyZWVuIHtcXG4gIGdyaWQtY29sdW1uOiBzY3JlZW47XFxufVxcblxcbi5sLXNjcmVlbi1pbnNldCB7XFxuICBncmlkLWNvbHVtbjogc2NyZWVuO1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG5cXG5cXG4vKiBBc2lkZSAqL1xcblxcbmQtYXJ0aWNsZSBhc2lkZSB7XFxuICBncmlkLWNvbHVtbjogZ3V0dGVyO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuNmVtO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KVxcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgYXNpZGUge1xcbiAgICBncmlkLWNvbHVtbjogZ3V0dGVyO1xcbiAgfVxcblxcbiAgLnNpZGUge1xcbiAgICBncmlkLWNvbHVtbjogZ3V0dGVyO1xcbiAgfVxcbn1cXG5cIjtcclxuXHJcbiAgdmFyIHByaW50ID0gXCIvKlxcbiAqIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcXG4gKlxcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcXFwiTGljZW5zZVxcXCIpO1xcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcXG4gKlxcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXFxuICpcXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXFxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXFxcIkFTIElTXFxcIiBCQVNJUyxcXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXFxuICovXFxuXFxuQG1lZGlhIHByaW50IHtcXG5cXG4gIEBwYWdlIHtcXG4gICAgc2l6ZTogOGluIDExaW47XFxuICAgIEBib3R0b20tcmlnaHQge1xcbiAgICAgIGNvbnRlbnQ6IGNvdW50ZXIocGFnZSkgXFxcIiBvZiBcXFwiIGNvdW50ZXIocGFnZXMpO1xcbiAgICB9XFxuICB9XFxuXFxuICBodG1sIHtcXG4gICAgLyogbm8gZ2VuZXJhbCBtYXJnaW5zIC0tIENTUyBHcmlkIHRha2VzIGNhcmUgb2YgdGhvc2UgKi9cXG4gIH1cXG5cXG4gIHAsIGNvZGUge1xcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICB9XFxuXFxuICBoMiwgaDMge1xcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gIH1cXG5cXG4gIGQtaGVhZGVyIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVxcblxcbiAgZC1mb290ZXIge1xcbiAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcXG4gIH1cXG5cXG59XFxuXCI7XHJcblxyXG4gIHZhciBieWxpbmUgPSBcIi8qXFxuICogQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xcbiAqXFxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFxcXCJMaWNlbnNlXFxcIik7XFxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxcbiAqXFxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcXG4gKlxcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcXFwiQVMgSVNcXFwiIEJBU0lTLFxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cXG4gKi9cXG5cXG5kLWJ5bGluZSB7XFxuICBjb250YWluOiBzdHlsZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBsaW5lLWhlaWdodDogMS44ZW07XFxuICBwYWRkaW5nOiAxLjVyZW0gMDtcXG4gIG1pbi1oZWlnaHQ6IDEuOGVtO1xcbn1cXG5cXG5cXG5kLWJ5bGluZSAuYnlsaW5lIHtcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgZC1ieWxpbmUgLmJ5bGluZSB7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnIgMWZyO1xcbiAgfVxcbn1cXG5cXG5kLWJ5bGluZSAuYXV0aG9ycy1hZmZpbGlhdGlvbnMge1xcbiAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDI7XFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XFxuICBtYXJnaW4tYm90dG9tOiAxZW07XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBkLWJ5bGluZSAuYXV0aG9ycy1hZmZpbGlhdGlvbnMge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcbn1cXG5cXG5kLWJ5bGluZSBoMyB7XFxuICBmb250LXNpemU6IDAuNnJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgbWFyZ2luOiAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuXFxuZC1ieWxpbmUgcCB7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbmQtYnlsaW5lIGEsXFxuZC1hcnRpY2xlIGQtYnlsaW5lIGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcblxcbmQtYXJ0aWNsZSBkLWJ5bGluZSBhOmhvdmVyIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuXFxuZC1ieWxpbmUgcC5hdXRob3Ige1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuXFxuZC1ieWxpbmUgLmFmZmlsaWF0aW9ucyB7XFxuXFxufVxcblwiO1xyXG5cclxuICB2YXIgYXJ0aWNsZSA9IFwiLypcXG4gKiBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXFxuICpcXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXFxcIkxpY2Vuc2VcXFwiKTtcXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXFxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XFxuICpcXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxcbiAqXFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFxcXCJBUyBJU1xcXCIgQkFTSVMsXFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXFxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxcbiAqL1xcblxcbmQtYXJ0aWNsZSB7XFxuICBjb250YWluOiBsYXlvdXQgc3R5bGU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgcGFkZGluZy10b3A6IDJyZW07XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbn1cXG5cXG5kLWFydGljbGUgPiAqIHtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgZC1hcnRpY2xlIHtcXG4gICAgZm9udC1zaXplOiAxNnB4O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4gIGQtYXJ0aWNsZSB7XFxuICAgIGZvbnQtc2l6ZTogMS4wNnJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuN2VtO1xcbiAgfVxcbn1cXG5cXG5cXG4vKiBIMiAqL1xcblxcblxcbmQtYXJ0aWNsZSAubWFya2VyIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGNvdW50ZXItcmVzZXQ6IHNlY3Rpb247XFxuICBncmlkLWNvbHVtbjoga2lja2VyO1xcbiAgbGluZS1oZWlnaHQ6IDEuN2VtO1xcbn1cXG5cXG5kLWFydGljbGUgLm1hcmtlcjpob3ZlciB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbmQtYXJ0aWNsZSAubWFya2VyIHNwYW4ge1xcbiAgcGFkZGluZzogMCAzcHggNHB4O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogNHB4O1xcbn1cXG5cXG5kLWFydGljbGUgLm1hcmtlcjpob3ZlciBzcGFuIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG5cXG5kLWFydGljbGUgaDIge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1ZW07XFxuICBtYXJnaW46IDJyZW0gMCAxLjVyZW0gMDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuICBkLWFydGljbGUgaDIge1xcbiAgICBmb250LXNpemU6IDM2cHg7XFxuICB9XFxufVxcblxcbi8qIEgzICovXFxuXFxuZC1hcnRpY2xlIGgzIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBsaW5lLWhlaWdodDogMS40ZW07XFxuICBtYXJnaW4tYm90dG9tOiAxZW07XFxuICBtYXJnaW4tdG9wOiAyZW07XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDEwMjRweCkge1xcbiAgZC1hcnRpY2xlIGgzIHtcXG4gICAgZm9udC1zaXplOiAyMHB4O1xcbiAgfVxcbn1cXG5cXG4vKiBINCAqL1xcblxcbmQtYXJ0aWNsZSBoNCB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjRlbTtcXG59XFxuXFxuZC1hcnRpY2xlIGEge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbmQtYXJ0aWNsZSBwLFxcbmQtYXJ0aWNsZSB1bCxcXG5kLWFydGljbGUgb2wsXFxuZC1hcnRpY2xlIGJsb2NrcXVvdGUge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbn1cXG5cXG5kLWFydGljbGUgYmxvY2txdW90ZSB7XFxuICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIHBhZGRpbmctbGVmdDogMmVtO1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcXG59XFxuXFxuZC1hcnRpY2xlIGEge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40KTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuZC1hcnRpY2xlIGE6aG92ZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC44KTtcXG59XFxuXFxuZC1hcnRpY2xlIC5saW5rIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5kLWFydGljbGUgdWwsXFxuZC1hcnRpY2xlIG9sIHtcXG4gIHBhZGRpbmctbGVmdDogMjRweDtcXG59XFxuXFxuZC1hcnRpY2xlIGxpIHtcXG4gIG1hcmdpbi1ib3R0b206IDAuMmVtO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxuICBwYWRkaW5nLWxlZnQ6IDA7XFxufVxcblxcbmQtYXJ0aWNsZSBsaTpsYXN0LWNoaWxkIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxufVxcblxcbmQtYXJ0aWNsZSBwcmUge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuXFxuZC1hcnRpY2xlIGhyIHtcXG4gIGdyaWQtY29sdW1uOiBzY3JlZW47XFxuICB3aWR0aDogMTAwJTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBtYXJnaW4tdG9wOiA2MHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNjBweDtcXG59XFxuXFxuZC1hcnRpY2xlIHNlY3Rpb24ge1xcbiAgbWFyZ2luLXRvcDogNjBweDtcXG4gIG1hcmdpbi1ib3R0b206IDYwcHg7XFxufVxcblxcbmQtYXJ0aWNsZSBzcGFuLmVxdWF0aW9uLW1pbWljIHtcXG4gIGZvbnQtZmFtaWx5OiBnZW9yZ2lhO1xcbiAgZm9udC1zaXplOiAxMTUlO1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG5cXG5kLWFydGljbGUgPiBkLWNvZGUsXFxuZC1hcnRpY2xlIHNlY3Rpb24gPiBkLWNvZGUgIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5kLWFydGljbGUgPiBkLW1hdGhbYmxvY2tdLFxcbmQtYXJ0aWNsZSBzZWN0aW9uID4gZC1tYXRoW2Jsb2NrXSAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xcbiAgZC1hcnRpY2xlID4gZC1jb2RlLFxcbiAgZC1hcnRpY2xlIHNlY3Rpb24gPiBkLWNvZGUsXFxuICBkLWFydGljbGUgPiBkLW1hdGhbYmxvY2tdLFxcbiAgZC1hcnRpY2xlIHNlY3Rpb24gPiBkLW1hdGhbYmxvY2tdIHtcXG4gICAgICBvdmVyZmxvdy14OiBzY3JvbGw7XFxuICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyAgLy8gSUUgMTArXFxuICAgICAgb3ZlcmZsb3c6IC1tb3otc2Nyb2xsYmFycy1ub25lOyAgLy8gRmlyZWZveFxcbiAgfVxcblxcbiAgZC1hcnRpY2xlID4gZC1jb2RlOjotd2Via2l0LXNjcm9sbGJhcixcXG4gIGQtYXJ0aWNsZSBzZWN0aW9uID4gZC1jb2RlOjotd2Via2l0LXNjcm9sbGJhcixcXG4gIGQtYXJ0aWNsZSA+IGQtbWF0aFtibG9ja106Oi13ZWJraXQtc2Nyb2xsYmFyLFxcbiAgZC1hcnRpY2xlIHNlY3Rpb24gPiBkLW1hdGhbYmxvY2tdOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7ICAvLyBTYWZhcmkgYW5kIENocm9tZVxcbiAgfVxcbn1cXG5cXG5kLWFydGljbGUgLmNpdGF0aW9uIHtcXG4gIGNvbG9yOiAjNjY4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5kLWluY2x1ZGUge1xcbiAgd2lkdGg6IGF1dG87XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuZC1maWd1cmUge1xcbiAgY29udGFpbjogbGF5b3V0IHN0eWxlO1xcbn1cXG5cXG4vKiBLYVRlWCAqL1xcblxcbi5rYXRleCwgLmthdGV4LXByZXJlbmRlcmVkIHtcXG4gIGNvbnRhaW46IHN0eWxlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4vKiBUYWJsZXMgKi9cXG5cXG5kLWFydGljbGUgdGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbmQtYXJ0aWNsZSB0YWJsZSB0aCB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG5kLWFydGljbGUgdGFibGUgdGQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxufVxcblxcbmQtYXJ0aWNsZSB0YWJsZSB0cjpsYXN0LW9mLXR5cGUgdGQge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG59XFxuXFxuZC1hcnRpY2xlIHRhYmxlIHRoLFxcbmQtYXJ0aWNsZSB0YWJsZSB0ZCB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBwYWRkaW5nOiAycHggOHB4O1xcbn1cXG5cXG5kLWFydGljbGUgdGFibGUgdGJvZHkgOmZpcnN0LWNoaWxkIHRkIHtcXG4gIHBhZGRpbmctdG9wOiAycHg7XFxufVxcblwiO1xyXG5cclxuICB2YXIgdGl0bGUgPSBcIi8qXFxuICogQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xcbiAqXFxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFxcXCJMaWNlbnNlXFxcIik7XFxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxcbiAqXFxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcXG4gKlxcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcXFwiQVMgSVNcXFwiIEJBU0lTLFxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cXG4gKi9cXG5cXG5kLXRpdGxlIHtcXG4gIHBhZGRpbmc6IDJyZW0gMCAxLjVyZW07XFxuICBjb250YWluOiBsYXlvdXQgc3R5bGU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBkLXRpdGxlIHtcXG4gICAgcGFkZGluZzogNHJlbSAwIDEuNXJlbTtcXG4gIH1cXG59XFxuXFxuZC10aXRsZSBoMSB7XFxuICBncmlkLWNvbHVtbjogdGV4dDtcXG4gIGZvbnQtc2l6ZTogNDBweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBsaW5lLWhlaWdodDogMS4xZW07XFxuICBtYXJnaW46IDAgMCAwLjVyZW07XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBkLXRpdGxlIGgxIHtcXG4gICAgZm9udC1zaXplOiA1MHB4O1xcbiAgfVxcbn1cXG5cXG5kLXRpdGxlIHAge1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTVlbTtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG5kLXRpdGxlIC5zdGF0dXMge1xcbiAgbWFyZ2luLXRvcDogMHB4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6ICMwMDk2ODg7XFxuICBvcGFjaXR5OiAwLjg7XFxuICBncmlkLWNvbHVtbjoga2lja2VyO1xcbn1cXG5cXG5kLXRpdGxlIC5zdGF0dXMgc3BhbiB7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmc6IDZweCAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4MGNiYzQ7XFxuICBmb250LXNpemU6IDExcHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG5cIjtcclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjb25zdCBzdHlsZXMgPSBiYXNlICsgbGF5b3V0ICsgdGl0bGUgKyBieWxpbmUgKyBhcnRpY2xlICsgbWF0aCArIHByaW50O1xyXG5cclxuICBmdW5jdGlvbiBtYWtlU3R5bGVUYWcoZG9tKSB7XHJcblxyXG4gICAgY29uc3Qgc3R5bGVUYWdJZCA9ICdkaXN0aWxsLXByZXJlbmRlcmVkLXN0eWxlcyc7XHJcbiAgICBjb25zdCBwcmVyZW5kZXJlZFRhZyA9IGRvbS5nZXRFbGVtZW50QnlJZChzdHlsZVRhZ0lkKTtcclxuICAgIGlmICghcHJlcmVuZGVyZWRUYWcpIHtcclxuICAgICAgY29uc3Qgc3R5bGVUYWcgPSBkb20uY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgICAgc3R5bGVUYWcuaWQgPSBzdHlsZVRhZ0lkO1xyXG4gICAgICBzdHlsZVRhZy50eXBlID0gJ3RleHQvY3NzJztcclxuICAgICAgY29uc3QgY3NzVGV4dFRhZyA9IGRvbS5jcmVhdGVUZXh0Tm9kZShzdHlsZXMpO1xyXG4gICAgICBzdHlsZVRhZy5hcHBlbmRDaGlsZChjc3NUZXh0VGFnKTtcclxuICAgICAgY29uc3QgZmlyc3RTY3JpcHRUYWcgPSBkb20uaGVhZC5xdWVyeVNlbGVjdG9yKCdzY3JpcHQnKTtcclxuICAgICAgZG9tLmhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlVGFnLCBmaXJzdFNjcmlwdFRhZyk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIGZ1bmN0aW9uIGFkZFBvbHlmaWxsKHBvbHlmaWxsLCBwb2x5ZmlsbExvYWRlZENhbGxiYWNrKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKCdSdW5sZXZlbCAwOiBQb2x5ZmlsbCByZXF1aXJlZDogJyArIHBvbHlmaWxsLm5hbWUpO1xyXG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICBzY3JpcHQuc3JjID0gcG9seWZpbGwudXJsO1xyXG4gICAgc2NyaXB0LmFzeW5jID0gZmFsc2U7XHJcbiAgICBpZiAocG9seWZpbGxMb2FkZWRDYWxsYmFjaykge1xyXG4gICAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24oKSB7IHBvbHlmaWxsTG9hZGVkQ2FsbGJhY2socG9seWZpbGwpOyB9O1xyXG4gICAgfVxyXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgbmV3IEVycm9yKCdSdW5sZXZlbCAwOiBQb2x5ZmlsbHMgZmFpbGVkIHRvIGxvYWQgc2NyaXB0ICcgKyBwb2x5ZmlsbC5uYW1lKTtcclxuICAgIH07XHJcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBwb2x5ZmlsbHMgPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdXZWJDb21wb25lbnRzJyxcclxuICAgICAgc3VwcG9ydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdjdXN0b21FbGVtZW50cycgaW4gd2luZG93ICYmXHJcbiAgICAgICAgICAgICAgICdhdHRhY2hTaGFkb3cnIGluIEVsZW1lbnQucHJvdG90eXBlICYmXHJcbiAgICAgICAgICAgICAgICdnZXRSb290Tm9kZScgaW4gRWxlbWVudC5wcm90b3R5cGUgJiZcclxuICAgICAgICAgICAgICAgJ2NvbnRlbnQnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykgJiZcclxuICAgICAgICAgICAgICAgJ1Byb21pc2UnIGluIHdpbmRvdyAmJlxyXG4gICAgICAgICAgICAgICAnZnJvbScgaW4gQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVybDogJ2h0dHBzOi8vZGlzdGlsbC5wdWIvdGhpcmQtcGFydHkvcG9seWZpbGxzL3dlYmNvbXBvbmVudHMtbGl0ZS5qcydcclxuICAgIH0sIHtcclxuICAgICAgbmFtZTogJ0ludGVyc2VjdGlvbk9ic2VydmVyJyxcclxuICAgICAgc3VwcG9ydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93ICYmXHJcbiAgICAgICAgICAgICAgICdJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5JyBpbiB3aW5kb3c7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVybDogJ2h0dHBzOi8vZGlzdGlsbC5wdWIvdGhpcmQtcGFydHkvcG9seWZpbGxzL2ludGVyc2VjdGlvbi1vYnNlcnZlci5qcydcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY2xhc3MgUG9seWZpbGxzIHtcclxuXHJcbiAgICBzdGF0aWMgYnJvd3NlclN1cHBvcnRzQWxsRmVhdHVyZXMoKSB7XHJcbiAgICAgIHJldHVybiBwb2x5ZmlsbHMuZXZlcnkoKHBvbHkpID0+IHBvbHkuc3VwcG9ydCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbG9hZChjYWxsYmFjaykge1xyXG4gICAgICAvLyBEZWZpbmUgYW4gaW50ZXJtZWRpYXRlIGNhbGxiYWNrIHRoYXQgY2hlY2tzIGlmIGFsbCBpcyBsb2FkZWQuXHJcbiAgICAgIGNvbnN0IHBvbHlmaWxsTG9hZGVkID0gZnVuY3Rpb24ocG9seWZpbGwpIHtcclxuICAgICAgICBwb2x5ZmlsbC5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1J1bmxldmVsIDA6IFBvbHlmaWxsIGhhcyBmaW5pc2hlZCBsb2FkaW5nOiAnICsgcG9seWZpbGwubmFtZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1Zyh3aW5kb3dbcG9seWZpbGwubmFtZV0pO1xyXG4gICAgICAgIGlmIChQb2x5ZmlsbHMubmVlZGVkUG9seWZpbGxzLmV2ZXJ5KChwb2x5KSA9PiBwb2x5LmxvYWRlZCkpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1J1bmxldmVsIDA6IEFsbCByZXF1aXJlZCBwb2x5ZmlsbHMgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLicpO1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnUnVubGV2ZWwgMC0+MS4nKTtcclxuICAgICAgICAgIHdpbmRvdy5kaXN0aWxsUnVubGV2ZWwgPSAxO1xyXG4gICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIC8vIEFkZCBwb2x5ZmlsbCBzY3JpcHQgdGFnc1xyXG4gICAgICBmb3IgKGNvbnN0IHBvbHlmaWxsIG9mIFBvbHlmaWxscy5uZWVkZWRQb2x5ZmlsbHMpIHtcclxuICAgICAgICBhZGRQb2x5ZmlsbChwb2x5ZmlsbCwgcG9seWZpbGxMb2FkZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBuZWVkZWRQb2x5ZmlsbHMoKSB7XHJcbiAgICAgIGlmICghUG9seWZpbGxzLl9uZWVkZWRQb2x5ZmlsbHMpIHtcclxuICAgICAgICBQb2x5ZmlsbHMuX25lZWRlZFBvbHlmaWxscyA9IHBvbHlmaWxscy5maWx0ZXIoKHBvbHkpID0+ICFwb2x5LnN1cHBvcnQoKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFBvbHlmaWxscy5fbmVlZGVkUG9seWZpbGxzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIC8vIGNvbnN0IG1hcmdpblNtYWxsID0gMTY7XHJcbiAgLy8gY29uc3QgbWFyZ2luTGFyZ2UgPSAzICogbWFyZ2luU21hbGw7XHJcbiAgLy8gY29uc3QgbWFyZ2luID0gbWFyZ2luU21hbGwgKyBtYXJnaW5MYXJnZTtcclxuICAvLyBjb25zdCBndXR0ZXIgPSBtYXJnaW5TbWFsbDtcclxuICAvLyBjb25zdCBvdXRzZXRBbW91bnQgPSBtYXJnaW4gLyAyO1xyXG4gIC8vIGNvbnN0IG51bUNvbHMgPSA0O1xyXG4gIC8vIGNvbnN0IG51bUd1dHRlcnMgPSBudW1Db2xzIC0gMTtcclxuICAvLyBjb25zdCBjb2x1bW5XaWR0aCA9ICg3NjggLSAyICogbWFyZ2luTGFyZ2UgLSBudW1HdXR0ZXJzICogZ3V0dGVyKSAvIG51bUNvbHM7XHJcbiAgLy9cclxuICAvLyBjb25zdCBzY3JlZW53aWR0aCA9IDc2ODtcclxuICAvLyBjb25zdCBwYWdlV2lkdGggPSBzY3JlZW53aWR0aCAtIDIgKiBtYXJnaW5MYXJnZTtcclxuICAvLyBjb25zdCBib2R5V2lkdGggPSBwYWdlV2lkdGggLSBjb2x1bW5XaWR0aCAtIGd1dHRlcjtcclxuXHJcbiAgZnVuY3Rpb24gYm9keShzZWxlY3Rvcikge1xyXG4gICAgcmV0dXJuIGAke3NlbGVjdG9yfSB7XHJcbiAgICAgIGdyaWQtY29sdW1uOiBsZWZ0IC8gdGV4dDtcclxuICAgIH1cclxuICBgO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjb25zdCBUJDEgPSBUZW1wbGF0ZSgnZC1hYnN0cmFjdCcsIGBcclxuPHN0eWxlPlxyXG4gIDpob3N0IHtcclxuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XHJcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcclxuICB9XHJcblxyXG4gIDo6c2xvdHRlZChwKSB7XHJcbiAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgZ3JpZC1jb2x1bW46IHRleHQtc3RhcnQgLyBtaWRkbGUtZW5kO1xyXG4gIH1cclxuICAke2JvZHkoJ2QtYWJzdHJhY3QnKX1cclxuPC9zdHlsZT5cclxuXHJcbjxzbG90Pjwvc2xvdD5cclxuYCk7XHJcblxyXG4gIGNsYXNzIEFic3RyYWN0IGV4dGVuZHMgVCQxKEhUTUxFbGVtZW50KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjb25zdCBUJDIgPSBUZW1wbGF0ZSgnZC1hcHBlbmRpeCcsIGBcclxuPHN0eWxlPlxyXG5cclxuZC1hcHBlbmRpeCB7XHJcbiAgY29udGFpbjogbGF5b3V0IHN0eWxlO1xyXG4gIGZvbnQtc2l6ZTogMC44ZW07XHJcbiAgbGluZS1oZWlnaHQ6IDEuN2VtO1xyXG4gIG1hcmdpbi10b3A6IDYwcHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7XHJcbiAgcGFkZGluZy10b3A6IDYwcHg7XHJcbiAgcGFkZGluZy1ib3R0b206IDQ4cHg7XHJcbn1cclxuXHJcbmQtYXBwZW5kaXggaDMge1xyXG4gIGdyaWQtY29sdW1uOiBwYWdlLXN0YXJ0IC8gdGV4dC1zdGFydDtcclxuICBmb250LXNpemU6IDE1cHg7XHJcbiAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjY1KTtcclxufVxyXG5cclxuZC1hcHBlbmRpeCBoMyArICoge1xyXG4gIG1hcmdpbi10b3A6IDFlbTtcclxufVxyXG5cclxuZC1hcHBlbmRpeCBvbCB7XHJcbiAgcGFkZGluZzogMCAwIDAgMTVweDtcclxufVxyXG5cclxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XHJcbiAgZC1hcHBlbmRpeCBvbCB7XHJcbiAgICBwYWRkaW5nOiAwIDAgMCAzMHB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IC0zMHB4O1xyXG4gIH1cclxufVxyXG5cclxuZC1hcHBlbmRpeCBsaSB7XHJcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG59XHJcblxyXG5kLWFwcGVuZGl4IGEge1xyXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XHJcbn1cclxuXHJcbmQtYXBwZW5kaXggPiAqIHtcclxuICBncmlkLWNvbHVtbjogdGV4dDtcclxufVxyXG5cclxuZC1hcHBlbmRpeCA+IGQtZm9vdG5vdGUtbGlzdCxcclxuZC1hcHBlbmRpeCA+IGQtY2l0YXRpb24tbGlzdCxcclxuZC1hcHBlbmRpeCA+IGRpc3RpbGwtYXBwZW5kaXgge1xyXG4gIGdyaWQtY29sdW1uOiBzY3JlZW47XHJcbn1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG5gLCBmYWxzZSk7XHJcblxyXG4gIGNsYXNzIEFwcGVuZGl4IGV4dGVuZHMgVCQyKEhUTUxFbGVtZW50KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIC8vIGltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbWl4aW5zL3RlbXBsYXRlJztcclxuICAvLyBpbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XHJcblxyXG4gIGNvbnN0IGlzT25seVdoaXRlc3BhY2UgPSAvXlxccyokLztcclxuXHJcbiAgY2xhc3MgQXJ0aWNsZSBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC1hcnRpY2xlJzsgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBhZGRlZE5vZGUgb2YgbXV0YXRpb24uYWRkZWROb2Rlcykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGFkZGVkTm9kZS5ub2RlTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICcjdGV4dCc6IHsgLy8gdXN1YWxseSB0ZXh0IG5vZGVzIGFyZSBvbmx5IGxpbmVicmVha3MuXHJcbiAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGFkZGVkTm9kZS5ub2RlVmFsdWU7XHJcbiAgICAgICAgICAgICAgaWYgKCFpc09ubHlXaGl0ZXNwYWNlLnRlc3QodGV4dCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVXNlIG9mIHVud3JhcHBlZCB0ZXh0IGluIGRpc3RpbGwgYXJ0aWNsZXMgaXMgZGlzY291cmFnZWQgYXMgaXQgYnJlYWtzIGxheW91dCEgUGxlYXNlIHdyYXAgYW55IHRleHQgaW4gYSA8c3Bhbj4gb3IgPHA+IHRhZy4gV2UgZm91bmQgdGhlIGZvbGxvd2luZyB0ZXh0OiAnICsgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlci5pbm5lckhUTUwgPSBhZGRlZE5vZGUubm9kZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYWRkZWROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGFkZGVkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBhZGRlZE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhZGRlZE5vZGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSkub2JzZXJ2ZSh0aGlzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZuLCBtb2R1bGUpIHtcclxuICBcdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcclxuICB9XHJcblxyXG4gIHZhciBiaWJ0ZXhQYXJzZSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcclxuICAvKiBzdGFydCBiaWJ0ZXhQYXJzZSAwLjAuMjIgKi9cclxuXHJcbiAgLy9PcmlnaW5hbCB3b3JrIGJ5IEhlbnJpayBNdWVoZSAoYykgMjAxMFxyXG4gIC8vXHJcbiAgLy9Db21tb25KUyBwb3J0IGJ5IE1pa29sYSBMeXNlbmtvIDIwMTNcclxuICAvL1xyXG4gIC8vUG9ydCB0byBCcm93c2VyIGxpYiBieSBPUkNJRCAvIFJDUEVURVJTXHJcbiAgLy9cclxuICAvL0lzc3VlczpcclxuICAvL25vIGNvbW1lbnQgaGFuZGxpbmcgd2l0aGluIHN0cmluZ3NcclxuICAvL25vIHN0cmluZyBjb25jYXRlbmF0aW9uXHJcbiAgLy9ubyB2YXJpYWJsZSB2YWx1ZXMgeWV0XHJcbiAgLy9HcmFtbWFyIGltcGxlbWVudGVkIGhlcmU6XHJcbiAgLy9iaWJ0ZXggLT4gKHN0cmluZyB8IHByZWFtYmxlIHwgY29tbWVudCB8IGVudHJ5KSo7XHJcbiAgLy9zdHJpbmcgLT4gJ0BTVFJJTkcnICd7JyBrZXlfZXF1YWxzX3ZhbHVlICd9JztcclxuICAvL3ByZWFtYmxlIC0+ICdAUFJFQU1CTEUnICd7JyB2YWx1ZSAnfSc7XHJcbiAgLy9jb21tZW50IC0+ICdAQ09NTUVOVCcgJ3snIHZhbHVlICd9JztcclxuICAvL2VudHJ5IC0+ICdAJyBrZXkgJ3snIGtleSAnLCcga2V5X3ZhbHVlX2xpc3QgJ30nO1xyXG4gIC8va2V5X3ZhbHVlX2xpc3QgLT4ga2V5X2VxdWFsc192YWx1ZSAoJywnIGtleV9lcXVhbHNfdmFsdWUpKjtcclxuICAvL2tleV9lcXVhbHNfdmFsdWUgLT4ga2V5ICc9JyB2YWx1ZTtcclxuICAvL3ZhbHVlIC0+IHZhbHVlX3F1b3RlcyB8IHZhbHVlX2JyYWNlcyB8IGtleTtcclxuICAvL3ZhbHVlX3F1b3RlcyAtPiAnXCInIC4qPyAnXCInOyAvLyBub3QgcXVpdGVcclxuICAvL3ZhbHVlX2JyYWNlcyAtPiAneycgLio/ICdcIic7IC8vIG5vdCBxdWl0ZVxyXG4gIChmdW5jdGlvbihleHBvcnRzKSB7XHJcblxyXG4gICAgICBmdW5jdGlvbiBCaWJ0ZXhQYXJzZXIoKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5tb250aHMgPSBbXCJqYW5cIiwgXCJmZWJcIiwgXCJtYXJcIiwgXCJhcHJcIiwgXCJtYXlcIiwgXCJqdW5cIiwgXCJqdWxcIiwgXCJhdWdcIiwgXCJzZXBcIiwgXCJvY3RcIiwgXCJub3ZcIiwgXCJkZWNcIl07XHJcbiAgICAgICAgICB0aGlzLm5vdEtleSA9IFsnLCcsJ3snLCd9JywnICcsJz0nXTtcclxuICAgICAgICAgIHRoaXMucG9zID0gMDtcclxuICAgICAgICAgIHRoaXMuaW5wdXQgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RW50cnkgPSBcIlwiO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2V0SW5wdXQgPSBmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dCA9IHQ7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMuZ2V0RW50cmllcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXM7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNXaGl0ZXNwYWNlID0gZnVuY3Rpb24ocykge1xyXG4gICAgICAgICAgICAgIHJldHVybiAocyA9PSAnICcgfHwgcyA9PSAnXFxyJyB8fCBzID09ICdcXHQnIHx8IHMgPT0gJ1xcbicpO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLm1hdGNoID0gZnVuY3Rpb24ocywgY2FuQ29tbWVudE91dCkge1xyXG4gICAgICAgICAgICAgIGlmIChjYW5Db21tZW50T3V0ID09IHVuZGVmaW5lZCB8fCBjYW5Db21tZW50T3V0ID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgIGNhbkNvbW1lbnRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoY2FuQ29tbWVudE91dCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQuc3Vic3RyaW5nKHRoaXMucG9zLCB0aGlzLnBvcyArIHMubGVuZ3RoKSA9PSBzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IFwiVG9rZW4gbWlzbWF0Y2gsIGV4cGVjdGVkIFwiICsgcyArIFwiLCBmb3VuZCBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5pbnB1dC5zdWJzdHJpbmcodGhpcy5wb3MpO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKGNhbkNvbW1lbnRPdXQpO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyeU1hdGNoID0gZnVuY3Rpb24ocywgY2FuQ29tbWVudE91dCkge1xyXG4gICAgICAgICAgICAgIGlmIChjYW5Db21tZW50T3V0ID09IHVuZGVmaW5lZCB8fCBjYW5Db21tZW50T3V0ID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgIGNhbkNvbW1lbnRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoY2FuQ29tbWVudE91dCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQuc3Vic3RyaW5nKHRoaXMucG9zLCB0aGlzLnBvcyArIHMubGVuZ3RoKSA9PSBzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8qIHdoZW4gc2VhcmNoIGZvciBhIG1hdGNoIGFsbCB0ZXh0IGNhbiBiZSBpZ25vcmVkLCBub3QganVzdCB3aGl0ZSBzcGFjZSAqL1xyXG4gICAgICAgICAgdGhpcy5tYXRjaEF0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXQubGVuZ3RoID4gdGhpcy5wb3MgJiYgdGhpcy5pbnB1dFt0aGlzLnBvc10gIT0gJ0AnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9zKys7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnQCcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSA9IGZ1bmN0aW9uKGNhbkNvbW1lbnRPdXQpIHtcclxuICAgICAgICAgICAgICB3aGlsZSAodGhpcy5pc1doaXRlc3BhY2UodGhpcy5pbnB1dFt0aGlzLnBvc10pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucG9zKys7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSBcIiVcIiAmJiBjYW5Db21tZW50T3V0ID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXRbdGhpcy5wb3NdICE9IFwiXFxuXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zKys7XHJcbiAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZShjYW5Db21tZW50T3V0KTtcclxuICAgICAgICAgICAgICB9ICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMudmFsdWVfYnJhY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGJyYWNlY291bnQgPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMubWF0Y2goXCJ7XCIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvcztcclxuICAgICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09ICd9Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmFjZWNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHRoaXMucG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwifVwiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlY291bnQrKztcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJVbnRlcm1pbmF0ZWQgdmFsdWVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvc10gPT0gJ1xcXFwnICYmIGVzY2FwZWQgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy52YWx1ZV9jb21tZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAgICAgICAgIHZhciBicmNrdENudCA9IDA7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKCEodGhpcy50cnlNYXRjaChcIn1cIiwgZmFsc2UpICYmIGJyY2t0Q250ID09IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ciArIHRoaXMuaW5wdXRbdGhpcy5wb3NdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvc10gPT0gJ3snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJja3RDbnQrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09ICd9JylcclxuICAgICAgICAgICAgICAgICAgICAgIGJyY2t0Q250LS07XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwiVW50ZXJtaW5hdGVkIHZhbHVlOlwiICsgdGhpcy5pbnB1dC5zdWJzdHJpbmcoc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIHRoaXMucG9zKys7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMudmFsdWVfcXVvdGVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXRjaCgnXCInLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XHJcbiAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIWVzY2FwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnXCInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHRoaXMucG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goJ1wiJywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJVbnRlcm1pbmF0ZWQgdmFsdWU6XCIgKyB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09ICdcXFxcJyAmJiBlc2NhcGVkID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcclxuICAgICAgICAgICAgICB9ICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMuc2luZ2xlX3ZhbHVlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goXCJ7XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlX2JyYWNlcygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50cnlNYXRjaCgnXCInKSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9xdW90ZXMoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgayA9IHRoaXMua2V5KCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChrLm1hdGNoKFwiXlswLTldKyRcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaztcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tb250aHMuaW5kZXhPZihrLnRvTG93ZXJDYXNlKCkpID49IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gay50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIlZhbHVlIGV4cGVjdGVkOlwiICsgdGhpcy5pbnB1dC5zdWJzdHJpbmcoc3RhcnQpICsgJyBmb3Iga2V5OiAnICsgaztcclxuXHJcbiAgICAgICAgICAgICAgfSAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuc2luZ2xlX3ZhbHVlKCkpO1xyXG4gICAgICAgICAgICAgIHdoaWxlICh0aGlzLnRyeU1hdGNoKFwiI1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwiI1wiKTtcclxuICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5zaW5nbGVfdmFsdWUoKSk7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuam9pbihcIlwiKTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5rZXkgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvcztcclxuICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwiUnVuYXdheSBrZXlcIjtcclxuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0LAt0Y/QkC3QryBpcyBDeXJpbGxpY1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wdXRbdGhpcy5wb3NdKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm90S2V5LmluZGV4T2YodGhpcy5pbnB1dFt0aGlzLnBvc10pID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICB9ICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLmtleSgpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnRyeU1hdGNoKFwiPVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwiPVwiKTtcclxuICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFsga2V5LCB2YWwgXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBcIi4uLiA9IHZhbHVlIGV4cGVjdGVkLCBlcXVhbHMgc2lnbiBtaXNzaW5nOlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLnBvcyk7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLmtleV92YWx1ZV9saXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGt2ID0gdGhpcy5rZXlfZXF1YWxzX3ZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnlbJ2VudHJ5VGFncyddID0ge307XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnlbJ2VudHJ5VGFncyddW2t2WzBdXSA9IGt2WzFdO1xyXG4gICAgICAgICAgICAgIHdoaWxlICh0aGlzLnRyeU1hdGNoKFwiLFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgLy8gZml4ZXMgcHJvYmxlbXMgd2l0aCBjb21tYXMgYXQgdGhlIGVuZCBvZiBhIGxpc3RcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goXCJ9XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBrdiA9IHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeVsnZW50cnlUYWdzJ11ba3ZbMF1dID0ga3ZbMV07XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLmVudHJ5X2JvZHkgPSBmdW5jdGlvbihkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnkgPSB7fTtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeVsnY2l0YXRpb25LZXknXSA9IHRoaXMua2V5KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnlbJ2VudHJ5VHlwZSddID0gZC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXRjaChcIixcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5rZXlfdmFsdWVfbGlzdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZW50cmllcy5wdXNoKHRoaXMuY3VycmVudEVudHJ5KTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5kaXJlY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwiQFwiKTtcclxuICAgICAgICAgICAgICByZXR1cm4gXCJAXCIgKyB0aGlzLmtleSgpO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLnByZWFtYmxlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnkgPSB7fTtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeVsnZW50cnlUeXBlJ10gPSAnUFJFQU1CTEUnO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeSddID0gdGhpcy52YWx1ZV9jb21tZW50KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnB1c2godGhpcy5jdXJyZW50RW50cnkpO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbW1lbnQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeSA9IHt9O1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeVR5cGUnXSA9ICdDT01NRU5UJztcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeVsnZW50cnknXSA9IHRoaXMudmFsdWVfY29tbWVudCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZW50cmllcy5wdXNoKHRoaXMuY3VycmVudEVudHJ5KTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5lbnRyeSA9IGZ1bmN0aW9uKGQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVudHJ5X2JvZHkoZCk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMuYmlidGV4ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2hBdCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaXJlY3RpdmUoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChcIntcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChkID09IFwiQFNUUklOR1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGQgPT0gXCJAUFJFQU1CTEVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVhbWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGQgPT0gXCJAQ09NTUVOVFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkoZCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChcIn1cIik7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBleHBvcnRzLnRvSlNPTiA9IGZ1bmN0aW9uKGJpYnRleCkge1xyXG4gICAgICAgICAgdmFyIGIgPSBuZXcgQmlidGV4UGFyc2VyKCk7XHJcbiAgICAgICAgICBiLnNldElucHV0KGJpYnRleCk7XHJcbiAgICAgICAgICBiLmJpYnRleCgpO1xyXG4gICAgICAgICAgcmV0dXJuIGIuZW50cmllcztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8qIGFkZGVkIGR1cmluZyBoYWNrYXRob24gZG9uJ3QgaGF0ZSBvbiBtZSAqL1xyXG4gICAgICBleHBvcnRzLnRvQmlidGV4ID0gZnVuY3Rpb24oanNvbikge1xyXG4gICAgICAgICAgdmFyIG91dCA9ICcnO1xyXG4gICAgICAgICAgZm9yICggdmFyIGkgaW4ganNvbikge1xyXG4gICAgICAgICAgICAgIG91dCArPSBcIkBcIiArIGpzb25baV0uZW50cnlUeXBlO1xyXG4gICAgICAgICAgICAgIG91dCArPSAneyc7XHJcbiAgICAgICAgICAgICAgaWYgKGpzb25baV0uY2l0YXRpb25LZXkpXHJcbiAgICAgICAgICAgICAgICAgIG91dCArPSBqc29uW2ldLmNpdGF0aW9uS2V5ICsgJywgJztcclxuICAgICAgICAgICAgICBpZiAoanNvbltpXS5lbnRyeSlcclxuICAgICAgICAgICAgICAgICAgb3V0ICs9IGpzb25baV0uZW50cnkgO1xyXG4gICAgICAgICAgICAgIGlmIChqc29uW2ldLmVudHJ5VGFncykge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdGFncyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBqZHggaW4ganNvbltpXS5lbnRyeVRhZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWdzLmxlbmd0aCAhPSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgKz0gJywgJztcclxuICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgKz0gamR4ICsgJz0geycgKyBqc29uW2ldLmVudHJ5VGFnc1tqZHhdICsgJ30nO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIG91dCArPSB0YWdzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBvdXQgKz0gJ31cXG5cXG4nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG91dDtcclxuXHJcbiAgICAgIH07XHJcblxyXG4gIH0pKCBleHBvcnRzKTtcclxuXHJcbiAgLyogZW5kIGJpYnRleFBhcnNlICovXHJcbiAgfSk7XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgZnVuY3Rpb24gbm9ybWFsaXplVGFnKHN0cmluZykge1xyXG4gICAgcmV0dXJuIHN0cmluZ1xyXG4gICAgICAucmVwbGFjZSgvW1xcdFxcbiBdKy9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC97XFxcXFtcIl5gLidhY3V+SHZzXSggKT8oW2EtekEtWl0pfS9nLCAoZnVsbCwgeCwgY2hhcikgPT4gY2hhcilcclxuICAgICAgLnJlcGxhY2UoL3tcXFxcKFthLXpBLVpdKX0vZywgKGZ1bGwsIGNoYXIpID0+IGNoYXIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VCaWJ0ZXgoYmlidGV4KSB7XHJcbiAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBuZXcgTWFwKCk7XHJcbiAgICBjb25zdCBwYXJzZWRFbnRyaWVzID0gYmlidGV4UGFyc2UudG9KU09OKGJpYnRleCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZEVudHJpZXMpIHtcclxuICAgICAgLy8gbm9ybWFsaXplIHRhZ3M7IG5vdGUgZW50cnlUYWdzIGlzIGFuIG9iamVjdCwgbm90IE1hcFxyXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeS5lbnRyeVRhZ3MpKSB7XHJcbiAgICAgICAgZW50cnkuZW50cnlUYWdzW2tleS50b0xvd2VyQ2FzZSgpXSA9IG5vcm1hbGl6ZVRhZyh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZW50cnkuZW50cnlUYWdzLnR5cGUgPSBlbnRyeS5lbnRyeVR5cGU7XHJcbiAgICAgIC8vIGFkZCB0byBiaWJsaW9ncmFwaHlcclxuICAgICAgYmlibGlvZ3JhcGh5LnNldChlbnRyeS5jaXRhdGlvbktleSwgZW50cnkuZW50cnlUYWdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBiaWJsaW9ncmFwaHk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXJpYWxpemVGcm9udG1hdHRlclRvQmlidGV4KGZyb250TWF0dGVyKSB7XHJcbiAgICByZXR1cm4gYEBhcnRpY2xleyR7ZnJvbnRNYXR0ZXIuc2x1Z30sXHJcbiAgYXV0aG9yID0geyR7ZnJvbnRNYXR0ZXIuYmlidGV4QXV0aG9yc319LFxyXG4gIHRpdGxlID0geyR7ZnJvbnRNYXR0ZXIudGl0bGV9fSxcclxuICBqb3VybmFsID0geyR7ZnJvbnRNYXR0ZXIuam91cm5hbC50aXRsZX19LFxyXG4gIHllYXIgPSB7JHtmcm9udE1hdHRlci5wdWJsaXNoZWRZZWFyfX0sXHJcbiAgbm90ZSA9IHske2Zyb250TWF0dGVyLnVybH19LFxyXG4gIGRvaSA9IHske2Zyb250TWF0dGVyLmRvaX19XHJcbn1gO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjbGFzcyBCaWJsaW9ncmFwaHkgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcblxyXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkLWJpYmxpb2dyYXBoeSc7IH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgIC8vIHNldCB1cCBtdXRhdGlvbiBvYnNlcnZlclxyXG4gICAgICBjb25zdCBvcHRpb25zID0ge2NoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSwgc3VidHJlZTogdHJ1ZX07XHJcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIChlbnRyaWVzKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XHJcbiAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0Lm5vZGVOYW1lID09PSAnU0NSSVBUJyB8fCBlbnRyeS50eXBlID09PSAnY2hhcmFjdGVyRGF0YScpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJzZUlmUG9zc2libGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGFyc2VJZlBvc3NpYmxlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlSWZQb3NzaWJsZSgpIHtcclxuICAgICAgY29uc3Qgc2NyaXB0VGFnID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdzY3JpcHQnKTtcclxuICAgICAgaWYgKCFzY3JpcHRUYWcpIHJldHVybjtcclxuICAgICAgaWYgKHNjcmlwdFRhZy50eXBlID09ICd0ZXh0L2JpYnRleCcpIHtcclxuICAgICAgICBjb25zdCBuZXdCaWJ0ZXggPSBzY3JpcHRUYWcudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuYmlidGV4ICE9PSBuZXdCaWJ0ZXgpIHtcclxuICAgICAgICAgIHRoaXMuYmlidGV4ID0gbmV3QmlidGV4O1xyXG4gICAgICAgICAgY29uc3QgYmlibGlvZ3JhcGh5ID0gcGFyc2VCaWJ0ZXgodGhpcy5iaWJ0ZXgpO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnkoYmlibGlvZ3JhcGh5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VGFnLnR5cGUgPT0gJ3RleHQvanNvbicpIHtcclxuICAgICAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBuZXcgTWFwKEpTT04ucGFyc2Uoc2NyaXB0VGFnLnRleHRDb250ZW50KSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZnkoYmlibGlvZ3JhcGh5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1Vuc3VwcG9ydGVkIGJpYmxpb2dyYXBoeSBzY3JpcHQgdGFnIHR5cGU6ICcgKyBzY3JpcHRUYWcudHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBub3RpZnkoYmlibGlvZ3JhcGh5KSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGRldGFpbDogYmlibGlvZ3JhcGh5LCBidWJibGVzOiB0cnVlIH07XHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkJpYmxpb2dyYXBoeUNoYW5nZWQnLCBvcHRpb25zKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBvYnNlcnZlICdzcmMnIGF0dHJpYnV0ZSAqL1xyXG5cclxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xyXG4gICAgICByZXR1cm4gWydzcmMnXTtcclxuICAgIH1cclxuXHJcbiAgICByZWNlaXZlZEJpYnRleChldmVudCkge1xyXG4gICAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBwYXJzZUJpYnRleChldmVudC50YXJnZXQucmVzcG9uc2UpO1xyXG4gICAgICB0aGlzLm5vdGlmeShiaWJsaW9ncmFwaHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcclxuICAgICAgdmFyIG9SZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgb1JlcS5vbmxvYWQgPSAoZSkgPT4gdGhpcy5yZWNlaXZlZEJpYnRleChlKTtcclxuICAgICAgb1JlcS5vbmVycm9yID0gKCkgPT4gY29uc29sZS53YXJuKGBDb3VsZCBub3QgbG9hZCBCaWJ0ZXghICh0cmllZCAke25ld1ZhbHVlfSlgKTtcclxuICAgICAgb1JlcS5yZXNwb25zZVR5cGUgPSAndGV4dCc7XHJcbiAgICAgIG9SZXEub3BlbignR0VUJywgbmV3VmFsdWUsIHRydWUpO1xyXG4gICAgICBvUmVxLnNlbmQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIC8vIGltcG9ydCBzdHlsZSBmcm9tICcuLi9zdHlsZXMvZC1ieWxpbmUuY3NzJztcclxuXHJcbiAgZnVuY3Rpb24gYnlsaW5lVGVtcGxhdGUoZnJvbnRNYXR0ZXIpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiYnlsaW5lIGdyaWRcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICAgIDxoMz5BdXRob3JzPC9oMz5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgJHtmcm9udE1hdHRlci5hdXRob3JzLm1hcCgoYXV0aG9yLCBpKSA9PiBgXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRob3JcIj5cclxuICAgICAgICAke2F1dGhvci5wZXJzb25hbFVSTCA/IGBcclxuICAgICAgICAgIDxhIGNsYXNzPVwibmFtZVwiIGhyZWY9XCIke2F1dGhvci5wZXJzb25hbFVSTH1cIj4ke2F1dGhvci5uYW1lfWAgKyAoaSArIDEgPCBmcm9udE1hdHRlci5hdXRob3JzLmxlbmd0aCA/IGAsYCA6IGBgKSArIGA8L2E+YCA6IGBcclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiPiR7YXV0aG9yLm5hbWV9YCArIChpICsgMSA8IGZyb250TWF0dGVyLmF1dGhvcnMubGVuZ3RoID8gYCxgIDogYGApICsgYDwvc3Bhbj5gfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgYCkuam9pbignJyl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgPlxyXG4gICAgICAgICAgPGgzPkFmZmlsaWF0aW9uPC9oMz5cclxuICAgICAgICAgIDxkaXY+PGEgaHJlZj1cImh0dHBzOi8vd3d3LnVuaWJvLml0L2VuL2hvbWVwYWdlXCI+VW5pdmVyc2l0eSBvZiBCb2xvZ25hPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ID5cclxuICAgICAgICAgIDxoMz5QdWJsaXNoZWQ8L2gzPlxyXG4gICAgICAgICAgPGRpdj5NYXJjaCAyOCwgMjAyNTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNpZGUgcGRmLWRvd25sb2FkXCI+XHJcbiAgICAgIDxoMz5Eb3dubG9hZDwvaDM+XHJcbiAgICAgIDxhIGhyZWY9XCIuLi9hc3NldHMvcGRmL3BkZl92ZXJzaW9uLnBkZlwiPlxyXG4gICAgICA8aW1nIHN0eWxlPVwid2lkdGg6IDMycHg7XCIgc3JjPVwiLi4vYXNzZXRzL2ltYWdlcy8yNTZweC1QREYucG5nXCIgYWx0PVwiUERGXCI+PC9hPlxyXG4gICAgPC9kaXY+XHJcbmA7XHJcbiAgfVxyXG5cclxuICBjbGFzcyBCeWxpbmUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcblxyXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkLWJ5bGluZSc7IH1cclxuXHJcbiAgICBzZXQgZnJvbnRNYXR0ZXIoZnJvbnRNYXR0ZXIpIHtcclxuICAgICAgdGhpcy5pbm5lckhUTUwgPSBieWxpbmVUZW1wbGF0ZShmcm9udE1hdHRlcik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjb25zdCBUJDMgPSBUZW1wbGF0ZShcclxuICAgIFwiZC1jaXRlXCIsXHJcbiAgICBgXHJcbjxzdHlsZT5cclxuXHJcbjpob3N0IHtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuXHJcbi5jaXRhdGlvbiB7XHJcbiAgY29sb3I6IGhzbGEoMjA2LCA5MCUsIDIwJSwgMC43KTtcclxufVxyXG5cclxuLmNpdGF0aW9uLW51bWJlciB7XHJcbiAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJSb2JvdG9cIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG4gIGZvbnQtc2l6ZTogNzUlO1xyXG4gIGNvbG9yOiBoc2xhKDIwNiwgOTAlLCAyMCUsIDAuNyk7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjFlbTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogLTJweDtcclxuICBtYXJnaW46IDAgMnB4O1xyXG59XHJcblxyXG5maWdjYXB0aW9uIC5jaXRhdGlvbi1udW1iZXIge1xyXG4gIGZvbnQtc2l6ZTogMTFweDtcclxuICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gIHRvcDogLTJweDtcclxuICBsaW5lLWhlaWdodDogMWVtO1xyXG59XHJcblxyXG51bCB7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xyXG59XHJcblxyXG51bCBsaSB7XHJcbiAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggMTBweDtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEpXHJcbn1cclxuXHJcbnVsIGxpOmxhc3Qtb2YtdHlwZSB7XHJcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxufVxyXG5cclxuPC9zdHlsZT5cclxuXHJcbjxkLWhvdmVyLWJveCBpZD1cImhvdmVyLWJveFwiPjwvZC1ob3Zlci1ib3g+XHJcblxyXG48ZGl2IGlkPVwiY2l0YXRpb24tXCIgY2xhc3M9XCJjaXRhdGlvblwiPlxyXG4gIDxzcGFuIGNsYXNzPVwiY2l0YXRpb24tbnVtYmVyXCI+PC9zcGFuPlxyXG48L2Rpdj5cclxuYFxyXG4gICk7XHJcblxyXG4gIGNsYXNzIENpdGUgZXh0ZW5kcyBUJDMoSFRNTEVsZW1lbnQpIHtcclxuICAgIC8qIExpZmVjeWNsZSAqL1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIHN1cGVyKCk7XHJcbiAgICAgIHRoaXMuX251bWJlcnMgPSBbXTtcclxuICAgICAgdGhpcy5fZW50cmllcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICB0aGlzLm91dGVyU3BhbiA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKFwiI2NpdGF0aW9uLVwiKTtcclxuICAgICAgdGhpcy5pbm5lclNwYW4gPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihcIi5jaXRhdGlvbi1udW1iZXJcIik7XHJcbiAgICAgIHRoaXMuaG92ZXJCb3ggPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihcImQtaG92ZXItYm94XCIpO1xyXG4gICAgICB3aW5kb3cuY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoXCJkLWhvdmVyLWJveFwiKS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmhvdmVyQm94Lmxpc3Rlbih0aGlzKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGluIGNhc2UgdGhpcyBjb21wb25lbnQgZ290IGNvbm5lY3RlZCBhZnRlciB2YWx1ZXMgd2VyZSBzZXRcclxuICAgICAgaWYgKHRoaXMubnVtYmVycykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU51bWJlcnModGhpcy5udW1iZXJzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5lbnRyaWVzKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5RW50cmllcyh0aGlzLmVudHJpZXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9UT0RPIFRoaXMgY2F1c2VzIGFuIGluZmluaXRlIGxvb3Agb24gZmlyZWZveCB3aXRoIHBvbHlmaWxscy5cclxuICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGludGVyYWN0aXZlIGVkaXRpbmcgc28gbm8gcHJpb3JpdHkuXHJcbiAgICAvLyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgIC8vIGNvbnN0IG9wdGlvbnMgPSB7IGRldGFpbDogW3RoaXMsIHRoaXMua2V5c10sIGJ1YmJsZXM6IHRydWUgfTtcclxuICAgIC8vIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkNpdGVLZXlSZW1vdmVkJywgb3B0aW9ucyk7XHJcbiAgICAvLyBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKiBvYnNlcnZlICdrZXknIGF0dHJpYnV0ZSAqL1xyXG5cclxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xyXG4gICAgICByZXR1cm4gW1wia2V5XCIsIFwiYmlidGV4LWtleVwiXTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IG9sZFZhbHVlID8gXCJvbkNpdGVLZXlDaGFuZ2VkXCIgOiBcIm9uQ2l0ZUtleUNyZWF0ZWRcIjtcclxuICAgICAgY29uc3Qga2V5cyA9IG5ld1ZhbHVlLnNwbGl0KFwiLFwiKS5tYXAoayA9PiBrLnRyaW0oKSk7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGRldGFpbDogW3RoaXMsIGtleXNdLCBidWJibGVzOiB0cnVlIH07XHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgb3B0aW9ucyk7XHJcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBrZXkodmFsdWUpIHtcclxuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJrZXlcIiwgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBrZXkoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImtleVwiKSB8fCB0aGlzLmdldEF0dHJpYnV0ZShcImJpYnRleC1rZXlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGtleXMoKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMua2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKiBTZXR0ZXJzICYgUmVuZGVyaW5nICovXHJcblxyXG4gICAgc2V0IG51bWJlcnMobnVtYmVycykge1xyXG4gICAgICB0aGlzLl9udW1iZXJzID0gbnVtYmVycztcclxuICAgICAgdGhpcy5kaXNwbGF5TnVtYmVycyhudW1iZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbnVtYmVycygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX251bWJlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheU51bWJlcnMobnVtYmVycykge1xyXG4gICAgICBpZiAoIXRoaXMuaW5uZXJTcGFuKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IG51bWJlclN0cmluZ3MgPSBudW1iZXJzLm1hcChpbmRleCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID09IC0xID8gXCI/XCIgOiBpbmRleCArIDEgKyBcIlwiO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBcIltcIiArIG51bWJlclN0cmluZ3Muam9pbihcIiwgXCIpICsgXCJdXCI7XHJcbiAgICAgIHRoaXMuaW5uZXJTcGFuLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGVudHJpZXMoZW50cmllcykge1xyXG4gICAgICB0aGlzLl9lbnRyaWVzID0gZW50cmllcztcclxuICAgICAgdGhpcy5kaXNwbGF5RW50cmllcyhlbnRyaWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZW50cmllcygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2VudHJpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheUVudHJpZXMoZW50cmllcykge1xyXG4gICAgICBpZiAoIXRoaXMuaG92ZXJCb3gpIHJldHVybjtcclxuICAgICAgdGhpcy5ob3ZlckJveC5pbm5lckhUTUwgPSBgPHVsPlxyXG4gICAgICAke2VudHJpZXNcclxuICAgICAgICAubWFwKGhvdmVyX2NpdGUpXHJcbiAgICAgICAgLm1hcChodG1sID0+IGA8bGk+JHtodG1sfTwvbGk+YClcclxuICAgICAgICAuam9pbihcIlxcblwiKX1cclxuICAgIDwvdWw+YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3Qgc3R5bGVzJDEgPSBgXHJcbmQtY2l0YXRpb24tbGlzdCB7XHJcbiAgY29udGFpbjogc3R5bGU7XHJcbn1cclxuXHJcbmQtY2l0YXRpb24tbGlzdCAucmVmZXJlbmNlcyB7XHJcbiAgZ3JpZC1jb2x1bW46IHRleHQ7XHJcbn1cclxuXHJcbmQtY2l0YXRpb24tbGlzdCAucmVmZXJlbmNlcyAudGl0bGUge1xyXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XHJcbn1cclxuYDtcclxuXHJcbiAgZnVuY3Rpb24gcmVuZGVyQ2l0YXRpb25MaXN0KGVsZW1lbnQsIGVudHJpZXMsIGRvbT1kb2N1bWVudCkge1xyXG4gICAgaWYgKGVudHJpZXMuc2l6ZSA+IDApIHtcclxuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgIGxldCBsaXN0ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucmVmZXJlbmNlcycpO1xyXG4gICAgICBpZiAobGlzdCkge1xyXG4gICAgICAgIGxpc3QuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGVzVGFnID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgICAgc3R5bGVzVGFnLmlubmVySFRNTCA9IHN0eWxlcyQxO1xyXG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGVzVGFnKTtcclxuXHJcbiAgICAgICAgY29uc3QgaGVhZGluZyA9IGRvbS5jcmVhdGVFbGVtZW50KCdoMycpO1xyXG4gICAgICAgIGhlYWRpbmcuaWQgPSAncmVmZXJlbmNlcyc7XHJcbiAgICAgICAgaGVhZGluZy50ZXh0Q29udGVudCA9ICdSZWZlcmVuY2VzJztcclxuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGhlYWRpbmcpO1xyXG5cclxuICAgICAgICBsaXN0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ29sJyk7XHJcbiAgICAgICAgbGlzdC5pZCA9ICdyZWZlcmVuY2VzLWxpc3QnO1xyXG4gICAgICAgIGxpc3QuY2xhc3NOYW1lID0gJ3JlZmVyZW5jZXMnO1xyXG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGlzdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIGVudHJpZXMpIHtcclxuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IGRvbS5jcmVhdGVFbGVtZW50KCdsaScpO1xyXG4gICAgICAgIGxpc3RJdGVtLmlkID0ga2V5O1xyXG4gICAgICAgIGxpc3RJdGVtLmlubmVySFRNTCA9IGJpYmxpb2dyYXBoeV9jaXRlKGVudHJ5KTtcclxuICAgICAgICBsaXN0LmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xhc3MgQ2l0YXRpb25MaXN0IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC1jaXRhdGlvbi1saXN0JzsgfVxyXG5cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkaXN0aWxsLXByZXJlbmRlcmVkJykpIHtcclxuICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2l0YXRpb25zKGNpdGF0aW9ucykge1xyXG4gICAgICByZW5kZXJDaXRhdGlvbkxpc3QodGhpcywgY2l0YXRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB2YXIgcHJpc20gPSBjcmVhdGVDb21tb25qc01vZHVsZShmdW5jdGlvbiAobW9kdWxlKSB7XHJcbiAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgQmVnaW4gcHJpc20tY29yZS5qc1xyXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgdmFyIF9zZWxmID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxyXG4gIFx0PyB3aW5kb3cgICAvLyBpZiBpbiBicm93c2VyXHJcbiAgXHQ6IChcclxuICBcdFx0KHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlKVxyXG4gIFx0XHQ/IHNlbGYgLy8gaWYgaW4gd29ya2VyXHJcbiAgXHRcdDoge30gICAvLyBpZiBpbiBub2RlIGpzXHJcbiAgXHQpO1xyXG5cclxuICAvKipcclxuICAgKiBQcmlzbTogTGlnaHR3ZWlnaHQsIHJvYnVzdCwgZWxlZ2FudCBzeW50YXggaGlnaGxpZ2h0aW5nXHJcbiAgICogTUlUIGxpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAvXHJcbiAgICogQGF1dGhvciBMZWEgVmVyb3UgaHR0cDovL2xlYS52ZXJvdS5tZVxyXG4gICAqL1xyXG5cclxuICB2YXIgUHJpc20gPSAoZnVuY3Rpb24gKF9zZWxmKXtcclxuXHJcbiAgLy8gUHJpdmF0ZSBoZWxwZXIgdmFyc1xyXG4gIHZhciBsYW5nID0gL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2k7XHJcbiAgdmFyIHVuaXF1ZUlkID0gMDtcclxuXHJcblxyXG4gIHZhciBfID0ge1xyXG4gIFx0bWFudWFsOiBfc2VsZi5QcmlzbSAmJiBfc2VsZi5QcmlzbS5tYW51YWwsXHJcbiAgXHRkaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXI6IF9zZWxmLlByaXNtICYmIF9zZWxmLlByaXNtLmRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcixcclxuICBcdHV0aWw6IHtcclxuICBcdFx0ZW5jb2RlOiBmdW5jdGlvbiBlbmNvZGUodG9rZW5zKSB7XHJcbiAgXHRcdFx0aWYgKHRva2VucyBpbnN0YW5jZW9mIFRva2VuKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gbmV3IFRva2VuKHRva2Vucy50eXBlLCBlbmNvZGUodG9rZW5zLmNvbnRlbnQpLCB0b2tlbnMuYWxpYXMpO1xyXG4gIFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0b2tlbnMpKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdG9rZW5zLm1hcChlbmNvZGUpO1xyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdG9rZW5zLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcblxyXG4gIFx0XHR0eXBlOiBmdW5jdGlvbiAobykge1xyXG4gIFx0XHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xyXG4gIFx0XHR9LFxyXG5cclxuICBcdFx0b2JqSWQ6IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0XHRpZiAoIW9ialsnX19pZCddKSB7XHJcbiAgXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19pZCcsIHsgdmFsdWU6ICsrdW5pcXVlSWQgfSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybiBvYmpbJ19faWQnXTtcclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdC8vIERlZXAgY2xvbmUgYSBsYW5ndWFnZSBkZWZpbml0aW9uIChlLmcuIHRvIGV4dGVuZCBpdClcclxuICBcdFx0Y2xvbmU6IGZ1bmN0aW9uIGRlZXBDbG9uZShvLCB2aXNpdGVkKSB7XHJcbiAgXHRcdFx0dmFyIGNsb25lLCBpZCwgdHlwZSA9IF8udXRpbC50eXBlKG8pO1xyXG4gIFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xyXG5cclxuICBcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuICBcdFx0XHRcdGNhc2UgJ09iamVjdCc6XHJcbiAgXHRcdFx0XHRcdGlkID0gXy51dGlsLm9iaklkKG8pO1xyXG4gIFx0XHRcdFx0XHRpZiAodmlzaXRlZFtpZF0pIHtcclxuICBcdFx0XHRcdFx0XHRyZXR1cm4gdmlzaXRlZFtpZF07XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcclxuICBcdFx0XHRcdFx0dmlzaXRlZFtpZF0gPSBjbG9uZTtcclxuXHJcbiAgXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBvKSB7XHJcbiAgXHRcdFx0XHRcdFx0aWYgKG8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gIFx0XHRcdFx0XHRcdFx0Y2xvbmVba2V5XSA9IGRlZXBDbG9uZShvW2tleV0sIHZpc2l0ZWQpO1xyXG4gIFx0XHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdFx0cmV0dXJuIGNsb25lO1xyXG5cclxuICBcdFx0XHRcdGNhc2UgJ0FycmF5JzpcclxuICBcdFx0XHRcdFx0aWQgPSBfLnV0aWwub2JqSWQobyk7XHJcbiAgXHRcdFx0XHRcdGlmICh2aXNpdGVkW2lkXSkge1xyXG4gIFx0XHRcdFx0XHRcdHJldHVybiB2aXNpdGVkW2lkXTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xyXG4gIFx0XHRcdFx0XHR2aXNpdGVkW2lkXSA9IGNsb25lO1xyXG5cclxuICBcdFx0XHRcdFx0by5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XHJcbiAgXHRcdFx0XHRcdFx0Y2xvbmVbaV0gPSBkZWVwQ2xvbmUodiwgdmlzaXRlZCk7XHJcbiAgXHRcdFx0XHRcdH0pO1xyXG5cclxuICBcdFx0XHRcdFx0cmV0dXJuIGNsb25lO1xyXG5cclxuICBcdFx0XHRcdGRlZmF1bHQ6XHJcbiAgXHRcdFx0XHRcdHJldHVybiBvO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdC8qKlxyXG4gIFx0XHQgKiBSZXR1cm5zIHRoZSBQcmlzbSBsYW5ndWFnZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBzZXQgYnkgYSBgbGFuZ3VhZ2UteHh4eGAgb3IgYGxhbmcteHh4eGAgY2xhc3MuXHJcbiAgXHRcdCAqXHJcbiAgXHRcdCAqIElmIG5vIGxhbmd1YWdlIGlzIHNldCBmb3IgdGhlIGVsZW1lbnQgb3IgdGhlIGVsZW1lbnQgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLCBgbm9uZWAgd2lsbCBiZSByZXR1cm5lZC5cclxuICBcdFx0ICpcclxuICBcdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XHJcbiAgXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgXHRcdCAqL1xyXG4gIFx0XHRnZXRMYW5ndWFnZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICBcdFx0XHR3aGlsZSAoZWxlbWVudCAmJiAhbGFuZy50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG4gIFx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0aWYgKGVsZW1lbnQpIHtcclxuICBcdFx0XHRcdHJldHVybiAoZWxlbWVudC5jbGFzc05hbWUubWF0Y2gobGFuZykgfHwgWywgJ25vbmUnXSlbMV0udG9Mb3dlckNhc2UoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuICdub25lJztcclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdC8qKlxyXG4gIFx0XHQgKiBSZXR1cm5zIHRoZSBzY3JpcHQgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBleGVjdXRpbmcuXHJcbiAgXHRcdCAqXHJcbiAgXHRcdCAqIFRoaXMgZG9lcyBfX25vdF9fIHdvcmsgZm9yIGxpbmUgc2NyaXB0IGVsZW1lbnQuXHJcbiAgXHRcdCAqXHJcbiAgXHRcdCAqIEByZXR1cm5zIHtIVE1MU2NyaXB0RWxlbWVudCB8IG51bGx9XHJcbiAgXHRcdCAqL1xyXG4gIFx0XHRjdXJyZW50U2NyaXB0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICBcdFx0XHRcdHJldHVybiBudWxsO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRpZiAoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50KSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY3VycmVudFNjcmlwdDtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdC8vIElFMTEgd29ya2Fyb3VuZFxyXG4gIFx0XHRcdC8vIHdlJ2xsIGdldCB0aGUgc3JjIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBieSBwYXJzaW5nIElFMTEncyBlcnJvciBzdGFjayB0cmFjZVxyXG4gIFx0XHRcdC8vIHRoaXMgd2lsbCBub3Qgd29yayBmb3IgaW5saW5lIHNjcmlwdHNcclxuXHJcbiAgXHRcdFx0dHJ5IHtcclxuICBcdFx0XHRcdHRocm93IG5ldyBFcnJvcigpO1xyXG4gIFx0XHRcdH0gY2F0Y2ggKGVycikge1xyXG4gIFx0XHRcdFx0Ly8gR2V0IGZpbGUgc3JjIHVybCBmcm9tIHN0YWNrLiBTcGVjaWZpY2FsbHkgd29ya3Mgd2l0aCB0aGUgZm9ybWF0IG9mIHN0YWNrIHRyYWNlcyBpbiBJRS5cclxuICBcdFx0XHRcdC8vIEEgc3RhY2sgd2lsbCBsb29rIGxpa2UgdGhpczpcclxuICBcdFx0XHRcdC8vXHJcbiAgXHRcdFx0XHQvLyBFcnJvclxyXG4gIFx0XHRcdFx0Ly8gICAgYXQgXy51dGlsLmN1cnJlbnRTY3JpcHQgKGh0dHA6Ly9sb2NhbGhvc3QvY29tcG9uZW50cy9wcmlzbS1jb3JlLmpzOjExOTo1KVxyXG4gIFx0XHRcdFx0Ly8gICAgYXQgR2xvYmFsIGNvZGUgKGh0dHA6Ly9sb2NhbGhvc3QvY29tcG9uZW50cy9wcmlzbS1jb3JlLmpzOjYwNjoxKVxyXG5cclxuICBcdFx0XHRcdHZhciBzcmMgPSAoL2F0IFteKFxcclxcbl0qXFwoKC4qKTouKzouK1xcKSQvaS5leGVjKGVyci5zdGFjaykgfHwgW10pWzFdO1xyXG4gIFx0XHRcdFx0aWYgKHNyYykge1xyXG4gIFx0XHRcdFx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcclxuICBcdFx0XHRcdFx0Zm9yICh2YXIgaSBpbiBzY3JpcHRzKSB7XHJcbiAgXHRcdFx0XHRcdFx0aWYgKHNjcmlwdHNbaV0uc3JjID09IHNyYykge1xyXG4gIFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNjcmlwdHNbaV07XHJcbiAgXHRcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0bGFuZ3VhZ2VzOiB7XHJcbiAgXHRcdGV4dGVuZDogZnVuY3Rpb24gKGlkLCByZWRlZikge1xyXG4gIFx0XHRcdHZhciBsYW5nID0gXy51dGlsLmNsb25lKF8ubGFuZ3VhZ2VzW2lkXSk7XHJcblxyXG4gIFx0XHRcdGZvciAodmFyIGtleSBpbiByZWRlZikge1xyXG4gIFx0XHRcdFx0bGFuZ1trZXldID0gcmVkZWZba2V5XTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHJldHVybiBsYW5nO1xyXG4gIFx0XHR9LFxyXG5cclxuICBcdFx0LyoqXHJcbiAgXHRcdCAqIEluc2VydCBhIHRva2VuIGJlZm9yZSBhbm90aGVyIHRva2VuIGluIGEgbGFuZ3VhZ2UgbGl0ZXJhbFxyXG4gIFx0XHQgKiBBcyB0aGlzIG5lZWRzIHRvIHJlY3JlYXRlIHRoZSBvYmplY3QgKHdlIGNhbm5vdCBhY3R1YWxseSBpbnNlcnQgYmVmb3JlIGtleXMgaW4gb2JqZWN0IGxpdGVyYWxzKSxcclxuICBcdFx0ICogd2UgY2Fubm90IGp1c3QgcHJvdmlkZSBhbiBvYmplY3QsIHdlIG5lZWQgYW4gb2JqZWN0IGFuZCBhIGtleS5cclxuICBcdFx0ICogQHBhcmFtIGluc2lkZSBUaGUga2V5IChvciBsYW5ndWFnZSBpZCkgb2YgdGhlIHBhcmVudFxyXG4gIFx0XHQgKiBAcGFyYW0gYmVmb3JlIFRoZSBrZXkgdG8gaW5zZXJ0IGJlZm9yZS5cclxuICBcdFx0ICogQHBhcmFtIGluc2VydCBPYmplY3Qgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIHRvIGluc2VydFxyXG4gIFx0XHQgKiBAcGFyYW0gcm9vdCBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgYGluc2lkZWAuIElmIGVxdWFsIHRvIFByaXNtLmxhbmd1YWdlcywgaXQgY2FuIGJlIG9taXR0ZWQuXHJcbiAgXHRcdCAqL1xyXG4gIFx0XHRpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uIChpbnNpZGUsIGJlZm9yZSwgaW5zZXJ0LCByb290KSB7XHJcbiAgXHRcdFx0cm9vdCA9IHJvb3QgfHwgXy5sYW5ndWFnZXM7XHJcbiAgXHRcdFx0dmFyIGdyYW1tYXIgPSByb290W2luc2lkZV07XHJcbiAgXHRcdFx0dmFyIHJldCA9IHt9O1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciB0b2tlbiBpbiBncmFtbWFyKSB7XHJcbiAgXHRcdFx0XHRpZiAoZ3JhbW1hci5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcclxuXHJcbiAgXHRcdFx0XHRcdGlmICh0b2tlbiA9PSBiZWZvcmUpIHtcclxuICBcdFx0XHRcdFx0XHRmb3IgKHZhciBuZXdUb2tlbiBpbiBpbnNlcnQpIHtcclxuICBcdFx0XHRcdFx0XHRcdGlmIChpbnNlcnQuaGFzT3duUHJvcGVydHkobmV3VG9rZW4pKSB7XHJcbiAgXHRcdFx0XHRcdFx0XHRcdHJldFtuZXdUb2tlbl0gPSBpbnNlcnRbbmV3VG9rZW5dO1xyXG4gIFx0XHRcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdFx0Ly8gRG8gbm90IGluc2VydCB0b2tlbiB3aGljaCBhbHNvIG9jY3VyIGluIGluc2VydC4gU2VlICMxNTI1XHJcbiAgXHRcdFx0XHRcdGlmICghaW5zZXJ0Lmhhc093blByb3BlcnR5KHRva2VuKSkge1xyXG4gIFx0XHRcdFx0XHRcdHJldFt0b2tlbl0gPSBncmFtbWFyW3Rva2VuXTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dmFyIG9sZCA9IHJvb3RbaW5zaWRlXTtcclxuICBcdFx0XHRyb290W2luc2lkZV0gPSByZXQ7XHJcblxyXG4gIFx0XHRcdC8vIFVwZGF0ZSByZWZlcmVuY2VzIGluIG90aGVyIGxhbmd1YWdlIGRlZmluaXRpb25zXHJcbiAgXHRcdFx0Xy5sYW5ndWFnZXMuREZTKF8ubGFuZ3VhZ2VzLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgXHRcdFx0XHRpZiAodmFsdWUgPT09IG9sZCAmJiBrZXkgIT0gaW5zaWRlKSB7XHJcbiAgXHRcdFx0XHRcdHRoaXNba2V5XSA9IHJldDtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9KTtcclxuXHJcbiAgXHRcdFx0cmV0dXJuIHJldDtcclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdC8vIFRyYXZlcnNlIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiB3aXRoIERlcHRoIEZpcnN0IFNlYXJjaFxyXG4gIFx0XHRERlM6IGZ1bmN0aW9uIERGUyhvLCBjYWxsYmFjaywgdHlwZSwgdmlzaXRlZCkge1xyXG4gIFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xyXG5cclxuICBcdFx0XHR2YXIgb2JqSWQgPSBfLnV0aWwub2JqSWQ7XHJcblxyXG4gIFx0XHRcdGZvciAodmFyIGkgaW4gbykge1xyXG4gIFx0XHRcdFx0aWYgKG8uaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICBcdFx0XHRcdFx0Y2FsbGJhY2suY2FsbChvLCBpLCBvW2ldLCB0eXBlIHx8IGkpO1xyXG5cclxuICBcdFx0XHRcdFx0dmFyIHByb3BlcnR5ID0gb1tpXSxcclxuICBcdFx0XHRcdFx0ICAgIHByb3BlcnR5VHlwZSA9IF8udXRpbC50eXBlKHByb3BlcnR5KTtcclxuXHJcbiAgXHRcdFx0XHRcdGlmIChwcm9wZXJ0eVR5cGUgPT09ICdPYmplY3QnICYmICF2aXNpdGVkW29iaklkKHByb3BlcnR5KV0pIHtcclxuICBcdFx0XHRcdFx0XHR2aXNpdGVkW29iaklkKHByb3BlcnR5KV0gPSB0cnVlO1xyXG4gIFx0XHRcdFx0XHRcdERGUyhwcm9wZXJ0eSwgY2FsbGJhY2ssIG51bGwsIHZpc2l0ZWQpO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdGVsc2UgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0FycmF5JyAmJiAhdmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldKSB7XHJcbiAgXHRcdFx0XHRcdFx0dmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldID0gdHJ1ZTtcclxuICBcdFx0XHRcdFx0XHRERlMocHJvcGVydHksIGNhbGxiYWNrLCBpLCB2aXNpdGVkKTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuICBcdHBsdWdpbnM6IHt9LFxyXG5cclxuICBcdGhpZ2hsaWdodEFsbDogZnVuY3Rpb24oYXN5bmMsIGNhbGxiYWNrKSB7XHJcbiAgXHRcdF8uaGlnaGxpZ2h0QWxsVW5kZXIoZG9jdW1lbnQsIGFzeW5jLCBjYWxsYmFjayk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGhpZ2hsaWdodEFsbFVuZGVyOiBmdW5jdGlvbihjb250YWluZXIsIGFzeW5jLCBjYWxsYmFjaykge1xyXG4gIFx0XHR2YXIgZW52ID0ge1xyXG4gIFx0XHRcdGNhbGxiYWNrOiBjYWxsYmFjayxcclxuICBcdFx0XHRjb250YWluZXI6IGNvbnRhaW5lcixcclxuICBcdFx0XHRzZWxlY3RvcjogJ2NvZGVbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdLCBbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdIGNvZGUsIGNvZGVbY2xhc3MqPVwibGFuZy1cIl0sIFtjbGFzcyo9XCJsYW5nLVwiXSBjb2RlJ1xyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1oaWdobGlnaHRhbGwnLCBlbnYpO1xyXG5cclxuICBcdFx0ZW52LmVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGVudi5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbChlbnYuc2VsZWN0b3IpKTtcclxuXHJcbiAgXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtYWxsLWVsZW1lbnRzLWhpZ2hsaWdodCcsIGVudik7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgZWxlbWVudDsgZWxlbWVudCA9IGVudi5lbGVtZW50c1tpKytdOykge1xyXG4gIFx0XHRcdF8uaGlnaGxpZ2h0RWxlbWVudChlbGVtZW50LCBhc3luYyA9PT0gdHJ1ZSwgZW52LmNhbGxiYWNrKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRoaWdobGlnaHRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBhc3luYywgY2FsbGJhY2spIHtcclxuICBcdFx0Ly8gRmluZCBsYW5ndWFnZVxyXG4gIFx0XHR2YXIgbGFuZ3VhZ2UgPSBfLnV0aWwuZ2V0TGFuZ3VhZ2UoZWxlbWVudCk7XHJcbiAgXHRcdHZhciBncmFtbWFyID0gXy5sYW5ndWFnZXNbbGFuZ3VhZ2VdO1xyXG5cclxuICBcdFx0Ly8gU2V0IGxhbmd1YWdlIG9uIHRoZSBlbGVtZW50LCBpZiBub3QgcHJlc2VudFxyXG4gIFx0XHRlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UobGFuZywgJycpLnJlcGxhY2UoL1xccysvZywgJyAnKSArICcgbGFuZ3VhZ2UtJyArIGxhbmd1YWdlO1xyXG5cclxuICBcdFx0Ly8gU2V0IGxhbmd1YWdlIG9uIHRoZSBwYXJlbnQsIGZvciBzdHlsaW5nXHJcbiAgXHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgXHRcdGlmIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdwcmUnKSB7XHJcbiAgXHRcdFx0cGFyZW50LmNsYXNzTmFtZSA9IHBhcmVudC5jbGFzc05hbWUucmVwbGFjZShsYW5nLCAnJykucmVwbGFjZSgvXFxzKy9nLCAnICcpICsgJyBsYW5ndWFnZS0nICsgbGFuZ3VhZ2U7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBjb2RlID0gZWxlbWVudC50ZXh0Q29udGVudDtcclxuXHJcbiAgXHRcdHZhciBlbnYgPSB7XHJcbiAgXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcclxuICBcdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2UsXHJcbiAgXHRcdFx0Z3JhbW1hcjogZ3JhbW1hcixcclxuICBcdFx0XHRjb2RlOiBjb2RlXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBpbnNlcnRIaWdobGlnaHRlZENvZGUoaGlnaGxpZ2h0ZWRDb2RlKSB7XHJcbiAgXHRcdFx0ZW52LmhpZ2hsaWdodGVkQ29kZSA9IGhpZ2hsaWdodGVkQ29kZTtcclxuXHJcbiAgXHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1pbnNlcnQnLCBlbnYpO1xyXG5cclxuICBcdFx0XHRlbnYuZWxlbWVudC5pbm5lckhUTUwgPSBlbnYuaGlnaGxpZ2h0ZWRDb2RlO1xyXG5cclxuICBcdFx0XHRfLmhvb2tzLnJ1bignYWZ0ZXItaGlnaGxpZ2h0JywgZW52KTtcclxuICBcdFx0XHRfLmhvb2tzLnJ1bignY29tcGxldGUnLCBlbnYpO1xyXG4gIFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLXNhbml0eS1jaGVjaycsIGVudik7XHJcblxyXG4gIFx0XHRpZiAoIWVudi5jb2RlKSB7XHJcbiAgXHRcdFx0Xy5ob29rcy5ydW4oJ2NvbXBsZXRlJywgZW52KTtcclxuICBcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjay5jYWxsKGVudi5lbGVtZW50KTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0JywgZW52KTtcclxuXHJcbiAgXHRcdGlmICghZW52LmdyYW1tYXIpIHtcclxuICBcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy51dGlsLmVuY29kZShlbnYuY29kZSkpO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGFzeW5jICYmIF9zZWxmLldvcmtlcikge1xyXG4gIFx0XHRcdHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKF8uZmlsZW5hbWUpO1xyXG5cclxuICBcdFx0XHR3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7XHJcbiAgXHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoZXZ0LmRhdGEpO1xyXG4gIFx0XHRcdH07XHJcblxyXG4gIFx0XHRcdHdvcmtlci5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XHJcbiAgXHRcdFx0XHRsYW5ndWFnZTogZW52Lmxhbmd1YWdlLFxyXG4gIFx0XHRcdFx0Y29kZTogZW52LmNvZGUsXHJcbiAgXHRcdFx0XHRpbW1lZGlhdGVDbG9zZTogdHJ1ZVxyXG4gIFx0XHRcdH0pKTtcclxuICBcdFx0fVxyXG4gIFx0XHRlbHNlIHtcclxuICBcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy5oaWdobGlnaHQoZW52LmNvZGUsIGVudi5ncmFtbWFyLCBlbnYubGFuZ3VhZ2UpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRoaWdobGlnaHQ6IGZ1bmN0aW9uICh0ZXh0LCBncmFtbWFyLCBsYW5ndWFnZSkge1xyXG4gIFx0XHR2YXIgZW52ID0ge1xyXG4gIFx0XHRcdGNvZGU6IHRleHQsXHJcbiAgXHRcdFx0Z3JhbW1hcjogZ3JhbW1hcixcclxuICBcdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2VcclxuICBcdFx0fTtcclxuICBcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS10b2tlbml6ZScsIGVudik7XHJcbiAgXHRcdGVudi50b2tlbnMgPSBfLnRva2VuaXplKGVudi5jb2RlLCBlbnYuZ3JhbW1hcik7XHJcbiAgXHRcdF8uaG9va3MucnVuKCdhZnRlci10b2tlbml6ZScsIGVudik7XHJcbiAgXHRcdHJldHVybiBUb2tlbi5zdHJpbmdpZnkoXy51dGlsLmVuY29kZShlbnYudG9rZW5zKSwgZW52Lmxhbmd1YWdlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0dG9rZW5pemU6IGZ1bmN0aW9uKHRleHQsIGdyYW1tYXIpIHtcclxuICBcdFx0dmFyIHJlc3QgPSBncmFtbWFyLnJlc3Q7XHJcbiAgXHRcdGlmIChyZXN0KSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdG9rZW4gaW4gcmVzdCkge1xyXG4gIFx0XHRcdFx0Z3JhbW1hclt0b2tlbl0gPSByZXN0W3Rva2VuXTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdGRlbGV0ZSBncmFtbWFyLnJlc3Q7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciB0b2tlbkxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xyXG4gIFx0XHRhZGRBZnRlcih0b2tlbkxpc3QsIHRva2VuTGlzdC5oZWFkLCB0ZXh0KTtcclxuXHJcbiAgXHRcdG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIHRva2VuTGlzdC5oZWFkLCAwKTtcclxuXHJcbiAgXHRcdHJldHVybiB0b0FycmF5KHRva2VuTGlzdCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGhvb2tzOiB7XHJcbiAgXHRcdGFsbDoge30sXHJcblxyXG4gIFx0XHRhZGQ6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xyXG4gIFx0XHRcdHZhciBob29rcyA9IF8uaG9va3MuYWxsO1xyXG5cclxuICBcdFx0XHRob29rc1tuYW1lXSA9IGhvb2tzW25hbWVdIHx8IFtdO1xyXG5cclxuICBcdFx0XHRob29rc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdHJ1bjogZnVuY3Rpb24gKG5hbWUsIGVudikge1xyXG4gIFx0XHRcdHZhciBjYWxsYmFja3MgPSBfLmhvb2tzLmFsbFtuYW1lXTtcclxuXHJcbiAgXHRcdFx0aWYgKCFjYWxsYmFja3MgfHwgIWNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICBcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdGZvciAodmFyIGk9MCwgY2FsbGJhY2s7IGNhbGxiYWNrID0gY2FsbGJhY2tzW2krK107KSB7XHJcbiAgXHRcdFx0XHRjYWxsYmFjayhlbnYpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRUb2tlbjogVG9rZW5cclxuICB9O1xyXG5cclxuICBfc2VsZi5QcmlzbSA9IF87XHJcblxyXG4gIGZ1bmN0aW9uIFRva2VuKHR5cGUsIGNvbnRlbnQsIGFsaWFzLCBtYXRjaGVkU3RyLCBncmVlZHkpIHtcclxuICBcdHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgXHR0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gIFx0dGhpcy5hbGlhcyA9IGFsaWFzO1xyXG4gIFx0Ly8gQ29weSBvZiB0aGUgZnVsbCBzdHJpbmcgdGhpcyB0b2tlbiB3YXMgY3JlYXRlZCBmcm9tXHJcbiAgXHR0aGlzLmxlbmd0aCA9IChtYXRjaGVkU3RyIHx8ICcnKS5sZW5ndGh8MDtcclxuICBcdHRoaXMuZ3JlZWR5ID0gISFncmVlZHk7XHJcbiAgfVxyXG5cclxuICBUb2tlbi5zdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkobywgbGFuZ3VhZ2UpIHtcclxuICBcdGlmICh0eXBlb2YgbyA9PSAnc3RyaW5nJykge1xyXG4gIFx0XHRyZXR1cm4gbztcclxuICBcdH1cclxuICBcdGlmIChBcnJheS5pc0FycmF5KG8pKSB7XHJcbiAgXHRcdHZhciBzID0gJyc7XHJcbiAgXHRcdG8uZm9yRWFjaChmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRcdHMgKz0gc3RyaW5naWZ5KGUsIGxhbmd1YWdlKTtcclxuICBcdFx0fSk7XHJcbiAgXHRcdHJldHVybiBzO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBlbnYgPSB7XHJcbiAgXHRcdHR5cGU6IG8udHlwZSxcclxuICBcdFx0Y29udGVudDogc3RyaW5naWZ5KG8uY29udGVudCwgbGFuZ3VhZ2UpLFxyXG4gIFx0XHR0YWc6ICdzcGFuJyxcclxuICBcdFx0Y2xhc3NlczogWyd0b2tlbicsIG8udHlwZV0sXHJcbiAgXHRcdGF0dHJpYnV0ZXM6IHt9LFxyXG4gIFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2VcclxuICBcdH07XHJcblxyXG4gIFx0dmFyIGFsaWFzZXMgPSBvLmFsaWFzO1xyXG4gIFx0aWYgKGFsaWFzZXMpIHtcclxuICBcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcclxuICBcdFx0XHRBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlbnYuY2xhc3NlcywgYWxpYXNlcyk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0ZW52LmNsYXNzZXMucHVzaChhbGlhc2VzKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdF8uaG9va3MucnVuKCd3cmFwJywgZW52KTtcclxuXHJcbiAgXHR2YXIgYXR0cmlidXRlcyA9ICcnO1xyXG4gIFx0Zm9yICh2YXIgbmFtZSBpbiBlbnYuYXR0cmlidXRlcykge1xyXG4gIFx0XHRhdHRyaWJ1dGVzICs9ICcgJyArIG5hbWUgKyAnPVwiJyArIChlbnYuYXR0cmlidXRlc1tuYW1lXSB8fCAnJykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpICsgJ1wiJztcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gJzwnICsgZW52LnRhZyArICcgY2xhc3M9XCInICsgZW52LmNsYXNzZXMuam9pbignICcpICsgJ1wiJyArIGF0dHJpYnV0ZXMgKyAnPicgKyBlbnYuY29udGVudCArICc8LycgKyBlbnYudGFnICsgJz4nO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XHJcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0PHN0cmluZyB8IFRva2VuPn0gdG9rZW5MaXN0XHJcbiAgICogQHBhcmFtIHthbnl9IGdyYW1tYXJcclxuICAgKiBAcGFyYW0ge0xpbmtlZExpc3ROb2RlPHN0cmluZyB8IFRva2VuPn0gc3RhcnROb2RlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0UG9zXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb25lc2hvdD1mYWxzZV1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF1cclxuICAgKi9cclxuICBmdW5jdGlvbiBtYXRjaEdyYW1tYXIodGV4dCwgdG9rZW5MaXN0LCBncmFtbWFyLCBzdGFydE5vZGUsIHN0YXJ0UG9zLCBvbmVzaG90LCB0YXJnZXQpIHtcclxuICBcdGZvciAodmFyIHRva2VuIGluIGdyYW1tYXIpIHtcclxuICBcdFx0aWYgKCFncmFtbWFyLmhhc093blByb3BlcnR5KHRva2VuKSB8fCAhZ3JhbW1hclt0b2tlbl0pIHtcclxuICBcdFx0XHRjb250aW51ZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHBhdHRlcm5zID0gZ3JhbW1hclt0b2tlbl07XHJcbiAgXHRcdHBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShwYXR0ZXJucykgPyBwYXR0ZXJucyA6IFtwYXR0ZXJuc107XHJcblxyXG4gIFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBhdHRlcm5zLmxlbmd0aDsgKytqKSB7XHJcbiAgXHRcdFx0aWYgKHRhcmdldCAmJiB0YXJnZXQgPT0gdG9rZW4gKyAnLCcgKyBqKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm47XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHR2YXIgcGF0dGVybiA9IHBhdHRlcm5zW2pdLFxyXG4gIFx0XHRcdFx0aW5zaWRlID0gcGF0dGVybi5pbnNpZGUsXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kID0gISFwYXR0ZXJuLmxvb2tiZWhpbmQsXHJcbiAgXHRcdFx0XHRncmVlZHkgPSAhIXBhdHRlcm4uZ3JlZWR5LFxyXG4gIFx0XHRcdFx0bG9va2JlaGluZExlbmd0aCA9IDAsXHJcbiAgXHRcdFx0XHRhbGlhcyA9IHBhdHRlcm4uYWxpYXM7XHJcblxyXG4gIFx0XHRcdGlmIChncmVlZHkgJiYgIXBhdHRlcm4ucGF0dGVybi5nbG9iYWwpIHtcclxuICBcdFx0XHRcdC8vIFdpdGhvdXQgdGhlIGdsb2JhbCBmbGFnLCBsYXN0SW5kZXggd29uJ3Qgd29ya1xyXG4gIFx0XHRcdFx0dmFyIGZsYWdzID0gcGF0dGVybi5wYXR0ZXJuLnRvU3RyaW5nKCkubWF0Y2goL1tpbXN1eV0qJC8pWzBdO1xyXG4gIFx0XHRcdFx0cGF0dGVybi5wYXR0ZXJuID0gUmVnRXhwKHBhdHRlcm4ucGF0dGVybi5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHBhdHRlcm4gPSBwYXR0ZXJuLnBhdHRlcm4gfHwgcGF0dGVybjtcclxuXHJcbiAgXHRcdFx0Zm9yICggLy8gaXRlcmF0ZSB0aGUgdG9rZW4gbGlzdCBhbmQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCB0b2tlbi9zdHJpbmcgcG9zaXRpb25cclxuICBcdFx0XHRcdHZhciBjdXJyZW50Tm9kZSA9IHN0YXJ0Tm9kZS5uZXh0LCBwb3MgPSBzdGFydFBvcztcclxuICBcdFx0XHRcdGN1cnJlbnROb2RlICE9PSB0b2tlbkxpc3QudGFpbDtcclxuICBcdFx0XHRcdHBvcyArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGgsIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFxyXG4gIFx0XHRcdCkge1xyXG5cclxuICBcdFx0XHRcdHZhciBzdHIgPSBjdXJyZW50Tm9kZS52YWx1ZTtcclxuXHJcbiAgXHRcdFx0XHRpZiAodG9rZW5MaXN0Lmxlbmd0aCA+IHRleHQubGVuZ3RoKSB7XHJcbiAgXHRcdFx0XHRcdC8vIFNvbWV0aGluZyB3ZW50IHRlcnJpYmx5IHdyb25nLCBBQk9SVCwgQUJPUlQhXHJcbiAgXHRcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHRpZiAoc3RyIGluc3RhbmNlb2YgVG9rZW4pIHtcclxuICBcdFx0XHRcdFx0Y29udGludWU7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0dmFyIHJlbW92ZUNvdW50ID0gMTsgLy8gdGhpcyBpcyB0aGUgdG8gcGFyYW1ldGVyIG9mIHJlbW92ZUJldHdlZW5cclxuXHJcbiAgXHRcdFx0XHRpZiAoZ3JlZWR5ICYmIGN1cnJlbnROb2RlICE9IHRva2VuTGlzdC50YWlsLnByZXYpIHtcclxuICBcdFx0XHRcdFx0cGF0dGVybi5sYXN0SW5kZXggPSBwb3M7XHJcbiAgXHRcdFx0XHRcdHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcclxuICBcdFx0XHRcdFx0aWYgKCFtYXRjaCkge1xyXG4gIFx0XHRcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4ICsgKGxvb2tiZWhpbmQgJiYgbWF0Y2hbMV0gPyBtYXRjaFsxXS5sZW5ndGggOiAwKTtcclxuICBcdFx0XHRcdFx0dmFyIHRvID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgXHRcdFx0XHRcdHZhciBwID0gcG9zO1xyXG5cclxuICBcdFx0XHRcdFx0Ly8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBtYXRjaFxyXG4gIFx0XHRcdFx0XHRwICs9IGN1cnJlbnROb2RlLnZhbHVlLmxlbmd0aDtcclxuICBcdFx0XHRcdFx0d2hpbGUgKGZyb20gPj0gcCkge1xyXG4gIFx0XHRcdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dDtcclxuICBcdFx0XHRcdFx0XHRwICs9IGN1cnJlbnROb2RlLnZhbHVlLmxlbmd0aDtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHQvLyBhZGp1c3QgcG9zIChhbmQgcClcclxuICBcdFx0XHRcdFx0cCAtPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XHJcbiAgXHRcdFx0XHRcdHBvcyA9IHA7XHJcblxyXG4gIFx0XHRcdFx0XHQvLyB0aGUgY3VycmVudCBub2RlIGlzIGEgVG9rZW4sIHRoZW4gdGhlIG1hdGNoIHN0YXJ0cyBpbnNpZGUgYW5vdGhlciBUb2tlbiwgd2hpY2ggaXMgaW52YWxpZFxyXG4gIFx0XHRcdFx0XHRpZiAoY3VycmVudE5vZGUudmFsdWUgaW5zdGFuY2VvZiBUb2tlbikge1xyXG4gIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG4gIFx0XHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0XHQvLyBmaW5kIHRoZSBsYXN0IG5vZGUgd2hpY2ggaXMgYWZmZWN0ZWQgYnkgdGhpcyBtYXRjaFxyXG4gIFx0XHRcdFx0XHRmb3IgKFxyXG4gIFx0XHRcdFx0XHRcdHZhciBrID0gY3VycmVudE5vZGU7XHJcbiAgXHRcdFx0XHRcdFx0ayAhPT0gdG9rZW5MaXN0LnRhaWwgJiYgKHAgPCB0byB8fCAodHlwZW9mIGsudmFsdWUgPT09ICdzdHJpbmcnICYmICFrLnByZXYudmFsdWUuZ3JlZWR5KSk7XHJcbiAgXHRcdFx0XHRcdFx0ayA9IGsubmV4dFxyXG4gIFx0XHRcdFx0XHQpIHtcclxuICBcdFx0XHRcdFx0XHRyZW1vdmVDb3VudCsrO1xyXG4gIFx0XHRcdFx0XHRcdHAgKz0gay52YWx1ZS5sZW5ndGg7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0cmVtb3ZlQ291bnQtLTtcclxuXHJcbiAgXHRcdFx0XHRcdC8vIHJlcGxhY2Ugd2l0aCB0aGUgbmV3IG1hdGNoXHJcbiAgXHRcdFx0XHRcdHN0ciA9IHRleHQuc2xpY2UocG9zLCBwKTtcclxuICBcdFx0XHRcdFx0bWF0Y2guaW5kZXggLT0gcG9zO1xyXG4gIFx0XHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdFx0cGF0dGVybi5sYXN0SW5kZXggPSAwO1xyXG5cclxuICBcdFx0XHRcdFx0dmFyIG1hdGNoID0gcGF0dGVybi5leGVjKHN0cik7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0aWYgKCFtYXRjaCkge1xyXG4gIFx0XHRcdFx0XHRpZiAob25lc2hvdCkge1xyXG4gIFx0XHRcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0XHRjb250aW51ZTtcclxuICBcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHRpZiAobG9va2JlaGluZCkge1xyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kTGVuZ3RoID0gbWF0Y2hbMV0gPyBtYXRjaFsxXS5sZW5ndGggOiAwO1xyXG4gIFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdHZhciBmcm9tID0gbWF0Y2guaW5kZXggKyBsb29rYmVoaW5kTGVuZ3RoLFxyXG4gIFx0XHRcdFx0XHRtYXRjaCA9IG1hdGNoWzBdLnNsaWNlKGxvb2tiZWhpbmRMZW5ndGgpLFxyXG4gIFx0XHRcdFx0XHR0byA9IGZyb20gKyBtYXRjaC5sZW5ndGgsXHJcbiAgXHRcdFx0XHRcdGJlZm9yZSA9IHN0ci5zbGljZSgwLCBmcm9tKSxcclxuICBcdFx0XHRcdFx0YWZ0ZXIgPSBzdHIuc2xpY2UodG8pO1xyXG5cclxuICBcdFx0XHRcdHZhciByZW1vdmVGcm9tID0gY3VycmVudE5vZGUucHJldjtcclxuXHJcbiAgXHRcdFx0XHRpZiAoYmVmb3JlKSB7XHJcbiAgXHRcdFx0XHRcdHJlbW92ZUZyb20gPSBhZGRBZnRlcih0b2tlbkxpc3QsIHJlbW92ZUZyb20sIGJlZm9yZSk7XHJcbiAgXHRcdFx0XHRcdHBvcyArPSBiZWZvcmUubGVuZ3RoO1xyXG4gIFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdHJlbW92ZVJhbmdlKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgcmVtb3ZlQ291bnQpO1xyXG5cclxuICBcdFx0XHRcdHZhciB3cmFwcGVkID0gbmV3IFRva2VuKHRva2VuLCBpbnNpZGUgPyBfLnRva2VuaXplKG1hdGNoLCBpbnNpZGUpIDogbWF0Y2gsIGFsaWFzLCBtYXRjaCwgZ3JlZWR5KTtcclxuICBcdFx0XHRcdGN1cnJlbnROb2RlID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCB3cmFwcGVkKTtcclxuXHJcbiAgXHRcdFx0XHRpZiAoYWZ0ZXIpIHtcclxuICBcdFx0XHRcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCBjdXJyZW50Tm9kZSwgYWZ0ZXIpO1xyXG4gIFx0XHRcdFx0fVxyXG5cclxuXHJcbiAgXHRcdFx0XHRpZiAocmVtb3ZlQ291bnQgPiAxKVxyXG4gIFx0XHRcdFx0XHRtYXRjaEdyYW1tYXIodGV4dCwgdG9rZW5MaXN0LCBncmFtbWFyLCBjdXJyZW50Tm9kZS5wcmV2LCBwb3MsIHRydWUsIHRva2VuICsgJywnICsgaik7XHJcblxyXG4gIFx0XHRcdFx0aWYgKG9uZXNob3QpXHJcbiAgXHRcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHR5cGVkZWYgTGlua2VkTGlzdE5vZGVcclxuICAgKiBAcHJvcGVydHkge1R9IHZhbHVlXHJcbiAgICogQHByb3BlcnR5IHtMaW5rZWRMaXN0Tm9kZTxUPiB8IG51bGx9IHByZXYgVGhlIHByZXZpb3VzIG5vZGUuXHJcbiAgICogQHByb3BlcnR5IHtMaW5rZWRMaXN0Tm9kZTxUPiB8IG51bGx9IG5leHQgVGhlIG5leHQgbm9kZS5cclxuICAgKiBAdGVtcGxhdGUgVFxyXG4gICAqL1xyXG5cclxuICAvKipcclxuICAgKiBAdGVtcGxhdGUgVFxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIExpbmtlZExpc3QoKSB7XHJcbiAgXHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xyXG4gIFx0dmFyIGhlYWQgPSB7IHZhbHVlOiBudWxsLCBwcmV2OiBudWxsLCBuZXh0OiBudWxsIH07XHJcbiAgXHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xyXG4gIFx0dmFyIHRhaWwgPSB7IHZhbHVlOiBudWxsLCBwcmV2OiBoZWFkLCBuZXh0OiBudWxsIH07XHJcbiAgXHRoZWFkLm5leHQgPSB0YWlsO1xyXG5cclxuICBcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXHJcbiAgXHR0aGlzLmhlYWQgPSBoZWFkO1xyXG4gIFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cclxuICBcdHRoaXMudGFpbCA9IHRhaWw7XHJcbiAgXHR0aGlzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmV3IG5vZGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGxpc3QuXHJcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0PFQ+fSBsaXN0XHJcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0Tm9kZTxUPn0gbm9kZVxyXG4gICAqIEBwYXJhbSB7VH0gdmFsdWVcclxuICAgKiBAcmV0dXJucyB7TGlua2VkTGlzdE5vZGU8VD59IFRoZSBhZGRlZCBub2RlLlxyXG4gICAqIEB0ZW1wbGF0ZSBUXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWRkQWZ0ZXIobGlzdCwgbm9kZSwgdmFsdWUpIHtcclxuICBcdC8vIGFzc3VtZXMgdGhhdCBub2RlICE9IGxpc3QudGFpbCAmJiB2YWx1ZXMubGVuZ3RoID49IDBcclxuICBcdHZhciBuZXh0ID0gbm9kZS5uZXh0O1xyXG5cclxuICBcdHZhciBuZXdOb2RlID0geyB2YWx1ZTogdmFsdWUsIHByZXY6IG5vZGUsIG5leHQ6IG5leHQgfTtcclxuICBcdG5vZGUubmV4dCA9IG5ld05vZGU7XHJcbiAgXHRuZXh0LnByZXYgPSBuZXdOb2RlO1xyXG4gIFx0bGlzdC5sZW5ndGgrKztcclxuXHJcbiAgXHRyZXR1cm4gbmV3Tm9kZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyBgY291bnRgIG5vZGVzIGFmdGVyIHRoZSBnaXZlbiBub2RlLiBUaGUgZ2l2ZW4gbm9kZSB3aWxsIG5vdCBiZSByZW1vdmVkLlxyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdE5vZGU8VD59IG5vZGVcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnRcclxuICAgKiBAdGVtcGxhdGUgVFxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHJlbW92ZVJhbmdlKGxpc3QsIG5vZGUsIGNvdW50KSB7XHJcbiAgXHR2YXIgbmV4dCA9IG5vZGUubmV4dDtcclxuICBcdGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQgJiYgbmV4dCAhPT0gbGlzdC50YWlsOyBpKyspIHtcclxuICBcdFx0bmV4dCA9IG5leHQubmV4dDtcclxuICBcdH1cclxuICBcdG5vZGUubmV4dCA9IG5leHQ7XHJcbiAgXHRuZXh0LnByZXYgPSBub2RlO1xyXG4gIFx0bGlzdC5sZW5ndGggLT0gaTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0PFQ+fSBsaXN0XHJcbiAgICogQHJldHVybnMge1RbXX1cclxuICAgKiBAdGVtcGxhdGUgVFxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRvQXJyYXkobGlzdCkge1xyXG4gIFx0dmFyIGFycmF5ID0gW107XHJcbiAgXHR2YXIgbm9kZSA9IGxpc3QuaGVhZC5uZXh0O1xyXG4gIFx0d2hpbGUgKG5vZGUgIT09IGxpc3QudGFpbCkge1xyXG4gIFx0XHRhcnJheS5wdXNoKG5vZGUudmFsdWUpO1xyXG4gIFx0XHRub2RlID0gbm9kZS5uZXh0O1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGFycmF5O1xyXG4gIH1cclxuXHJcblxyXG4gIGlmICghX3NlbGYuZG9jdW1lbnQpIHtcclxuICBcdGlmICghX3NlbGYuYWRkRXZlbnRMaXN0ZW5lcikge1xyXG4gIFx0XHQvLyBpbiBOb2RlLmpzXHJcbiAgXHRcdHJldHVybiBfO1xyXG4gIFx0fVxyXG5cclxuICBcdGlmICghXy5kaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXIpIHtcclxuICBcdFx0Ly8gSW4gd29ya2VyXHJcbiAgXHRcdF9zZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZ0KSB7XHJcbiAgXHRcdFx0dmFyIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2dC5kYXRhKSxcclxuICBcdFx0XHRcdGxhbmcgPSBtZXNzYWdlLmxhbmd1YWdlLFxyXG4gIFx0XHRcdFx0Y29kZSA9IG1lc3NhZ2UuY29kZSxcclxuICBcdFx0XHRcdGltbWVkaWF0ZUNsb3NlID0gbWVzc2FnZS5pbW1lZGlhdGVDbG9zZTtcclxuXHJcbiAgXHRcdFx0X3NlbGYucG9zdE1lc3NhZ2UoXy5oaWdobGlnaHQoY29kZSwgXy5sYW5ndWFnZXNbbGFuZ10sIGxhbmcpKTtcclxuICBcdFx0XHRpZiAoaW1tZWRpYXRlQ2xvc2UpIHtcclxuICBcdFx0XHRcdF9zZWxmLmNsb3NlKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LCBmYWxzZSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIF87XHJcbiAgfVxyXG5cclxuICAvL0dldCBjdXJyZW50IHNjcmlwdCBhbmQgaGlnaGxpZ2h0XHJcbiAgdmFyIHNjcmlwdCA9IF8udXRpbC5jdXJyZW50U2NyaXB0KCk7XHJcblxyXG4gIGlmIChzY3JpcHQpIHtcclxuICBcdF8uZmlsZW5hbWUgPSBzY3JpcHQuc3JjO1xyXG5cclxuICBcdGlmIChzY3JpcHQuaGFzQXR0cmlidXRlKCdkYXRhLW1hbnVhbCcpKSB7XHJcbiAgXHRcdF8ubWFudWFsID0gdHJ1ZTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjaygpIHtcclxuICBcdGlmICghXy5tYW51YWwpIHtcclxuICBcdFx0Xy5oaWdobGlnaHRBbGwoKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIGlmICghXy5tYW51YWwpIHtcclxuICBcdC8vIElmIHRoZSBkb2N1bWVudCBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhlbiB3ZSdsbCB1c2UgRE9NQ29udGVudExvYWRlZC5cclxuICBcdC8vIElmIHRoZSBkb2N1bWVudCBzdGF0ZSBpcyBcImludGVyYWN0aXZlXCIgYW5kIHRoZSBwcmlzbS5qcyBzY3JpcHQgaXMgZGVmZXJyZWQsIHRoZW4gd2UnbGwgYWxzbyB1c2UgdGhlXHJcbiAgXHQvLyBET01Db250ZW50TG9hZGVkIGV2ZW50IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgc29tZSBwbHVnaW5zIG9yIGxhbmd1YWdlcyB3aGljaCBoYXZlIGFsc28gYmVlbiBkZWZlcnJlZCBhbmQgdGhleVxyXG4gIFx0Ly8gbWlnaHQgdGFrZSBsb25nZXIgb25lIGFuaW1hdGlvbiBmcmFtZSB0byBleGVjdXRlIHdoaWNoIGNhbiBjcmVhdGUgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbmx5IHNvbWUgcGx1Z2lucyBoYXZlXHJcbiAgXHQvLyBiZWVuIGxvYWRlZCB3aGVuIFByaXNtLmhpZ2hsaWdodEFsbCgpIGlzIGV4ZWN1dGVkLCBkZXBlbmRpbmcgb24gaG93IGZhc3QgcmVzb3VyY2VzIGFyZSBsb2FkZWQuXHJcbiAgXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1ByaXNtSlMvcHJpc20vaXNzdWVzLzIxMDJcclxuICBcdHZhciByZWFkeVN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcclxuICBcdGlmIChyZWFkeVN0YXRlID09PSAnbG9hZGluZycgfHwgcmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJyAmJiBzY3JpcHQgJiYgc2NyaXB0LmRlZmVyKSB7XHJcbiAgXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2spO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0aWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcclxuICBcdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjayk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0d2luZG93LnNldFRpbWVvdXQoaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrLCAxNik7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9XHJcblxyXG4gIHJldHVybiBfO1xyXG5cclxuICB9KShfc2VsZik7XHJcblxyXG4gIGlmICggbW9kdWxlLmV4cG9ydHMpIHtcclxuICBcdG1vZHVsZS5leHBvcnRzID0gUHJpc207XHJcbiAgfVxyXG5cclxuICAvLyBoYWNrIGZvciBjb21wb25lbnRzIHRvIHdvcmsgY29ycmVjdGx5IGluIG5vZGUuanNcclxuICBpZiAodHlwZW9mIGNvbW1vbmpzR2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gIFx0Y29tbW9uanNHbG9iYWwuUHJpc20gPSBQcmlzbTtcclxuICB9XHJcblxyXG5cclxuICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICBCZWdpbiBwcmlzbS1tYXJrdXAuanNcclxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5tYXJrdXAgPSB7XHJcbiAgXHQnY29tbWVudCc6IC88IS0tW1xcc1xcU10qPy0tPi8sXHJcbiAgXHQncHJvbG9nJzogLzxcXD9bXFxzXFxTXSs/XFw/Pi8sXHJcbiAgXHQnZG9jdHlwZSc6IHtcclxuICBcdFx0cGF0dGVybjogLzwhRE9DVFlQRSg/OltePlwiJ1tcXF1dfFwiW15cIl0qXCJ8J1teJ10qJykrKD86XFxbKD86KD8hPCEtLSlbXlwiJ1xcXV18XCJbXlwiXSpcInwnW14nXSonfDwhLS1bXFxzXFxTXSo/LS0+KSpcXF1cXHMqKT8+L2ksXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0fSxcclxuICBcdCdjZGF0YSc6IC88IVxcW0NEQVRBXFxbW1xcc1xcU10qP11dPi9pLFxyXG4gIFx0J3RhZyc6IHtcclxuICBcdFx0cGF0dGVybjogLzxcXC8/KD8hXFxkKVteXFxzPlxcLz0kPCVdKyg/Olxccyg/OlxccypbXlxccz5cXC89XSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKD89W1xccz5dKSl8KD89W1xccy8+XSkpKSspP1xccypcXC8/Pi9pLFxyXG4gIFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdGluc2lkZToge1xyXG4gIFx0XHRcdCd0YWcnOiB7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXjxcXC8/W15cXHM+XFwvXSsvaSxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjxcXC8/LyxcclxuICBcdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9eW15cXHM+XFwvOl0rOi9cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdCdhdHRyLXZhbHVlJzoge1xyXG4gIFx0XHRcdFx0cGF0dGVybjogLz1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiPj1dKykvaSxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXHJcbiAgXHRcdFx0XHRcdFx0L149LyxcclxuICBcdFx0XHRcdFx0XHR7XHJcbiAgXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVtcIiddfFtcIiddJC8sXHJcbiAgXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHRdXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwvPz4vLFxyXG4gIFx0XHRcdCdhdHRyLW5hbWUnOiB7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvW15cXHM+XFwvXSsvLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdCduYW1lc3BhY2UnOiAvXlteXFxzPlxcLzpdKzovXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuICBcdCdlbnRpdHknOiAvJiM/W1xcZGEtel17MSw4fTsvaVxyXG4gIH07XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsnZW50aXR5J10gPVxyXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsnZW50aXR5J107XHJcblxyXG4gIC8vIFBsdWdpbiB0byBtYWtlIGVudGl0eSB0aXRsZSBzaG93IHRoZSByZWFsIGVudGl0eSwgaWRlYSBieSBSb21hbiBLb21hcm92XHJcbiAgUHJpc20uaG9va3MuYWRkKCd3cmFwJywgZnVuY3Rpb24oZW52KSB7XHJcblxyXG4gIFx0aWYgKGVudi50eXBlID09PSAnZW50aXR5Jykge1xyXG4gIFx0XHRlbnYuYXR0cmlidXRlc1sndGl0bGUnXSA9IGVudi5jb250ZW50LnJlcGxhY2UoLyZhbXA7LywgJyYnKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLCAnYWRkSW5saW5lZCcsIHtcclxuICBcdC8qKlxyXG4gIFx0ICogQWRkcyBhbiBpbmxpbmVkIGxhbmd1YWdlIHRvIG1hcmt1cC5cclxuICBcdCAqXHJcbiAgXHQgKiBBbiBleGFtcGxlIG9mIGFuIGlubGluZWQgbGFuZ3VhZ2UgaXMgQ1NTIHdpdGggYDxzdHlsZT5gIHRhZ3MuXHJcbiAgXHQgKlxyXG4gIFx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZyB0aGF0IGNvbnRhaW5zIHRoZSBpbmxpbmVkIGxhbmd1YWdlLiBUaGlzIG5hbWUgd2lsbCBiZSB0cmVhdGVkIGFzXHJcbiAgXHQgKiBjYXNlIGluc2Vuc2l0aXZlLlxyXG4gIFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1YWdlIGtleS5cclxuICBcdCAqIEBleGFtcGxlXHJcbiAgXHQgKiBhZGRJbmxpbmVkKCdzdHlsZScsICdjc3MnKTtcclxuICBcdCAqL1xyXG4gIFx0dmFsdWU6IGZ1bmN0aW9uIGFkZElubGluZWQodGFnTmFtZSwgbGFuZykge1xyXG4gIFx0XHR2YXIgaW5jbHVkZWRDZGF0YUluc2lkZSA9IHt9O1xyXG4gIFx0XHRpbmNsdWRlZENkYXRhSW5zaWRlWydsYW5ndWFnZS0nICsgbGFuZ10gPSB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhePCFcXFtDREFUQVxcWylbXFxzXFxTXSs/KD89XFxdXFxdPiQpL2ksXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxyXG4gIFx0XHR9O1xyXG4gIFx0XHRpbmNsdWRlZENkYXRhSW5zaWRlWydjZGF0YSddID0gL148IVxcW0NEQVRBXFxbfFxcXVxcXT4kL2k7XHJcblxyXG4gIFx0XHR2YXIgaW5zaWRlID0ge1xyXG4gIFx0XHRcdCdpbmNsdWRlZC1jZGF0YSc6IHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC88IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4vaSxcclxuICBcdFx0XHRcdGluc2lkZTogaW5jbHVkZWRDZGF0YUluc2lkZVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fTtcclxuICBcdFx0aW5zaWRlWydsYW5ndWFnZS0nICsgbGFuZ10gPSB7XHJcbiAgXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXHJcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdHZhciBkZWYgPSB7fTtcclxuICBcdFx0ZGVmW3RhZ05hbWVdID0ge1xyXG4gIFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKDxfX1tcXHNcXFNdKj8+KSg/OjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPlxccyp8W1xcc1xcU10pKj8oPz08XFwvX18+KS8uc291cmNlLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhZ05hbWU7IH0pLCAnaScpLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdGluc2lkZTogaW5zaWRlXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtYXJrdXAnLCAnY2RhdGEnLCBkZWYpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMueG1sID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xyXG4gIFByaXNtLmxhbmd1YWdlcy5odG1sID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcclxuICBQcmlzbS5sYW5ndWFnZXMubWF0aG1sID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcclxuICBQcmlzbS5sYW5ndWFnZXMuc3ZnID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcclxuXHJcblxyXG4gIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgIEJlZ2luIHByaXNtLWNzcy5qc1xyXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgKGZ1bmN0aW9uIChQcmlzbSkge1xyXG5cclxuICBcdHZhciBzdHJpbmcgPSAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XHJcblxyXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLmNzcyA9IHtcclxuICBcdFx0J2NvbW1lbnQnOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXHJcbiAgXHRcdCdhdHJ1bGUnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogL0BbXFx3LV0rW1xcc1xcU10qPyg/Ojt8KD89XFxzKlxceykpLyxcclxuICBcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdCdydWxlJzogL15AW1xcdy1dKy8sXHJcbiAgXHRcdFx0XHQnc2VsZWN0b3ItZnVuY3Rpb24tYXJndW1lbnQnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxic2VsZWN0b3JcXHMqXFwoKD8hXFxzKlxcKSlcXHMqKSg/OlteKCldfFxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKSs/KD89XFxzKlxcKSkvLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdCd1cmwnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogUmVnRXhwKCd1cmxcXFxcKCg/OicgKyBzdHJpbmcuc291cmNlICsgJ3xbXlxcblxccigpXSopXFxcXCknLCAnaScpLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdCdmdW5jdGlvbic6IC9edXJsL2ksXHJcbiAgXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcKHxcXCkkL1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSxcclxuICBcdFx0J3NlbGVjdG9yJzogUmVnRXhwKCdbXnt9XFxcXHNdKD86W157fTtcIlxcJ118JyArIHN0cmluZy5zb3VyY2UgKyAnKSo/KD89XFxcXHMqXFxcXHspJyksXHJcbiAgXHRcdCdzdHJpbmcnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogc3RyaW5nLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQncHJvcGVydHknOiAvWy1fYS16XFx4QTAtXFx1RkZGRl1bLVxcd1xceEEwLVxcdUZGRkZdKig/PVxccyo6KS9pLFxyXG4gIFx0XHQnaW1wb3J0YW50JzogLyFpbXBvcnRhbnRcXGIvaSxcclxuICBcdFx0J2Z1bmN0aW9uJzogL1stYS16MC05XSsoPz1cXCgpL2ksXHJcbiAgXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fTs6LF0vXHJcbiAgXHR9O1xyXG5cclxuICBcdFByaXNtLmxhbmd1YWdlcy5jc3NbJ2F0cnVsZSddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLmNzcztcclxuXHJcbiAgXHR2YXIgbWFya3VwID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcclxuICBcdGlmIChtYXJrdXApIHtcclxuICBcdFx0bWFya3VwLnRhZy5hZGRJbmxpbmVkKCdzdHlsZScsICdjc3MnKTtcclxuXHJcbiAgXHRcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdhdHRyLXZhbHVlJywge1xyXG4gIFx0XHRcdCdzdHlsZS1hdHRyJzoge1xyXG4gIFx0XHRcdFx0cGF0dGVybjogL1xccypzdHlsZT0oXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS9pLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdCdhdHRyLW5hbWUnOiB7XHJcbiAgXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXHMqc3R5bGUvaSxcclxuICBcdFx0XHRcdFx0XHRpbnNpZGU6IG1hcmt1cC50YWcuaW5zaWRlXHJcbiAgXHRcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxzKj1cXHMqWydcIl18WydcIl1cXHMqJC8sXHJcbiAgXHRcdFx0XHRcdCdhdHRyLXZhbHVlJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC8uKy9pLFxyXG4gIFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNzc1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1jc3MnXHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LCBtYXJrdXAudGFnKTtcclxuICBcdH1cclxuXHJcbiAgfShQcmlzbSkpO1xyXG5cclxuXHJcbiAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgQmVnaW4gcHJpc20tY2xpa2UuanNcclxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5jbGlrZSA9IHtcclxuICBcdCdjb21tZW50JzogW1xyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0XHR9XHJcbiAgXHRdLFxyXG4gIFx0J3N0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcclxuICBcdFx0Z3JlZWR5OiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0J2NsYXNzLW5hbWUnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8aW50ZXJmYWNlfGV4dGVuZHN8aW1wbGVtZW50c3x0cmFpdHxpbnN0YW5jZW9mfG5ldylcXHMrfFxcYmNhdGNoXFxzK1xcKClbXFx3LlxcXFxdKy9pLFxyXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHQncHVuY3R1YXRpb24nOiAvWy5cXFxcXS9cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuICBcdCdrZXl3b3JkJzogL1xcYig/OmlmfGVsc2V8d2hpbGV8ZG98Zm9yfHJldHVybnxpbnxpbnN0YW5jZW9mfGZ1bmN0aW9ufG5ld3x0cnl8dGhyb3d8Y2F0Y2h8ZmluYWxseXxudWxsfGJyZWFrfGNvbnRpbnVlKVxcYi8sXHJcbiAgXHQnYm9vbGVhbic6IC9cXGIoPzp0cnVlfGZhbHNlKVxcYi8sXHJcbiAgXHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxcKCkvLFxyXG4gIFx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrXFwuP1xcZCp8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcclxuICBcdCdvcGVyYXRvcic6IC9bPD5dPT98WyE9XT0/PT98LS0/fFxcK1xcKz98JiY/fFxcfFxcfD98Wz8qL35eJV0vLFxyXG4gIFx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xyXG4gIH07XHJcblxyXG5cclxuICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICBCZWdpbiBwcmlzbS1qYXZhc2NyaXB0LmpzXHJcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xyXG4gIFx0J2NsYXNzLW5hbWUnOiBbXHJcbiAgXHRcdFByaXNtLmxhbmd1YWdlcy5jbGlrZVsnY2xhc3MtbmFtZSddLFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteJFxcd1xceEEwLVxcdUZGRkZdKVtfJEEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSooPz1cXC4oPzpwcm90b3R5cGV8Y29uc3RydWN0b3IpKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9XHJcbiAgXHRdLFxyXG4gIFx0J2tleXdvcmQnOiBbXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58fSlcXHMqKSg/OmNhdGNofGZpbmFsbHkpXFxiLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdH0sXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKF58W14uXXxcXC5cXC5cXC5cXHMqKVxcYig/OmFzfGFzeW5jKD89XFxzKig/OmZ1bmN0aW9uXFxifFxcKHxbJFxcd1xceEEwLVxcdUZGRkZdfCQpKXxhd2FpdHxicmVha3xjYXNlfGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlYnVnZ2VyfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZW51bXxleHBvcnR8ZXh0ZW5kc3xmb3J8ZnJvbXxmdW5jdGlvbnxnZXR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnRlcmZhY2V8bGV0fG5ld3xudWxsfG9mfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdH0sXHJcbiAgXHRdLFxyXG4gIFx0J251bWJlcic6IC9cXGIoPzooPzowW3hYXSg/OltcXGRBLUZhLWZdKD86X1tcXGRBLUZhLWZdKT8pK3wwW2JCXSg/OlswMV0oPzpfWzAxXSk/KSt8MFtvT10oPzpbMC03XSg/Ol9bMC03XSk/KSspbj98KD86XFxkKD86X1xcZCk/KStufE5hTnxJbmZpbml0eSlcXGJ8KD86XFxiKD86XFxkKD86X1xcZCk/KStcXC4/KD86XFxkKD86X1xcZCk/KSp8XFxCXFwuKD86XFxkKD86X1xcZCk/KSspKD86W0VlXVsrLV0/KD86XFxkKD86X1xcZCk/KSspPy8sXHJcbiAgXHQvLyBBbGxvdyBmb3IgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjAwODQ0NClcclxuICBcdCdmdW5jdGlvbic6IC8jP1tfJGEtekEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSooPz1cXHMqKD86XFwuXFxzKig/OmFwcGx5fGJpbmR8Y2FsbClcXHMqKT9cXCgpLyxcclxuICBcdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8XFwqXFwqPT98PT58JiZ8XFx8XFx8fFshPV09PXw8PD0/fD4+Pj89P3xbLSsqLyUmfF4hPTw+XT0/fFxcLnszfXxcXD9bLj9dP3xbfjpdL1xyXG4gIH0pO1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFsnY2xhc3MtbmFtZSddWzBdLnBhdHRlcm4gPSAvKFxcYig/OmNsYXNzfGludGVyZmFjZXxleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxuZXcpXFxzKylbXFx3LlxcXFxdKy87XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAna2V5d29yZCcsIHtcclxuICBcdCdyZWdleCc6IHtcclxuICBcdFx0cGF0dGVybjogLygoPzpefFteJFxcd1xceEEwLVxcdUZGRkYuXCInXFxdKVxcc10pXFxzKilcXC8oPzpcXFsoPzpbXlxcXVxcXFxcXHJcXG5dfFxcXFwuKSpdfFxcXFwufFteL1xcXFxcXFtcXHJcXG5dKStcXC9bZ2lteXVzXXswLDZ9KD89KD86XFxzfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKig/OiR8W1xcclxcbiwuOzp9KVxcXV18XFwvXFwvKSkvLFxyXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRncmVlZHk6IHRydWVcclxuICBcdH0sXHJcbiAgXHQvLyBUaGlzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGtleXdvcmQgYmVjYXVzZSB3ZSB1c2UgXCJmdW5jdGlvblwiIGluc2lkZSB0aGUgbG9vay1mb3J3YXJkXHJcbiAgXHQnZnVuY3Rpb24tdmFyaWFibGUnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8jP1tfJGEtekEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSooPz1cXHMqWz06XVxccyooPzphc3luY1xccyopPyg/OlxcYmZ1bmN0aW9uXFxifCg/OlxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpfFtfJGEtekEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSopXFxzKj0+KSkvLFxyXG4gIFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xyXG4gIFx0fSxcclxuICBcdCdwYXJhbWV0ZXInOiBbXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKGZ1bmN0aW9uKD86XFxzK1tfJEEtWmEtelxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSopP1xccypcXChcXHMqKSg/IVxccykoPzpbXigpXXxcXChbXigpXSpcXCkpKz8oPz1cXHMqXFwpKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XHJcbiAgXHRcdH0sXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvW18kYS16XFx4QTAtXFx1RkZGRl1bJFxcd1xceEEwLVxcdUZGRkZdKig/PVxccyo9PikvaSxcclxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XHJcbiAgXHRcdH0sXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKFxcKFxccyopKD8hXFxzKSg/OlteKCldfFxcKFteKCldKlxcKSkrPyg/PVxccypcXClcXHMqPT4pLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcclxuICBcdFx0fSxcclxuICBcdFx0e1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oKD86XFxifFxcc3xeKSg/ISg/OmFzfGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVidWdnZXJ8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHVuZGVmaW5lZHx2YXJ8dm9pZHx3aGlsZXx3aXRofHlpZWxkKSg/IVskXFx3XFx4QTAtXFx1RkZGRl0pKSg/OltfJEEtWmEtelxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSpcXHMqKVxcKFxccyopKD8hXFxzKSg/OlteKCldfFxcKFteKCldKlxcKSkrPyg/PVxccypcXClcXHMqXFx7KS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XHJcbiAgXHRcdH1cclxuICBcdF0sXHJcbiAgXHQnY29uc3RhbnQnOiAvXFxiW0EtWl0oPzpbQS1aX118XFxkeD8pKlxcYi9cclxuICB9KTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdzdHJpbmcnLCB7XHJcbiAgXHQndGVtcGxhdGUtc3RyaW5nJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvYCg/OlxcXFxbXFxzXFxTXXxcXCR7KD86W157fV18eyg/Oltee31dfHtbXn1dKn0pKn0pK318KD8hXFwkeylbXlxcXFxgXSkqYC8sXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0J3RlbXBsYXRlLXB1bmN0dWF0aW9uJzoge1xyXG4gIFx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcclxuICBcdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkeyg/Oltee31dfHsoPzpbXnt9XXx7W159XSp9KSp9KSt9LyxcclxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XHJcbiAgXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCR7fH0kLyxcclxuICBcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xyXG4gIFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgaWYgKFByaXNtLmxhbmd1YWdlcy5tYXJrdXApIHtcclxuICBcdFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLmFkZElubGluZWQoJ3NjcmlwdCcsICdqYXZhc2NyaXB0Jyk7XHJcbiAgfVxyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMuanMgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdDtcclxuXHJcblxyXG4gIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgIEJlZ2luIHByaXNtLWZpbGUtaGlnaGxpZ2h0LmpzXHJcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICAoZnVuY3Rpb24gKCkge1xyXG4gIFx0aWYgKHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyB8fCAhc2VsZi5QcmlzbSB8fCAhc2VsZi5kb2N1bWVudCB8fCAhZG9jdW1lbnQucXVlcnlTZWxlY3Rvcikge1xyXG4gIFx0XHRyZXR1cm47XHJcbiAgXHR9XHJcblxyXG4gIFx0LyoqXHJcbiAgXHQgKiBAcGFyYW0ge0VsZW1lbnR9IFtjb250YWluZXI9ZG9jdW1lbnRdXHJcbiAgXHQgKi9cclxuICBcdHNlbGYuUHJpc20uZmlsZUhpZ2hsaWdodCA9IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xyXG4gIFx0XHRjb250YWluZXIgPSBjb250YWluZXIgfHwgZG9jdW1lbnQ7XHJcblxyXG4gIFx0XHR2YXIgRXh0ZW5zaW9ucyA9IHtcclxuICBcdFx0XHQnanMnOiAnamF2YXNjcmlwdCcsXHJcbiAgXHRcdFx0J3B5JzogJ3B5dGhvbicsXHJcbiAgXHRcdFx0J3JiJzogJ3J1YnknLFxyXG4gIFx0XHRcdCdwczEnOiAncG93ZXJzaGVsbCcsXHJcbiAgXHRcdFx0J3BzbTEnOiAncG93ZXJzaGVsbCcsXHJcbiAgXHRcdFx0J3NoJzogJ2Jhc2gnLFxyXG4gIFx0XHRcdCdiYXQnOiAnYmF0Y2gnLFxyXG4gIFx0XHRcdCdoJzogJ2MnLFxyXG4gIFx0XHRcdCd0ZXgnOiAnbGF0ZXgnXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgncHJlW2RhdGEtc3JjXScpKS5mb3JFYWNoKGZ1bmN0aW9uIChwcmUpIHtcclxuICBcdFx0XHQvLyBpZ25vcmUgaWYgYWxyZWFkeSBsb2FkZWRcclxuICBcdFx0XHRpZiAocHJlLmhhc0F0dHJpYnV0ZSgnZGF0YS1zcmMtbG9hZGVkJykpIHtcclxuICBcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdC8vIGxvYWQgY3VycmVudFxyXG4gIFx0XHRcdHZhciBzcmMgPSBwcmUuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpO1xyXG5cclxuICBcdFx0XHR2YXIgbGFuZ3VhZ2UsIHBhcmVudCA9IHByZTtcclxuICBcdFx0XHR2YXIgbGFuZyA9IC9cXGJsYW5nKD86dWFnZSk/LShbXFx3LV0rKVxcYi9pO1xyXG4gIFx0XHRcdHdoaWxlIChwYXJlbnQgJiYgIWxhbmcudGVzdChwYXJlbnQuY2xhc3NOYW1lKSkge1xyXG4gIFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRpZiAocGFyZW50KSB7XHJcbiAgXHRcdFx0XHRsYW5ndWFnZSA9IChwcmUuY2xhc3NOYW1lLm1hdGNoKGxhbmcpIHx8IFssICcnXSlbMV07XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRpZiAoIWxhbmd1YWdlKSB7XHJcbiAgXHRcdFx0XHR2YXIgZXh0ZW5zaW9uID0gKHNyYy5tYXRjaCgvXFwuKFxcdyspJC8pIHx8IFssICcnXSlbMV07XHJcbiAgXHRcdFx0XHRsYW5ndWFnZSA9IEV4dGVuc2lvbnNbZXh0ZW5zaW9uXSB8fCBleHRlbnNpb247XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHR2YXIgY29kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvZGUnKTtcclxuICBcdFx0XHRjb2RlLmNsYXNzTmFtZSA9ICdsYW5ndWFnZS0nICsgbGFuZ3VhZ2U7XHJcblxyXG4gIFx0XHRcdHByZS50ZXh0Q29udGVudCA9ICcnO1xyXG5cclxuICBcdFx0XHRjb2RlLnRleHRDb250ZW50ID0gJ0xvYWRpbmfigKYnO1xyXG5cclxuICBcdFx0XHRwcmUuYXBwZW5kQ2hpbGQoY29kZSk7XHJcblxyXG4gIFx0XHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuXHJcbiAgXHRcdFx0eGhyLm9wZW4oJ0dFVCcsIHNyYywgdHJ1ZSk7XHJcblxyXG4gIFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkge1xyXG5cclxuICBcdFx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPCA0MDAgJiYgeGhyLnJlc3BvbnNlVGV4dCkge1xyXG4gIFx0XHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSB4aHIucmVzcG9uc2VUZXh0O1xyXG5cclxuICBcdFx0XHRcdFx0XHRQcmlzbS5oaWdobGlnaHRFbGVtZW50KGNvZGUpO1xyXG4gIFx0XHRcdFx0XHRcdC8vIG1hcmsgYXMgbG9hZGVkXHJcbiAgXHRcdFx0XHRcdFx0cHJlLnNldEF0dHJpYnV0ZSgnZGF0YS1zcmMtbG9hZGVkJywgJycpO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdGVsc2UgaWYgKHhoci5zdGF0dXMgPj0gNDAwKSB7XHJcbiAgXHRcdFx0XHRcdFx0Y29kZS50ZXh0Q29udGVudCA9ICfinJYgRXJyb3IgJyArIHhoci5zdGF0dXMgKyAnIHdoaWxlIGZldGNoaW5nIGZpbGU6ICcgKyB4aHIuc3RhdHVzVGV4dDtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHRlbHNlIHtcclxuICBcdFx0XHRcdFx0XHRjb2RlLnRleHRDb250ZW50ID0gJ+KcliBFcnJvcjogRmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBlbXB0eSc7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9O1xyXG5cclxuICBcdFx0XHR4aHIuc2VuZChudWxsKTtcclxuICBcdFx0fSk7XHJcbiAgXHR9O1xyXG5cclxuICBcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIGV4ZWN1dGUgaW5zaWRlIGhhbmRsZXIsIGZvciBkcm9wcGluZyBFdmVudCBhcyBhcmd1bWVudFxyXG4gIFx0XHRzZWxmLlByaXNtLmZpbGVIaWdobGlnaHQoKTtcclxuICBcdH0pO1xyXG5cclxuICB9KSgpO1xyXG4gIH0pO1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMucHl0aG9uID0ge1xyXG4gIFx0J2NvbW1lbnQnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXHJcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdH0sXHJcbiAgXHQnc3RyaW5nLWludGVycG9sYXRpb24nOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oPzpmfHJmfGZyKSg/OihcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMikvaSxcclxuICBcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcclxuICBcdFx0XHRcdC8vIFwie1wiIDxleHByZXNzaW9uPiA8b3B0aW9uYWwgXCIhc1wiLCBcIiFyXCIsIG9yIFwiIWFcIj4gPG9wdGlvbmFsIFwiOlwiIGZvcm1hdCBzcGVjaWZpZXI+IFwifVwiXHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W157XSkoPzp7eykqKXsoPyF7KSg/Oltee31dfHsoPyF7KSg/Oltee31dfHsoPyF7KSg/Oltee31dKSt9KSt9KSt9LyxcclxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0J2Zvcm1hdC1zcGVjJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oOilbXjooKXt9XSsoPz19JCkvLFxyXG4gIFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdFx0J2NvbnZlcnNpb24tb3B0aW9uJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC8hW3NyYV0oPz1bOn1dJCkvLFxyXG4gIFx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXHJcbiAgXHRcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHRcdHJlc3Q6IG51bGxcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG4gIFx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKD86W3J1Yl18cmJ8YnIpPyhcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDEvaSxcclxuICBcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRhbGlhczogJ3N0cmluZydcclxuICBcdH0sXHJcbiAgXHQnc3RyaW5nJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKD86W3J1Yl18cmJ8YnIpPyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvaSxcclxuICBcdFx0Z3JlZWR5OiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0J2Z1bmN0aW9uJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKWRlZlsgXFx0XSspW2EtekEtWl9dXFx3Kig/PVxccypcXCgpL2csXHJcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdH0sXHJcbiAgXHQnY2xhc3MtbmFtZSc6IHtcclxuICBcdFx0cGF0dGVybjogLyhcXGJjbGFzc1xccyspXFx3Ky9pLFxyXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0J2RlY29yYXRvcic6IHtcclxuICBcdFx0cGF0dGVybjogLyheXFxzKilAXFx3Kyg/OlxcLlxcdyspKi9pbSxcclxuICBcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0YWxpYXM6IFsnYW5ub3RhdGlvbicsICdwdW5jdHVhdGlvbiddLFxyXG4gIFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG4gIFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGFzc2VydHxhc3luY3xhd2FpdHxicmVha3xjbGFzc3xjb250aW51ZXxkZWZ8ZGVsfGVsaWZ8ZWxzZXxleGNlcHR8ZXhlY3xmaW5hbGx5fGZvcnxmcm9tfGdsb2JhbHxpZnxpbXBvcnR8aW58aXN8bGFtYmRhfG5vbmxvY2FsfG5vdHxvcnxwYXNzfHByaW50fHJhaXNlfHJldHVybnx0cnl8d2hpbGV8d2l0aHx5aWVsZClcXGIvLFxyXG4gIFx0J2J1aWx0aW4nOiAvXFxiKD86X19pbXBvcnRfX3xhYnN8YWxsfGFueXxhcHBseXxhc2NpaXxiYXNlc3RyaW5nfGJpbnxib29sfGJ1ZmZlcnxieXRlYXJyYXl8Ynl0ZXN8Y2FsbGFibGV8Y2hyfGNsYXNzbWV0aG9kfGNtcHxjb2VyY2V8Y29tcGlsZXxjb21wbGV4fGRlbGF0dHJ8ZGljdHxkaXJ8ZGl2bW9kfGVudW1lcmF0ZXxldmFsfGV4ZWNmaWxlfGZpbGV8ZmlsdGVyfGZsb2F0fGZvcm1hdHxmcm96ZW5zZXR8Z2V0YXR0cnxnbG9iYWxzfGhhc2F0dHJ8aGFzaHxoZWxwfGhleHxpZHxpbnB1dHxpbnR8aW50ZXJufGlzaW5zdGFuY2V8aXNzdWJjbGFzc3xpdGVyfGxlbnxsaXN0fGxvY2Fsc3xsb25nfG1hcHxtYXh8bWVtb3J5dmlld3xtaW58bmV4dHxvYmplY3R8b2N0fG9wZW58b3JkfHBvd3xwcm9wZXJ0eXxyYW5nZXxyYXdfaW5wdXR8cmVkdWNlfHJlbG9hZHxyZXByfHJldmVyc2VkfHJvdW5kfHNldHxzZXRhdHRyfHNsaWNlfHNvcnRlZHxzdGF0aWNtZXRob2R8c3RyfHN1bXxzdXBlcnx0dXBsZXx0eXBlfHVuaWNocnx1bmljb2RlfHZhcnN8eHJhbmdlfHppcClcXGIvLFxyXG4gIFx0J2Jvb2xlYW4nOiAvXFxiKD86VHJ1ZXxGYWxzZXxOb25lKVxcYi8sXHJcbiAgXHQnbnVtYmVyJzogLyg/OlxcYig/PVxcZCl8XFxCKD89XFwuKSkoPzowW2JvXSk/KD86KD86XFxkfDB4W1xcZGEtZl0pW1xcZGEtZl0qXFwuP1xcZCp8XFwuXFxkKykoPzplWystXT9cXGQrKT9qP1xcYi9pLFxyXG4gIFx0J29wZXJhdG9yJzogL1stKyU9XT0/fCE9fFxcKlxcKj89P3xcXC9cXC8/PT98PFs8PT5dP3w+Wz0+XT98WyZ8Xn5dLyxcclxuICBcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS9cclxuICB9O1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMucHl0aG9uWydzdHJpbmctaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmNsaWtlID0ge1xyXG4gIFx0J2NvbW1lbnQnOiBbXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdH0sXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0Z3JlZWR5OiB0cnVlXHJcbiAgXHRcdH1cclxuICBcdF0sXHJcbiAgXHQnc3RyaW5nJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxyXG4gIFx0XHRncmVlZHk6IHRydWVcclxuICBcdH0sXHJcbiAgXHQnY2xhc3MtbmFtZSc6IHtcclxuICBcdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xpbnRlcmZhY2V8ZXh0ZW5kc3xpbXBsZW1lbnRzfHRyYWl0fGluc3RhbmNlb2Z8bmV3KVxccyt8XFxiY2F0Y2hcXHMrXFwoKVtcXHcuXFxcXF0rL2ksXHJcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdGluc2lkZToge1xyXG4gIFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLlxcXFxdL1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG4gIFx0J2tleXdvcmQnOiAvXFxiKD86aWZ8ZWxzZXx3aGlsZXxkb3xmb3J8cmV0dXJufGlufGluc3RhbmNlb2Z8ZnVuY3Rpb258bmV3fHRyeXx0aHJvd3xjYXRjaHxmaW5hbGx5fG51bGx8YnJlYWt8Y29udGludWUpXFxiLyxcclxuICBcdCdib29sZWFuJzogL1xcYig/OnRydWV8ZmFsc2UpXFxiLyxcclxuICBcdCdmdW5jdGlvbic6IC9cXHcrKD89XFwoKS8sXHJcbiAgXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifCg/OlxcYlxcZCtcXC4/XFxkKnxcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLFxyXG4gIFx0J29wZXJhdG9yJzogL1s8Pl09P3xbIT1dPT89P3wtLT98XFwrXFwrP3wmJj98XFx8XFx8P3xbPyovfl4lXS8sXHJcbiAgXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXHJcbiAgfTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmx1YSA9IHtcclxuICBcdCdjb21tZW50JzogL14jIS4rfC0tKD86XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDFcXF18LiopL20sXHJcbiAgXHQvLyBcXHogbWF5IGJlIHVzZWQgdG8gc2tpcCB0aGUgZm9sbG93aW5nIHNwYWNlXHJcbiAgXHQnc3RyaW5nJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/Oig/IVxcMSlbXlxcXFxcXHJcXG5dfFxcXFx6KD86XFxyXFxufFxccyl8XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKlxcMXxcXFsoPSopXFxbW1xcc1xcU10qP1xcXVxcMlxcXS8sXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0fSxcclxuICBcdCdudW1iZXInOiAvXFxiMHhbYS1mXFxkXStcXC4/W2EtZlxcZF0qKD86cFsrLV0/XFxkKyk/XFxifFxcYlxcZCsoPzpcXC5cXEJ8XFwuP1xcZCooPzplWystXT9cXGQrKT9cXGIpfFxcQlxcLlxcZCsoPzplWystXT9cXGQrKT9cXGIvaSxcclxuICBcdCdrZXl3b3JkJzogL1xcYig/OmFuZHxicmVha3xkb3xlbHNlfGVsc2VpZnxlbmR8ZmFsc2V8Zm9yfGZ1bmN0aW9ufGdvdG98aWZ8aW58bG9jYWx8bmlsfG5vdHxvcnxyZXBlYXR8cmV0dXJufHRoZW58dHJ1ZXx1bnRpbHx3aGlsZSlcXGIvLFxyXG4gIFx0J2Z1bmN0aW9uJzogLyg/IVxcZClcXHcrKD89XFxzKig/Olsoe10pKS8sXHJcbiAgXHQnb3BlcmF0b3InOiBbXHJcbiAgXHRcdC9bLSsqJV4mfCNdfFxcL1xcLz98PFs8PV0/fD5bPj1dP3xbPX5dPT8vLFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0Ly8gTWF0Y2ggXCIuLlwiIGJ1dCBkb24ndCBicmVhayBcIi4uLlwiXHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteLl0pXFwuXFwuKD8hXFwuKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9XHJcbiAgXHRdLFxyXG4gIFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9LDtdfFxcLit8OisvXHJcbiAgfTtcclxuXHJcbiAgKGZ1bmN0aW9uKFByaXNtKSB7XHJcbiAgXHQvLyAkIHNldCB8IGdyZXAgJ15bQS1aXVteWzpzcGFjZTpdXSo9JyB8IGN1dCAtZD0gLWYxIHwgdHIgJ1xcbicgJ3wnXHJcbiAgXHQvLyArIExDX0FMTCwgUkFORE9NLCBSRVBMWSwgU0VDT05EUy5cclxuICBcdC8vICsgbWFrZSBzdXJlIFBTMS4uNCBhcmUgaGVyZSBhcyB0aGV5IGFyZSBub3QgYWx3YXlzIHNldCxcclxuICBcdC8vIC0gc29tZSB1c2VsZXNzIHRoaW5ncy5cclxuICBcdHZhciBlbnZWYXJzID0gJ1xcXFxiKD86QkFTSHxCQVNIT1BUU3xCQVNIX0FMSUFTRVN8QkFTSF9BUkdDfEJBU0hfQVJHVnxCQVNIX0NNRFN8QkFTSF9DT01QTEVUSU9OX0NPTVBBVF9ESVJ8QkFTSF9MSU5FTk98QkFTSF9SRU1BVENIfEJBU0hfU09VUkNFfEJBU0hfVkVSU0lORk98QkFTSF9WRVJTSU9OfENPTE9SVEVSTXxDT0xVTU5TfENPTVBfV09SREJSRUFLU3xEQlVTX1NFU1NJT05fQlVTX0FERFJFU1N8REVGQVVMVFNfUEFUSHxERVNLVE9QX1NFU1NJT058RElSU1RBQ0t8RElTUExBWXxFVUlEfEdETVNFU1NJT058R0RNX0xBTkd8R05PTUVfS0VZUklOR19DT05UUk9MfEdOT01FX0tFWVJJTkdfUElEfEdQR19BR0VOVF9JTkZPfEdST1VQU3xISVNUQ09OVFJPTHxISVNURklMRXxISVNURklMRVNJWkV8SElTVFNJWkV8SE9NRXxIT1NUTkFNRXxIT1NUVFlQRXxJRlN8SU5TVEFOQ0V8Sk9CfExBTkd8TEFOR1VBR0V8TENfQUREUkVTU3xMQ19BTEx8TENfSURFTlRJRklDQVRJT058TENfTUVBU1VSRU1FTlR8TENfTU9ORVRBUll8TENfTkFNRXxMQ19OVU1FUklDfExDX1BBUEVSfExDX1RFTEVQSE9ORXxMQ19USU1FfExFU1NDTE9TRXxMRVNTT1BFTnxMSU5FU3xMT0dOQU1FfExTX0NPTE9SU3xNQUNIVFlQRXxNQUlMQ0hFQ0t8TUFOREFUT1JZX1BBVEh8Tk9fQVRfQlJJREdFfE9MRFBXRHxPUFRFUlJ8T1BUSU5EfE9SQklUX1NPQ0tFVERJUnxPU1RZUEV8UEFQRVJTSVpFfFBBVEh8UElQRVNUQVRVU3xQUElEfFBTMXxQUzJ8UFMzfFBTNHxQV0R8UkFORE9NfFJFUExZfFNFQ09ORFN8U0VMSU5VWF9JTklUfFNFU1NJT058U0VTU0lPTlRZUEV8U0VTU0lPTl9NQU5BR0VSfFNIRUxMfFNIRUxMT1BUU3xTSExWTHxTU0hfQVVUSF9TT0NLfFRFUk18VUlEfFVQU1RBUlRfRVZFTlRTfFVQU1RBUlRfSU5TVEFOQ0V8VVBTVEFSVF9KT0J8VVBTVEFSVF9TRVNTSU9OfFVTRVJ8V0lORE9XSUR8WEFVVEhPUklUWXxYREdfQ09ORklHX0RJUlN8WERHX0NVUlJFTlRfREVTS1RPUHxYREdfREFUQV9ESVJTfFhER19HUkVFVEVSX0RBVEFfRElSfFhER19NRU5VX1BSRUZJWHxYREdfUlVOVElNRV9ESVJ8WERHX1NFQVR8WERHX1NFQVRfUEFUSHxYREdfU0VTU0lPTl9ERVNLVE9QfFhER19TRVNTSU9OX0lEfFhER19TRVNTSU9OX1BBVEh8WERHX1NFU1NJT05fVFlQRXxYREdfVlROUnxYTU9ESUZJRVJTKVxcXFxiJztcclxuICBcdHZhciBpbnNpZGVTdHJpbmcgPSB7XHJcbiAgXHRcdCdlbnZpcm9ubWVudCc6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXCJcXFxcJFwiICsgZW52VmFycyksXHJcbiAgXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcclxuICBcdFx0fSxcclxuICBcdFx0J3ZhcmlhYmxlJzogW1xyXG4gIFx0XHRcdC8vIFswXTogQXJpdGhtZXRpYyBFbnZpcm9ubWVudFxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC9cXCQ/XFwoXFwoW1xcc1xcU10rP1xcKVxcKS8sXHJcbiAgXHRcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSAkIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBoaWdobGlnaHQgJCgoIGFuZCApKSBhcyB2YXJpYWJsZVxyXG4gIFx0XHRcdFx0XHQndmFyaWFibGUnOiBbXHJcbiAgXHRcdFx0XHRcdFx0e1xyXG4gIFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFwkXFwoXFwoW1xcc1xcU10rKVxcKVxcKS8sXHJcbiAgXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdFx0XHQvXlxcJFxcKFxcKC9cclxuICBcdFx0XHRcdFx0XSxcclxuICBcdFx0XHRcdFx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrXFwuP1xcZCp8XFxCXFwuXFxkKykoPzpbRWVdLT9cXGQrKT8vLFxyXG4gIFx0XHRcdFx0XHQvLyBPcGVyYXRvcnMgYWNjb3JkaW5nIHRvIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvYmFzaHJlZi5odG1sI1NoZWxsLUFyaXRobWV0aWNcclxuICBcdFx0XHRcdFx0J29wZXJhdG9yJzogLy0tP3wtPXxcXCtcXCs/fFxcKz18IT0/fH58XFwqXFwqP3xcXCo9fFxcLz0/fCU9P3w8PD0/fD4+PT98PD0/fD49P3w9PT98JiY/fCY9fFxcXj0/fFxcfFxcfD98XFx8PXxcXD98Oi8sXHJcbiAgXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG5vICQgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIGhpZ2hsaWdodCAoKCBhbmQgKSkgYXMgcHVuY3R1YXRpb25cclxuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKFxcKD98XFwpXFwpP3wsfDsvXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQvLyBbMV06IENvbW1hbmQgU3Vic3RpdHV0aW9uXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0cGF0dGVybjogL1xcJFxcKCg/OlxcKFteKV0rXFwpfFteKCldKStcXCl8YFteYF0rYC8sXHJcbiAgXHRcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0J3ZhcmlhYmxlJzogL15cXCRcXCh8XmB8XFwpJHxgJC9cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdC8vIFsyXTogQnJhY2UgZXhwYW5zaW9uXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0cGF0dGVybjogL1xcJFxce1tefV0rXFx9LyxcclxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvOlstPT8rXT98WyFcXC9dfCMjP3wlJT98XFxeXFxeP3wsLD8vLFxyXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXV0vLFxyXG4gIFx0XHRcdFx0XHQnZW52aXJvbm1lbnQnOiB7XHJcbiAgXHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFwiKFxcXFx7KVwiICsgZW52VmFycyksXHJcbiAgXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQvXFwkKD86XFx3K3xbIz8qIUAkXSkvXHJcbiAgXHRcdF0sXHJcbiAgXHRcdC8vIEVzY2FwZSBzZXF1ZW5jZXMgZnJvbSBlY2hvIGFuZCBwcmludGYncyBtYW51YWxzLCBhbmQgZXNjYXBlZCBxdW90ZXMuXHJcbiAgXHRcdCdlbnRpdHknOiAvXFxcXCg/OlthYmNlRWZucnR2XFxcXFwiXXxPP1swLTddezEsM318eFswLTlhLWZBLUZdezEsMn18dVswLTlhLWZBLUZdezR9fFVbMC05YS1mQS1GXXs4fSkvXHJcbiAgXHR9O1xyXG5cclxuICBcdFByaXNtLmxhbmd1YWdlcy5iYXNoID0ge1xyXG4gIFx0XHQnc2hlYmFuZyc6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvXiMhXFxzKlxcLy4qLyxcclxuICBcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcclxuICBcdFx0fSxcclxuICBcdFx0J2NvbW1lbnQnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteXCJ7XFxcXCRdKSMuKi8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQnZnVuY3Rpb24tbmFtZSc6IFtcclxuICBcdFx0XHQvLyBhKSBmdW5jdGlvbiBmb28ge1xyXG4gIFx0XHRcdC8vIGIpIGZvbygpIHtcclxuICBcdFx0XHQvLyBjKSBmdW5jdGlvbiBmb28oKSB7XHJcbiAgXHRcdFx0Ly8gYnV0IG5vdCDigJxmb28ge+KAnVxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdC8vIGEpIGFuZCBjKVxyXG4gIFx0XHRcdFx0cGF0dGVybjogLyhcXGJmdW5jdGlvblxccyspXFx3Kyg/PSg/OlxccypcXCg/OlxccypcXCkpP1xccypcXHspLyxcclxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0Ly8gYilcclxuICBcdFx0XHRcdHBhdHRlcm46IC9cXGJcXHcrKD89XFxzKlxcKFxccypcXClcXHMqXFx7KS8sXHJcbiAgXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XSxcclxuICBcdFx0Ly8gSGlnaGxpZ2h0IHZhcmlhYmxlIG5hbWVzIGFzIHZhcmlhYmxlcyBpbiBmb3IgYW5kIHNlbGVjdCBiZWdpbm5pbmdzLlxyXG4gIFx0XHQnZm9yLW9yLXNlbGVjdCc6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmZvcnxzZWxlY3QpXFxzKylcXHcrKD89XFxzK2luXFxzKS8sXHJcbiAgXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQvLyBIaWdobGlnaHQgdmFyaWFibGUgbmFtZXMgYXMgdmFyaWFibGVzIGluIHRoZSBsZWZ0LWhhbmQgcGFydFxyXG4gIFx0XHQvLyBvZiBhc3NpZ25tZW50cyAo4oCcPeKAnSBhbmQg4oCcKz3igJ0pLlxyXG4gIFx0XHQnYXNzaWduLWxlZnQnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpXFx3Kyg/PVxcKz89KS8sXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQnZW52aXJvbm1lbnQnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcIihefFtcXFxcczt8Jl18Wzw+XVxcXFwoKVwiICsgZW52VmFycyksXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdzdHJpbmcnOiBbXHJcbiAgXHRcdFx0Ly8gU3VwcG9ydCBmb3IgSGVyZS1kb2N1bWVudHMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVyZV9kb2N1bWVudFxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXjxdKTw8LT9cXHMqKShcXHcrPylcXHMqKD86XFxyP1xcbnxcXHIpW1xcc1xcU10qPyg/Olxccj9cXG58XFxyKVxcMi8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiBpbnNpZGVTdHJpbmdcclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdC8vIEhlcmUtZG9jdW1lbnQgd2l0aCBxdW90ZXMgYXJvdW5kIHRoZSB0YWdcclxuICBcdFx0XHQvLyDihpIgTm8gZXhwYW5zaW9uIChzbyBubyDigJxpbnNpZGXigJ0pLlxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXjxdKTw8LT9cXHMqKShbXCInXSkoXFx3KylcXDJcXHMqKD86XFxyP1xcbnxcXHIpW1xcc1xcU10qPyg/Olxccj9cXG58XFxyKVxcMy8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlXHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQvLyDigJxOb3JtYWzigJ0gc3RyaW5nXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0oPzpcXFxcXFxcXCkqKShbXCInXSkoPzpcXFxcW1xcc1xcU118XFwkXFwoW14pXStcXCl8YFteYF0rYHwoPyFcXDIpW15cXFxcXSkqXFwyLyxcclxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0XHRpbnNpZGU6IGluc2lkZVN0cmluZ1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XSxcclxuICBcdFx0J2Vudmlyb25tZW50Jzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcIlxcXFwkP1wiICsgZW52VmFycyksXHJcbiAgXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcclxuICBcdFx0fSxcclxuICBcdFx0J3ZhcmlhYmxlJzogaW5zaWRlU3RyaW5nLnZhcmlhYmxlLFxyXG4gIFx0XHQnZnVuY3Rpb24nOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpKD86YWRkfGFwcm9wb3N8YXB0fGFwdGl0dWRlfGFwdC1jYWNoZXxhcHQtZ2V0fGFzcGVsbHxhdXRvbXlzcWxiYWNrdXB8YXdrfGJhc2VuYW1lfGJhc2h8YmN8YmNvbnNvbGV8Ymd8YnppcDJ8Y2FsfGNhdHxjZmRpc2t8Y2hncnB8Y2hrY29uZmlnfGNobW9kfGNob3dufGNocm9vdHxja3N1bXxjbGVhcnxjbXB8Y29sdW1ufGNvbW18Y3B8Y3Jvbnxjcm9udGFifGNzcGxpdHxjdXJsfGN1dHxkYXRlfGRjfGRkfGRkcmVzY3VlfGRlYm9vdHN0cmFwfGRmfGRpZmZ8ZGlmZjN8ZGlnfGRpcnxkaXJjb2xvcnN8ZGlybmFtZXxkaXJzfGRtZXNnfGR1fGVncmVwfGVqZWN0fGVudnxldGh0b29sfGV4cGFuZHxleHBlY3R8ZXhwcnxmZGZvcm1hdHxmZGlza3xmZ3xmZ3JlcHxmaWxlfGZpbmR8Zm10fGZvbGR8Zm9ybWF0fGZyZWV8ZnNja3xmdHB8ZnVzZXJ8Z2F3a3xnaXR8Z3BhcnRlZHxncmVwfGdyb3VwYWRkfGdyb3VwZGVsfGdyb3VwbW9kfGdyb3Vwc3xncnViLW1rY29uZmlnfGd6aXB8aGFsdHxoZWFkfGhnfGhpc3Rvcnl8aG9zdHxob3N0bmFtZXxodG9wfGljb252fGlkfGlmY29uZmlnfGlmZG93bnxpZnVwfGltcG9ydHxpbnN0YWxsfGlwfGpvYnN8am9pbnxraWxsfGtpbGxhbGx8bGVzc3xsaW5rfGxufGxvY2F0ZXxsb2duYW1lfGxvZ3JvdGF0ZXxsb29rfGxwY3xscHJ8bHByaW50fGxwcmludGR8bHByaW50cXxscHJtfGxzfGxzb2Z8bHlueHxtYWtlfG1hbnxtY3xtZGFkbXxta2NvbmZpZ3xta2Rpcnxta2UyZnN8bWtmaWZvfG1rZnN8bWtpc29mc3xta25vZHxta3N3YXB8bW12fG1vcmV8bW9zdHxtb3VudHxtdG9vbHN8bXRyfG11dHR8bXZ8bmFub3xuY3xuZXRzdGF0fG5pY2V8bmx8bm9odXB8bm90aWZ5LXNlbmR8bnBtfG5zbG9va3VwfG9wfG9wZW58cGFydGVkfHBhc3N3ZHxwYXN0ZXxwYXRoY2hrfHBpbmd8cGtpbGx8cG5wbXxwb3BkfHByfHByaW50Y2FwfHByaW50ZW52fHBzfHB1c2hkfHB2fHF1b3RhfHF1b3RhY2hlY2t8cXVvdGFjdGx8cmFtfHJhcnxyY3B8cmVib290fHJlbXN5bmN8cmVuYW1lfHJlbmljZXxyZXZ8cm18cm1kaXJ8cnBtfHJzeW5jfHNjcHxzY3JlZW58c2RpZmZ8c2VkfHNlbmRtYWlsfHNlcXxzZXJ2aWNlfHNmdHB8c2h8c2hlbGxjaGVja3xzaHVmfHNodXRkb3dufHNsZWVwfHNsb2NhdGV8c29ydHxzcGxpdHxzc2h8c3RhdHxzdHJhY2V8c3V8c3Vkb3xzdW18c3VzcGVuZHxzd2Fwb258c3luY3x0YWN8dGFpbHx0YXJ8dGVlfHRpbWV8dGltZW91dHx0b3B8dG91Y2h8dHJ8dHJhY2Vyb3V0ZXx0c29ydHx0dHl8dW1vdW50fHVuYW1lfHVuZXhwYW5kfHVuaXF8dW5pdHN8dW5yYXJ8dW5zaGFyfHVuemlwfHVwZGF0ZS1ncnVifHVwdGltZXx1c2VyYWRkfHVzZXJkZWx8dXNlcm1vZHx1c2Vyc3x1dWRlY29kZXx1dWVuY29kZXx2fHZkaXJ8dml8dmltfHZpcnNofHZtc3RhdHx3YWl0fHdhdGNofHdjfHdnZXR8d2hlcmVpc3x3aGljaHx3aG98d2hvYW1pfHdyaXRlfHhhcmdzfHhkZy1vcGVufHlhcm58eWVzfHplbml0eXx6aXB8enNofHp5cHBlcikoPz0kfFspXFxzO3wmXSkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0J2tleXdvcmQnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpKD86aWZ8dGhlbnxlbHNlfGVsaWZ8Zml8Zm9yfHdoaWxlfGlufGNhc2V8ZXNhY3xmdW5jdGlvbnxzZWxlY3R8ZG98ZG9uZXx1bnRpbCkoPz0kfFspXFxzO3wmXSkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0Ly8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtQnVpbHRpbi1Db21tYW5kcy5odG1sXHJcbiAgXHRcdCdidWlsdGluJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OlxcLnw6fGJyZWFrfGNkfGNvbnRpbnVlfGV2YWx8ZXhlY3xleGl0fGV4cG9ydHxnZXRvcHRzfGhhc2h8cHdkfHJlYWRvbmx5fHJldHVybnxzaGlmdHx0ZXN0fHRpbWVzfHRyYXB8dW1hc2t8dW5zZXR8YWxpYXN8YmluZHxidWlsdGlufGNhbGxlcnxjb21tYW5kfGRlY2xhcmV8ZWNob3xlbmFibGV8aGVscHxsZXR8bG9jYWx8bG9nb3V0fG1hcGZpbGV8cHJpbnRmfHJlYWR8cmVhZGFycmF5fHNvdXJjZXx0eXBlfHR5cGVzZXR8dWxpbWl0fHVuYWxpYXN8c2V0fHNob3B0KSg/PSR8WylcXHM7fCZdKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHQvLyBBbGlhcyBhZGRlZCB0byBtYWtlIHRob3NlIGVhc2llciB0byBkaXN0aW5ndWlzaCBmcm9tIHN0cmluZ3MuXHJcbiAgXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xyXG4gIFx0XHR9LFxyXG4gIFx0XHQnYm9vbGVhbic6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKCkoPzp0cnVlfGZhbHNlKSg/PSR8WylcXHM7fCZdKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQnZmlsZS1kZXNjcmlwdG9yJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC9cXEImXFxkXFxiLyxcclxuICBcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcclxuICBcdFx0fSxcclxuICBcdFx0J29wZXJhdG9yJzoge1xyXG4gIFx0XHRcdC8vIExvdHMgb2YgcmVkaXJlY3Rpb25zIGhlcmUsIGJ1dCBub3QganVzdCB0aGF0LlxyXG4gIFx0XHRcdHBhdHRlcm46IC9cXGQ/PD58PlxcfHxcXCs9fD09P3whPT98PX58PDxbPC1dP3xbJlxcZF0/Pj58XFxkP1s8Pl0mP3wmWz4mXT98XFx8WyZ8XT98PD0/fD49Py8sXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQnZmlsZS1kZXNjcmlwdG9yJzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcZC8sXHJcbiAgXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fSxcclxuICBcdFx0J3B1bmN0dWF0aW9uJzogL1xcJD9cXChcXCg/fFxcKVxcKT98XFwuXFwufFt7fVtcXF07XFxcXF0vLFxyXG4gIFx0XHQnbnVtYmVyJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpKD86WzEtOV1cXGQqfDApKD86Wy4sXVxcZCspP1xcYi8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG5cclxuICBcdC8qIFBhdHRlcm5zIGluIGNvbW1hbmQgc3Vic3RpdHV0aW9uLiAqL1xyXG4gIFx0dmFyIHRvQmVDb3BpZWQgPSBbXHJcbiAgXHRcdCdjb21tZW50JyxcclxuICBcdFx0J2Z1bmN0aW9uLW5hbWUnLFxyXG4gIFx0XHQnZm9yLW9yLXNlbGVjdCcsXHJcbiAgXHRcdCdhc3NpZ24tbGVmdCcsXHJcbiAgXHRcdCdzdHJpbmcnLFxyXG4gIFx0XHQnZW52aXJvbm1lbnQnLFxyXG4gIFx0XHQnZnVuY3Rpb24nLFxyXG4gIFx0XHQna2V5d29yZCcsXHJcbiAgXHRcdCdidWlsdGluJyxcclxuICBcdFx0J2Jvb2xlYW4nLFxyXG4gIFx0XHQnZmlsZS1kZXNjcmlwdG9yJyxcclxuICBcdFx0J29wZXJhdG9yJyxcclxuICBcdFx0J3B1bmN0dWF0aW9uJyxcclxuICBcdFx0J251bWJlcidcclxuICBcdF07XHJcbiAgXHR2YXIgaW5zaWRlID0gaW5zaWRlU3RyaW5nLnZhcmlhYmxlWzFdLmluc2lkZTtcclxuICBcdGZvcih2YXIgaSA9IDA7IGkgPCB0b0JlQ29waWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdGluc2lkZVt0b0JlQ29waWVkW2ldXSA9IFByaXNtLmxhbmd1YWdlcy5iYXNoW3RvQmVDb3BpZWRbaV1dO1xyXG4gIFx0fVxyXG5cclxuICBcdFByaXNtLmxhbmd1YWdlcy5zaGVsbCA9IFByaXNtLmxhbmd1YWdlcy5iYXNoO1xyXG4gIH0pKFByaXNtKTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmdvID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XHJcbiAgXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNoYW58Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkZWZlcnxlbHNlfGZhbGx0aHJvdWdofGZvcnxmdW5jfGdvKD86dG8pP3xpZnxpbXBvcnR8aW50ZXJmYWNlfG1hcHxwYWNrYWdlfHJhbmdlfHJldHVybnxzZWxlY3R8c3RydWN0fHN3aXRjaHx0eXBlfHZhcilcXGIvLFxyXG4gIFx0J2J1aWx0aW4nOiAvXFxiKD86Ym9vbHxieXRlfGNvbXBsZXgoPzo2NHwxMjgpfGVycm9yfGZsb2F0KD86MzJ8NjQpfHJ1bmV8c3RyaW5nfHU/aW50KD86OHwxNnwzMnw2NCk/fHVpbnRwdHJ8YXBwZW5kfGNhcHxjbG9zZXxjb21wbGV4fGNvcHl8ZGVsZXRlfGltYWd8bGVufG1ha2V8bmV3fHBhbmljfHByaW50KD86bG4pP3xyZWFsfHJlY292ZXIpXFxiLyxcclxuICBcdCdib29sZWFuJzogL1xcYig/Ol98aW90YXxuaWx8dHJ1ZXxmYWxzZSlcXGIvLFxyXG4gIFx0J29wZXJhdG9yJzogL1sqXFwvJV4hPV09P3xcXCtbPStdP3wtWz0tXT98XFx8Wz18XT98Jig/Oj18JnxcXF49Pyk/fD4oPzo+PT98PSk/fDwoPzo8PT98PXwtKT98Oj18XFwuXFwuXFwuLyxcclxuICBcdCdudW1iZXInOiAvKD86XFxiMHhbYS1mXFxkXSt8KD86XFxiXFxkK1xcLj9cXGQqfFxcQlxcLlxcZCspKD86ZVstK10/XFxkKyk/KWk/L2ksXHJcbiAgXHQnc3RyaW5nJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0fVxyXG4gIH0pO1xyXG4gIGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuZ29bJ2NsYXNzLW5hbWUnXTtcclxuXHJcbiAgKGZ1bmN0aW9uIChQcmlzbSkge1xyXG5cclxuICBcdC8vIEFsbG93IG9ubHkgb25lIGxpbmUgYnJlYWtcclxuICBcdHZhciBpbm5lciA9IC8oPzpcXFxcLnxbXlxcXFxcXG5cXHJdfCg/OlxcbnxcXHJcXG4/KSg/IVxcbnxcXHJcXG4/KSkvLnNvdXJjZTtcclxuXHJcbiAgXHQvKipcclxuICBcdCAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgYm9sZCBvciBpdGFsaWMgcGF0dGVybi5cclxuICBcdCAqXHJcbiAgXHQgKiBUaGlzIGFsc28gYWRkcyBhIGxvb2tiZWhpbmQgZ3JvdXAgdG8gdGhlIGdpdmVuIHBhdHRlcm4gdG8gZW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gaXMgbm90IGJhY2tzbGFzaC1lc2NhcGVkLlxyXG4gIFx0ICpcclxuICBcdCAqIF9Ob3RlOl8gS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBhZGRzIGEgY2FwdHVyaW5nIGdyb3VwLlxyXG4gIFx0ICpcclxuICBcdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXHJcbiAgXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXJBbHRlcm5hdGl2ZSBXaGV0aGVyIHRvIGFsc28gYWRkIGFuIGFsdGVybmF0aXZlIHdoZXJlIGFsbCBgX2BzIGFyZSByZXBsYWNlZCB3aXRoIGAqYHMuXHJcbiAgXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxyXG4gIFx0ICovXHJcbiAgXHRmdW5jdGlvbiBjcmVhdGVJbmxpbmUocGF0dGVybiwgc3RhckFsdGVybmF0aXZlKSB7XHJcbiAgXHRcdHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoLzxpbm5lcj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXI7IH0pO1xyXG4gIFx0XHRpZiAoc3RhckFsdGVybmF0aXZlKSB7XHJcbiAgXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4gKyAnfCcgKyBwYXR0ZXJuLnJlcGxhY2UoL18vZywgJ1xcXFwqJyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIFJlZ0V4cCgvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopLy5zb3VyY2UgKyAnKD86JyArIHBhdHRlcm4gKyAnKScpO1xyXG4gIFx0fVxyXG5cclxuXHJcbiAgXHR2YXIgdGFibGVDZWxsID0gLyg/OlxcXFwufGBgLis/YGB8YFteYFxcclxcbl0rYHxbXlxcXFx8XFxyXFxuYF0pKy8uc291cmNlO1xyXG4gIFx0dmFyIHRhYmxlUm93ID0gL1xcfD9fXyg/OlxcfF9fKStcXHw/KD86KD86XFxufFxcclxcbj8pfCQpLy5zb3VyY2UucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFibGVDZWxsOyB9KTtcclxuICBcdHZhciB0YWJsZUxpbmUgPSAvXFx8P1sgXFx0XSo6Py17Myx9Oj9bIFxcdF0qKD86XFx8WyBcXHRdKjo/LXszLH06P1sgXFx0XSopK1xcfD8oPzpcXG58XFxyXFxuPykvLnNvdXJjZTtcclxuXHJcblxyXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xyXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya2Rvd24nLCAncHJvbG9nJywge1xyXG4gIFx0XHQnYmxvY2txdW90ZSc6IHtcclxuICBcdFx0XHQvLyA+IC4uLlxyXG4gIFx0XHRcdHBhdHRlcm46IC9ePig/OltcXHQgXSo+KSovbSxcclxuICBcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xyXG4gIFx0XHR9LFxyXG4gIFx0XHQndGFibGUnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHRhYmxlUm93ICsgdGFibGVMaW5lICsgJyg/OicgKyB0YWJsZVJvdyArICcpKicsICdtJyksXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQndGFibGUtZGF0YS1yb3dzJzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oJyArIHRhYmxlUm93ICsgdGFibGVMaW5lICsgJykoPzonICsgdGFibGVSb3cgKyAnKSokJyksXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHRcdCd0YWJsZS1kYXRhJzoge1xyXG4gIFx0XHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHRhYmxlQ2VsbCksXHJcbiAgXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blxyXG4gIFx0XHRcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdCd0YWJsZS1saW5lJzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oJyArIHRhYmxlUm93ICsgJyknICsgdGFibGVMaW5lICsgJyQnKSxcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfHw6Py17Myx9Oj8vXHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHQndGFibGUtaGVhZGVyLXJvdyc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHRhYmxlUm93ICsgJyQnKSxcclxuICBcdFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdFx0J3RhYmxlLWhlYWRlcic6IHtcclxuICBcdFx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWJsZUNlbGwpLFxyXG4gIFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxyXG4gIFx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25cclxuICBcdFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdjb2RlJzogW1xyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdC8vIFByZWZpeGVkIGJ5IDQgc3BhY2VzIG9yIDEgdGFiIGFuZCBwcmVjZWRlZCBieSBhbiBlbXB0eSBsaW5lXHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxuKVsgXFx0XSpcXG58KD86XnxcXHJcXG4/KVsgXFx0XSpcXHJcXG4/KSg/OiB7NH18XFx0KS4rKD86KD86XFxufFxcclxcbj8pKD86IHs0fXxcXHQpLispKi8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0Ly8gYGNvZGVgXHJcbiAgXHRcdFx0XHQvLyBgYGNvZGVgYFxyXG4gIFx0XHRcdFx0cGF0dGVybjogL2BgLis/YGB8YFteYFxcclxcbl0rYC8sXHJcbiAgXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHQvLyBgYGBvcHRpb25hbCBsYW5ndWFnZVxyXG4gIFx0XHRcdFx0Ly8gY29kZSBibG9ja1xyXG4gIFx0XHRcdFx0Ly8gYGBgXHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXmBgYFtcXHNcXFNdKj9eYGBgJC9tLFxyXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdCdjb2RlLWJsb2NrJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKGBgYC4qKD86XFxufFxcclxcbj8pKVtcXHNcXFNdKz8oPz0oPzpcXG58XFxyXFxuPyleYGBgJCkvbSxcclxuICBcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHRcdCdjb2RlLWxhbmd1YWdlJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKGBgYCkuKy8sXHJcbiAgXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvYGBgL1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XSxcclxuICBcdFx0J3RpdGxlJzogW1xyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdC8vIHRpdGxlIDFcclxuICBcdFx0XHRcdC8vID09PT09PT1cclxuXHJcbiAgXHRcdFx0XHQvLyB0aXRsZSAyXHJcbiAgXHRcdFx0XHQvLyAtLS0tLS0tXHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXFxTLiooPzpcXG58XFxyXFxuPykoPzo9PSt8LS0rKSg/PVsgXFx0XSokKS9tLFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdHB1bmN0dWF0aW9uOiAvPT0rJHwtLSskL1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0Ly8gIyB0aXRsZSAxXHJcbiAgXHRcdFx0XHQvLyAjIyMjIyMgdGl0bGUgNlxyXG4gIFx0XHRcdFx0cGF0dGVybjogLyheXFxzKikjKy4rL20sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdHB1bmN0dWF0aW9uOiAvXiMrfCMrJC9cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdF0sXHJcbiAgXHRcdCdocic6IHtcclxuICBcdFx0XHQvLyAqKipcclxuICBcdFx0XHQvLyAtLS1cclxuICBcdFx0XHQvLyAqICogKlxyXG4gIFx0XHRcdC8vIC0tLS0tLS0tLS0tXHJcbiAgXHRcdFx0cGF0dGVybjogLyheXFxzKikoWyotXSkoPzpbXFx0IF0qXFwyKXsyLH0oPz1cXHMqJCkvbSxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdsaXN0Jzoge1xyXG4gIFx0XHRcdC8vICogaXRlbVxyXG4gIFx0XHRcdC8vICsgaXRlbVxyXG4gIFx0XHRcdC8vIC0gaXRlbVxyXG4gIFx0XHRcdC8vIDEuIGl0ZW1cclxuICBcdFx0XHRwYXR0ZXJuOiAvKF5cXHMqKSg/OlsqKy1dfFxcZCtcXC4pKD89W1xcdCBdLikvbSxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCd1cmwtcmVmZXJlbmNlJzoge1xyXG4gIFx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSBcIk9wdGlvbmFsIHRpdGxlXCJcclxuICBcdFx0XHQvLyBbaWRdOiBodHRwOi8vZXhhbXBsZS5jb20gJ09wdGlvbmFsIHRpdGxlJ1xyXG4gIFx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSAoT3B0aW9uYWwgdGl0bGUpXHJcbiAgXHRcdFx0Ly8gW2lkXTogPGh0dHA6Ly9leGFtcGxlLmNvbT4gXCJPcHRpb25hbCB0aXRsZVwiXHJcbiAgXHRcdFx0cGF0dGVybjogLyE/XFxbW15cXF1dK1xcXTpbXFx0IF0rKD86XFxTK3w8KD86XFxcXC58W14+XFxcXF0pKz4pKD86W1xcdCBdKyg/OlwiKD86XFxcXC58W15cIlxcXFxdKSpcInwnKD86XFxcXC58W14nXFxcXF0pKid8XFwoKD86XFxcXC58W14pXFxcXF0pKlxcKSkpPy8sXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQndmFyaWFibGUnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC9eKCE/XFxbKVteXFxdXSsvLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J3N0cmluZyc6IC8oPzpcIig/OlxcXFwufFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxdKSonfFxcKCg/OlxcXFwufFteKVxcXFxdKSpcXCkpJC8sXHJcbiAgXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXltcXFtcXF0hOl18Wzw+XS9cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdGFsaWFzOiAndXJsJ1xyXG4gIFx0XHR9LFxyXG4gIFx0XHQnYm9sZCc6IHtcclxuICBcdFx0XHQvLyAqKnN0cm9uZyoqXHJcbiAgXHRcdFx0Ly8gX19zdHJvbmdfX1xyXG5cclxuICBcdFx0XHQvLyBhbGxvdyBvbmUgbmVzdGVkIGluc3RhbmNlIG9mIGl0YWxpYyB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxyXG4gIFx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvX18oPzooPyFfKTxpbm5lcj58Xyg/Oig/IV8pPGlubmVyPikrXykrX18vLnNvdXJjZSwgdHJ1ZSksXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQnY29udGVudCc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogLyheLi4pW1xcc1xcU10rKD89Li4kKS8sXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKlxcKnxfXy9cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdpdGFsaWMnOiB7XHJcbiAgXHRcdFx0Ly8gKmVtKlxyXG4gIFx0XHRcdC8vIF9lbV9cclxuXHJcbiAgXHRcdFx0Ly8gYWxsb3cgb25lIG5lc3RlZCBpbnN0YW5jZSBvZiBib2xkIHRleHQgdXNpbmcgdGhlIHNhbWUgZGVsaW1pdGVyXHJcbiAgXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC9fKD86KD8hXyk8aW5uZXI+fF9fKD86KD8hXyk8aW5uZXI+KStfXykrXy8uc291cmNlLCB0cnVlKSxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdCdjb250ZW50Jzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4uKVtcXHNcXFNdKyg/PS4kKS8sXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1sqX10vXHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQnc3RyaWtlJzoge1xyXG4gIFx0XHRcdC8vIH5+c3RyaWtlIHRocm91Z2h+flxyXG4gIFx0XHRcdC8vIH5zdHJpa2V+XHJcbiAgXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC8ofn4/KSg/Oig/IX4pPGlubmVyPikrP1xcMi8uc291cmNlLCBmYWxzZSksXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQnY29udGVudCc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogLyhefn4/KVtcXHNcXFNdKyg/PVxcMSQpLyxcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcclxuICBcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvfn4/L1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSxcclxuICBcdFx0J3VybCc6IHtcclxuICBcdFx0XHQvLyBbZXhhbXBsZV0oaHR0cDovL2V4YW1wbGUuY29tIFwiT3B0aW9uYWwgdGl0bGVcIilcclxuICBcdFx0XHQvLyBbZXhhbXBsZV1baWRdXHJcbiAgXHRcdFx0Ly8gW2V4YW1wbGVdIFtpZF1cclxuICBcdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoLyE/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSg/OlxcKFteXFxzKV0rKD86W1xcdCBdK1wiKD86XFxcXC58W15cIlxcXFxdKSpcIik/XFwpfCA/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSkvLnNvdXJjZSwgZmFsc2UpLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J3ZhcmlhYmxlJzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcWylbXlxcXV0rKD89XFxdJCkvLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J2NvbnRlbnQnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXiE/XFxbKVteXFxdXSsoPz1cXF0pLyxcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcclxuICBcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHQnc3RyaW5nJzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwiKD89XFwpJCkvXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9KTtcclxuXHJcbiAgXHRbJ3VybCcsICdib2xkJywgJ2l0YWxpYycsICdzdHJpa2UnXS5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xyXG4gIFx0XHRbJ3VybCcsICdib2xkJywgJ2l0YWxpYycsICdzdHJpa2UnXS5mb3JFYWNoKGZ1bmN0aW9uIChpbnNpZGUpIHtcclxuICBcdFx0XHRpZiAodG9rZW4gIT09IGluc2lkZSkge1xyXG4gIFx0XHRcdFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duW3Rva2VuXS5pbnNpZGUuY29udGVudC5pbnNpZGVbaW5zaWRlXSA9IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93bltpbnNpZGVdO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSk7XHJcbiAgXHR9KTtcclxuXHJcbiAgXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xyXG4gIFx0XHRpZiAoZW52Lmxhbmd1YWdlICE9PSAnbWFya2Rvd24nICYmIGVudi5sYW5ndWFnZSAhPT0gJ21kJykge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZnVuY3Rpb24gd2Fsa1Rva2Vucyh0b2tlbnMpIHtcclxuICBcdFx0XHRpZiAoIXRva2VucyB8fCB0eXBlb2YgdG9rZW5zID09PSAnc3RyaW5nJykge1xyXG4gIFx0XHRcdFx0cmV0dXJuO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgXHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XHJcblxyXG4gIFx0XHRcdFx0aWYgKHRva2VuLnR5cGUgIT09ICdjb2RlJykge1xyXG4gIFx0XHRcdFx0XHR3YWxrVG9rZW5zKHRva2VuLmNvbnRlbnQpO1xyXG4gIFx0XHRcdFx0XHRjb250aW51ZTtcclxuICBcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHQvKlxyXG4gIFx0XHRcdFx0ICogQWRkIHRoZSBjb3JyZWN0IGBsYW5ndWFnZS14eHh4YCBjbGFzcyB0byB0aGlzIGNvZGUgYmxvY2suIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBgY29kZS1sYW5ndWFnZWAgdG9rZW5cclxuICBcdFx0XHRcdCAqIGlzIG9wdGlvbmFsLiBCdXQgdGhlIGdyYW1tYXIgaXMgZGVmaW5lZCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGNhc2Ugd2UgaGF2ZSB0byBoYW5kbGU6XHJcbiAgXHRcdFx0XHQgKlxyXG4gIFx0XHRcdFx0ICogdG9rZW4uY29udGVudCA9IFtcclxuICBcdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cInB1bmN0dWF0aW9uXCI+YGBgPC9zcGFuPixcclxuICBcdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cImNvZGUtbGFuZ3VhZ2VcIj54eHh4PC9zcGFuPixcclxuICBcdFx0XHRcdCAqICAgICAnXFxuJywgLy8gZXhhY3RseSBvbmUgbmV3IGxpbmVzIChcXHIgb3IgXFxuIG9yIFxcclxcbilcclxuICBcdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cImNvZGUtYmxvY2tcIj4uLi48L3NwYW4+LFxyXG4gIFx0XHRcdFx0ICogICAgICdcXG4nLCAvLyBleGFjdGx5IG9uZSBuZXcgbGluZXMgYWdhaW5cclxuICBcdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cInB1bmN0dWF0aW9uXCI+YGBgPC9zcGFuPlxyXG4gIFx0XHRcdFx0ICogXTtcclxuICBcdFx0XHRcdCAqL1xyXG5cclxuICBcdFx0XHRcdHZhciBjb2RlTGFuZyA9IHRva2VuLmNvbnRlbnRbMV07XHJcbiAgXHRcdFx0XHR2YXIgY29kZUJsb2NrID0gdG9rZW4uY29udGVudFszXTtcclxuXHJcbiAgXHRcdFx0XHRpZiAoY29kZUxhbmcgJiYgY29kZUJsb2NrICYmXHJcbiAgXHRcdFx0XHRcdGNvZGVMYW5nLnR5cGUgPT09ICdjb2RlLWxhbmd1YWdlJyAmJiBjb2RlQmxvY2sudHlwZSA9PT0gJ2NvZGUtYmxvY2snICYmXHJcbiAgXHRcdFx0XHRcdHR5cGVvZiBjb2RlTGFuZy5jb250ZW50ID09PSAnc3RyaW5nJykge1xyXG5cclxuICBcdFx0XHRcdFx0Ly8gdGhpcyBtaWdodCBiZSBhIGxhbmd1YWdlIHRoYXQgUHJpc20gZG9lcyBub3Qgc3VwcG9ydFxyXG5cclxuICBcdFx0XHRcdFx0Ly8gZG8gc29tZSByZXBsYWNlbWVudHMgdG8gc3VwcG9ydCBDKyssIEMjLCBhbmQgRiNcclxuICBcdFx0XHRcdFx0dmFyIGxhbmcgPSBjb2RlTGFuZy5jb250ZW50LnJlcGxhY2UoL1xcYiMvZywgJ3NoYXJwJykucmVwbGFjZSgvXFxiXFwrXFwrL2csICdwcCcpO1xyXG4gIFx0XHRcdFx0XHQvLyBvbmx5IHVzZSB0aGUgZmlyc3Qgd29yZFxyXG4gIFx0XHRcdFx0XHRsYW5nID0gKC9bYS16XVtcXHctXSovaS5leGVjKGxhbmcpIHx8IFsnJ10pWzBdLnRvTG93ZXJDYXNlKCk7XHJcbiAgXHRcdFx0XHRcdHZhciBhbGlhcyA9ICdsYW5ndWFnZS0nICsgbGFuZztcclxuXHJcbiAgXHRcdFx0XHRcdC8vIGFkZCBhbGlhc1xyXG4gIFx0XHRcdFx0XHRpZiAoIWNvZGVCbG9jay5hbGlhcykge1xyXG4gIFx0XHRcdFx0XHRcdGNvZGVCbG9jay5hbGlhcyA9IFthbGlhc107XHJcbiAgXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvZGVCbG9jay5hbGlhcyA9PT0gJ3N0cmluZycpIHtcclxuICBcdFx0XHRcdFx0XHRjb2RlQmxvY2suYWxpYXMgPSBbY29kZUJsb2NrLmFsaWFzLCBhbGlhc107XHJcbiAgXHRcdFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzLnB1c2goYWxpYXMpO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xyXG4gIFx0fSk7XHJcblxyXG4gIFx0UHJpc20uaG9va3MuYWRkKCd3cmFwJywgZnVuY3Rpb24gKGVudikge1xyXG4gIFx0XHRpZiAoZW52LnR5cGUgIT09ICdjb2RlLWJsb2NrJykge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGNvZGVMYW5nID0gJyc7XHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsID0gZW52LmNsYXNzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgXHRcdFx0dmFyIGNscyA9IGVudi5jbGFzc2VzW2ldO1xyXG4gIFx0XHRcdHZhciBtYXRjaCA9IC9sYW5ndWFnZS0oLispLy5leGVjKGNscyk7XHJcbiAgXHRcdFx0aWYgKG1hdGNoKSB7XHJcbiAgXHRcdFx0XHRjb2RlTGFuZyA9IG1hdGNoWzFdO1xyXG4gIFx0XHRcdFx0YnJlYWs7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tjb2RlTGFuZ107XHJcblxyXG4gIFx0XHRpZiAoIWdyYW1tYXIpIHtcclxuICBcdFx0XHRpZiAoY29kZUxhbmcgJiYgY29kZUxhbmcgIT09ICdub25lJyAmJiBQcmlzbS5wbHVnaW5zLmF1dG9sb2FkZXIpIHtcclxuICBcdFx0XHRcdHZhciBpZCA9ICdtZC0nICsgbmV3IERhdGUoKS52YWx1ZU9mKCkgKyAnLScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTE2KTtcclxuICBcdFx0XHRcdGVudi5hdHRyaWJ1dGVzWydpZCddID0gaWQ7XHJcblxyXG4gIFx0XHRcdFx0UHJpc20ucGx1Z2lucy5hdXRvbG9hZGVyLmxvYWRMYW5ndWFnZXMoY29kZUxhbmcsIGZ1bmN0aW9uICgpIHtcclxuICBcdFx0XHRcdFx0dmFyIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICBcdFx0XHRcdFx0aWYgKGVsZSkge1xyXG4gIFx0XHRcdFx0XHRcdGVsZS5pbm5lckhUTUwgPSBQcmlzbS5oaWdobGlnaHQoZWxlLnRleHRDb250ZW50LCBQcmlzbS5sYW5ndWFnZXNbY29kZUxhbmddLCBjb2RlTGFuZyk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH0pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHQvLyByZXZlcnNlIFByaXNtLnV0aWwuZW5jb2RlXHJcbiAgXHRcdFx0dmFyIGNvZGUgPSBlbnYuY29udGVudC5yZXBsYWNlKC8mbHQ7L2csICc8JykucmVwbGFjZSgvJmFtcDsvZywgJyYnKTtcclxuXHJcbiAgXHRcdFx0ZW52LmNvbnRlbnQgPSBQcmlzbS5oaWdobGlnaHQoY29kZSwgZ3JhbW1hciwgY29kZUxhbmcpO1xyXG4gIFx0XHR9XHJcbiAgXHR9KTtcclxuXHJcbiAgXHRQcmlzbS5sYW5ndWFnZXMubWQgPSBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd247XHJcblxyXG4gIH0oUHJpc20pKTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmp1bGlhPSB7XHJcbiAgXHQnY29tbWVudCc6IHtcclxuICBcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcclxuICBcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0fSxcclxuICBcdCdzdHJpbmcnOiAvKFwiXCJcInwnJycpW1xcc1xcU10rP1xcMXwoXCJ8JykoPzpcXFxcLnwoPyFcXDIpW15cXFxcXFxyXFxuXSkqXFwyLyxcclxuICBcdCdrZXl3b3JkJyA6IC9cXGIoPzphYnN0cmFjdHxiYXJlbW9kdWxlfGJlZ2lufGJpdHN0eXBlfGJyZWFrfGNhdGNofGNjYWxsfGNvbnN0fGNvbnRpbnVlfGRvfGVsc2V8ZWxzZWlmfGVuZHxleHBvcnR8ZmluYWxseXxmb3J8ZnVuY3Rpb258Z2xvYmFsfGlmfGltbXV0YWJsZXxpbXBvcnR8aW1wb3J0YWxsfGlufGxldHxsb2NhbHxtYWNyb3xtb2R1bGV8cHJpbnR8cHJpbnRsbnxxdW90ZXxyZXR1cm58c3RydWN0fHRyeXx0eXBlfHR5cGVhbGlhc3x1c2luZ3x3aGlsZSlcXGIvLFxyXG4gIFx0J2Jvb2xlYW4nIDogL1xcYig/OnRydWV8ZmFsc2UpXFxiLyxcclxuICBcdCdudW1iZXInIDogLyg/OlxcYig/PVxcZCl8XFxCKD89XFwuKSkoPzowW2JveF0pPyg/OltcXGRhLWZdK1xcLj9cXGQqfFxcLlxcZCspKD86W2VmcF1bKy1dP1xcZCspP2o/L2ksXHJcbiAgXHQnb3BlcmF0b3InOiAvWy0rKl4lw7cmJFxcXFxdPT98XFwvW1xcLz1dP3whPT89P3xcXHxbPT5dP3w8KD86PD0/fFs9Ol0pP3w+KD86PXw+Pj89Pyk/fD09Pz0/fFt+4omg4omk4omlXS8sXHJcbiAgXHQncHVuY3R1YXRpb24nIDogL1t7fVtcXF07KCksLjpdLyxcclxuICBcdCdjb25zdGFudCc6IC9cXGIoPzooPzpOYU58SW5mKSg/OjE2fDMyfDY0KT8pXFxiL1xyXG4gIH07XHJcblxyXG4gIHZhciBjc3MgPSBcIi8qKlxcbiAqIHByaXNtLmpzIGRlZmF1bHQgdGhlbWUgZm9yIEphdmFTY3JpcHQsIENTUyBhbmQgSFRNTFxcbiAqIEJhc2VkIG9uIGRhYmJsZXQgKGh0dHA6Ly9kYWJibGV0LmNvbSlcXG4gKiBAYXV0aG9yIExlYSBWZXJvdVxcbiAqL1xcblxcbmNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXG5wcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0Y29sb3I6IGJsYWNrO1xcblxcdGJhY2tncm91bmQ6IG5vbmU7XFxuXFx0dGV4dC1zaGFkb3c6IDAgMXB4IHdoaXRlO1xcblxcdGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCAnQW5kYWxlIE1vbm8nLCAnVWJ1bnR1IE1vbm8nLCBtb25vc3BhY2U7XFxuXFx0Zm9udC1zaXplOiAxZW07XFxuXFx0dGV4dC1hbGlnbjogbGVmdDtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlO1xcblxcdHdvcmQtc3BhY2luZzogbm9ybWFsO1xcblxcdHdvcmQtYnJlYWs6IG5vcm1hbDtcXG5cXHR3b3JkLXdyYXA6IG5vcm1hbDtcXG5cXHRsaW5lLWhlaWdodDogMS41O1xcblxcblxcdC1tb3otdGFiLXNpemU6IDQ7XFxuXFx0LW8tdGFiLXNpemU6IDQ7XFxuXFx0dGFiLXNpemU6IDQ7XFxuXFxuXFx0LXdlYmtpdC1oeXBoZW5zOiBub25lO1xcblxcdC1tb3otaHlwaGVuczogbm9uZTtcXG5cXHQtbXMtaHlwaGVuczogbm9uZTtcXG5cXHRoeXBoZW5zOiBub25lO1xcbn1cXG5cXG5wcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6LW1vei1zZWxlY3Rpb24sIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6LW1vei1zZWxlY3Rpb24sXFxuY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjotbW96LXNlbGVjdGlvbiwgY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6LW1vei1zZWxlY3Rpb24ge1xcblxcdHRleHQtc2hhZG93OiBub25lO1xcblxcdGJhY2tncm91bmQ6ICNiM2Q0ZmM7XFxufVxcblxcbnByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdOjpzZWxlY3Rpb24sIHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6c2VsZWN0aW9uLFxcbmNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6c2VsZWN0aW9uLCBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0gOjpzZWxlY3Rpb24ge1xcblxcdHRleHQtc2hhZG93OiBub25lO1xcblxcdGJhY2tncm91bmQ6ICNiM2Q0ZmM7XFxufVxcblxcbkBtZWRpYSBwcmludCB7XFxuXFx0Y29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdLFxcblxcdHByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXG5cXHRcXHR0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHR9XFxufVxcblxcbi8qIENvZGUgYmxvY2tzICovXFxucHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcblxcdHBhZGRpbmc6IDFlbTtcXG5cXHRtYXJnaW46IC41ZW0gMDtcXG5cXHRvdmVyZmxvdzogYXV0bztcXG59XFxuXFxuOm5vdChwcmUpID4gY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdLFxcbnByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXG5cXHRiYWNrZ3JvdW5kOiAjZjVmMmYwO1xcbn1cXG5cXG4vKiBJbmxpbmUgY29kZSAqL1xcbjpub3QocHJlKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0cGFkZGluZzogLjFlbTtcXG5cXHRib3JkZXItcmFkaXVzOiAuM2VtO1xcblxcdHdoaXRlLXNwYWNlOiBub3JtYWw7XFxufVxcblxcbi50b2tlbi5jb21tZW50LFxcbi50b2tlbi5wcm9sb2csXFxuLnRva2VuLmRvY3R5cGUsXFxuLnRva2VuLmNkYXRhIHtcXG5cXHRjb2xvcjogc2xhdGVncmF5O1xcbn1cXG5cXG4udG9rZW4ucHVuY3R1YXRpb24ge1xcblxcdGNvbG9yOiAjOTk5O1xcbn1cXG5cXG4udG9rZW4ubmFtZXNwYWNlIHtcXG5cXHRvcGFjaXR5OiAuNztcXG59XFxuXFxuLnRva2VuLnByb3BlcnR5LFxcbi50b2tlbi50YWcsXFxuLnRva2VuLmJvb2xlYW4sXFxuLnRva2VuLm51bWJlcixcXG4udG9rZW4uY29uc3RhbnQsXFxuLnRva2VuLnN5bWJvbCxcXG4udG9rZW4uZGVsZXRlZCB7XFxuXFx0Y29sb3I6ICM5MDU7XFxufVxcblxcbi50b2tlbi5zZWxlY3RvcixcXG4udG9rZW4uYXR0ci1uYW1lLFxcbi50b2tlbi5zdHJpbmcsXFxuLnRva2VuLmNoYXIsXFxuLnRva2VuLmJ1aWx0aW4sXFxuLnRva2VuLmluc2VydGVkIHtcXG5cXHRjb2xvcjogIzY5MDtcXG59XFxuXFxuLnRva2VuLm9wZXJhdG9yLFxcbi50b2tlbi5lbnRpdHksXFxuLnRva2VuLnVybCxcXG4ubGFuZ3VhZ2UtY3NzIC50b2tlbi5zdHJpbmcsXFxuLnN0eWxlIC50b2tlbi5zdHJpbmcge1xcblxcdGNvbG9yOiAjOWE2ZTNhO1xcblxcdGJhY2tncm91bmQ6IGhzbGEoMCwgMCUsIDEwMCUsIC41KTtcXG59XFxuXFxuLnRva2VuLmF0cnVsZSxcXG4udG9rZW4uYXR0ci12YWx1ZSxcXG4udG9rZW4ua2V5d29yZCB7XFxuXFx0Y29sb3I6ICMwN2E7XFxufVxcblxcbi50b2tlbi5mdW5jdGlvbixcXG4udG9rZW4uY2xhc3MtbmFtZSB7XFxuXFx0Y29sb3I6ICNERDRBNjg7XFxufVxcblxcbi50b2tlbi5yZWdleCxcXG4udG9rZW4uaW1wb3J0YW50LFxcbi50b2tlbi52YXJpYWJsZSB7XFxuXFx0Y29sb3I6ICNlOTA7XFxufVxcblxcbi50b2tlbi5pbXBvcnRhbnQsXFxuLnRva2VuLmJvbGQge1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udG9rZW4uaXRhbGljIHtcXG5cXHRmb250LXN0eWxlOiBpdGFsaWM7XFxufVxcblxcbi50b2tlbi5lbnRpdHkge1xcblxcdGN1cnNvcjogaGVscDtcXG59XFxuXCI7XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCQ0ID0gVGVtcGxhdGUoJ2QtY29kZScsIGBcclxuPHN0eWxlPlxyXG5cclxuY29kZSB7XHJcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xyXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICBwYWRkaW5nOiA0cHggN3B4O1xyXG4gIGZvbnQtc2l6ZTogMTVweDtcclxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xyXG59XHJcblxyXG5wcmUgY29kZSB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIC4xKTtcclxuICBwYWRkaW5nOiAwIDAgMCAzNnB4O1xyXG59XHJcblxyXG4ke2Nzc31cclxuPC9zdHlsZT5cclxuXHJcbjxjb2RlIGlkPVwiY29kZS1jb250YWluZXJcIj48L2NvZGU+XHJcblxyXG5gKTtcclxuXHJcbiAgY2xhc3MgQ29kZSBleHRlbmRzIE11dGF0aW5nKFQkNChIVE1MRWxlbWVudCkpIHtcclxuXHJcbiAgICByZW5kZXJDb250ZW50KCkge1xyXG5cclxuICAgICAgLy8gY2hlY2sgaWYgbGFuZ3VhZ2UgY2FuIGJlIGhpZ2hsaWdodGVkXHJcbiAgICAgIHRoaXMubGFuZ3VhZ2VOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2xhbmd1YWdlJyk7XHJcbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZU5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1lvdSBuZWVkIHRvIHByb3ZpZGUgYSBsYW5ndWFnZSBhdHRyaWJ1dGUgdG8geW91ciA8ZC1jb2RlPiBibG9jayB0byBsZXQgdXMga25vdyBob3cgdG8gaGlnaGxpZ2h0IHlvdXIgY29kZTsgZS5nLjpcXG4gPGQtY29kZSBsYW5ndWFnZT1cInB5dGhvblwiPnplcm9zID0gbnAuemVyb3Moc2hhcGUpPC9kLWNvZGU+LicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHByaXNtLmxhbmd1YWdlc1t0aGlzLmxhbmd1YWdlTmFtZV07XHJcbiAgICAgIGlmIChsYW5ndWFnZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYERpc3RpbGwgZG9lcyBub3QgeWV0IHN1cHBvcnQgaGlnaGxpZ2h0aW5nIHlvdXIgY29kZSBibG9jayBpbiBcIiR7dGhpcy5sYW5ndWFnZU5hbWV9Jy5gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy50ZXh0Q29udGVudDtcclxuICAgICAgY29uc3QgY29kZVRhZyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjY29kZS1jb250YWluZXInKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnYmxvY2snKSkge1xyXG4gICAgICAgIC8vIG5vcm1hbGl6ZSB0aGUgdGFiIGluZGVudHNcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9cXG4vLCAnJyk7XHJcbiAgICAgICAgY29uc3QgdGFicyA9IGNvbnRlbnQubWF0Y2goL1xccyovKTtcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcbicgKyB0YWJzLCAnZycpLCAnXFxuJyk7XHJcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQudHJpbSgpO1xyXG4gICAgICAgIC8vIHdyYXAgY29kZSBibG9jayBpbiBwcmUgdGFnIGlmIG5lZWRlZFxyXG4gICAgICAgIGlmIChjb2RlVGFnLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcclxuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5yZW1vdmVDaGlsZChjb2RlVGFnKTtcclxuICAgICAgICAgIHByZVRhZy5hcHBlbmRDaGlsZChjb2RlVGFnKTtcclxuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChwcmVUYWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvZGVUYWcuY2xhc3NOYW1lID0gYGxhbmd1YWdlLSR7dGhpcy5sYW5ndWFnZU5hbWV9YDtcclxuICAgICAgY29kZVRhZy5pbm5lckhUTUwgPSBwcmlzbS5oaWdobGlnaHQoY29udGVudCwgbGFuZ3VhZ2UpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCQ1ID0gVGVtcGxhdGUoJ2QtZm9vdG5vdGUnLCBgXHJcbjxzdHlsZT5cclxuXHJcbmQtbWF0aFtibG9ja10ge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG46aG9zdCB7XHJcblxyXG59XHJcblxyXG5zdXAge1xyXG4gIGxpbmUtaGVpZ2h0OiAxZW07XHJcbiAgZm9udC1zaXplOiAwLjc1ZW07XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogLS41ZW07XHJcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xyXG59XHJcblxyXG5zcGFuIHtcclxuICBjb2xvcjogaHNsYSgyMDYsIDkwJSwgMjAlLCAwLjcpO1xyXG4gIGN1cnNvcjogZGVmYXVsdDtcclxufVxyXG5cclxuLmZvb3Rub3RlLWNvbnRhaW5lciB7XHJcbiAgcGFkZGluZzogMTBweDtcclxufVxyXG5cclxuPC9zdHlsZT5cclxuXHJcbjxkLWhvdmVyLWJveD5cclxuICA8ZGl2IGNsYXNzPVwiZm9vdG5vdGUtY29udGFpbmVyXCI+XHJcbiAgICA8c2xvdCBpZD1cInNsb3RcIj48L3Nsb3Q+XHJcbiAgPC9kaXY+XHJcbjwvZC1ob3Zlci1ib3g+XHJcblxyXG48c3VwPlxyXG4gIDxzcGFuIGlkPVwiZm4tXCIgZGF0YS1ob3Zlci1yZWY9XCJcIj48L3NwYW4+XHJcbjwvc3VwPlxyXG5cclxuYCk7XHJcblxyXG4gIGNsYXNzIEZvb3Rub3RlIGV4dGVuZHMgVCQ1KEhUTUxFbGVtZW50KSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICBjb25zdCBvcHRpb25zID0ge2NoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSwgc3VidHJlZTogdHJ1ZX07XHJcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5ub3RpZnkpO1xyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5vdGlmeSgpIHtcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgZGV0YWlsOiB0aGlzLCBidWJibGVzOiB0cnVlIH07XHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkZvb3Rub3RlQ2hhbmdlZCcsIG9wdGlvbnMpO1xyXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgLy8gbGlzdGVuIGFuZCBub3RpZnkgYWJvdXQgY2hhbmdlcyB0byBzbG90dGVkIGNvbnRlbnRcclxuICAgICAgLy8gY29uc3Qgc2xvdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc2xvdCcpO1xyXG4gICAgICAvLyBjb25zb2xlLndhcm4oc2xvdC50ZXh0Q29udGVudCk7XHJcbiAgICAgIC8vIHNsb3QuYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMubm90aWZ5KTtcclxuICAgICAgdGhpcy5ob3ZlckJveCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCdkLWhvdmVyLWJveCcpO1xyXG4gICAgICB3aW5kb3cuY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ2QtaG92ZXItYm94JykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ob3ZlckJveC5saXN0ZW4odGhpcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBjcmVhdGUgbnVtZXJpYyBJRFxyXG4gICAgICBGb290bm90ZS5jdXJyZW50Rm9vdG5vdGVJZCArPSAxO1xyXG4gICAgICBjb25zdCBJZFN0cmluZyA9IEZvb3Rub3RlLmN1cnJlbnRGb290bm90ZUlkLnRvU3RyaW5nKCk7XHJcbiAgICAgIHRoaXMucm9vdC5ob3N0LmlkID0gJ2QtZm9vdG5vdGUtJyArIElkU3RyaW5nO1xyXG5cclxuICAgICAgLy8gc2V0IHVwIGhpZGRlbiBob3ZlciBib3hcclxuICAgICAgY29uc3QgaWQgPSAnZHQtZm4taG92ZXItYm94LScgKyBJZFN0cmluZztcclxuICAgICAgdGhpcy5ob3ZlckJveC5pZCA9IGlkO1xyXG5cclxuICAgICAgLy8gc2V0IHVwIHZpc2libGUgZm9vdG5vdGUgbWFya2VyXHJcbiAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI2ZuLScpO1xyXG4gICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnaWQnLCAnZm4tJyArIElkU3RyaW5nKTtcclxuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXItcmVmJywgaWQpO1xyXG4gICAgICBzcGFuLnRleHRDb250ZW50ID0gSWRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgRm9vdG5vdGUuY3VycmVudEZvb3Rub3RlSWQgPSAwO1xyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkNiA9IFRlbXBsYXRlKCdkLWZvb3Rub3RlLWxpc3QnLCBgXHJcbjxzdHlsZT5cclxuXHJcbmQtZm9vdG5vdGUtbGlzdCB7XHJcbiAgY29udGFpbjogbGF5b3V0IHN0eWxlO1xyXG59XHJcblxyXG5kLWZvb3Rub3RlLWxpc3QgPiAqIHtcclxuICBncmlkLWNvbHVtbjogdGV4dDtcclxufVxyXG5cclxuZC1mb290bm90ZS1saXN0IGEuZm9vdG5vdGUtYmFja2xpbmsge1xyXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuMyk7XHJcbiAgcGFkZGluZy1sZWZ0OiAwLjVlbTtcclxufVxyXG5cclxuPC9zdHlsZT5cclxuXHJcbjxoMz5Gb290bm90ZXM8L2gzPlxyXG48b2w+PC9vbD5cclxuYCwgZmFsc2UpO1xyXG5cclxuICBjbGFzcyBGb290bm90ZUxpc3QgZXh0ZW5kcyBUJDYoSFRNTEVsZW1lbnQpIHtcclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHJcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCdvbCcpO1xyXG4gICAgICAvLyBmb290bm90ZXMgbGlzdCBpcyBpbml0aWFsbHkgaGlkZGVuXHJcbiAgICAgIHRoaXMucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAvLyBsb29rIHRocm91Z2ggZG9jdW1lbnQgYW5kIHJlZ2lzdGVyIGV4aXN0aW5nIGZvb3Rub3Rlc1xyXG4gICAgICAvLyBTdG9yZS5zdWJzY3JpYmVUbygnZm9vdG5vdGVzJywgKGZvb3Rub3RlKSA9PiB7XHJcbiAgICAgIC8vICAgdGhpcy5yZW5kZXJGb290bm90ZShmb290bm90ZSk7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8gYWNjZXB0IGluZGl2aWR1YWwgZm9vdG5vdGVzP1xyXG4gICAgc2V0IGZvb3Rub3Rlcyhmb290bm90ZXMpIHtcclxuICAgICAgdGhpcy5saXN0LmlubmVySFRNTCA9ICcnO1xyXG4gICAgICBpZiAoZm9vdG5vdGVzLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIGVuc3VyZSBmb290bm90ZSBsaXN0IGlzIHZpc2libGVcclxuICAgICAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZvb3Rub3RlIG9mIGZvb3Rub3Rlcykge1xyXG4gICAgICAgICAgLy8gY29uc3RydWN0IGFuZCBhcHBlbmQgbGlzdCBpdGVtIHRvIHNob3cgZm9vdG5vdGVcclxuICAgICAgICAgIGNvbnN0IGxpc3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcclxuICAgICAgICAgIGxpc3RJdGVtLmlkID0gZm9vdG5vdGUuaWQgKyAnLWxpc3RpbmcnO1xyXG4gICAgICAgICAgbGlzdEl0ZW0uaW5uZXJIVE1MID0gZm9vdG5vdGUuaW5uZXJIVE1MO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJhY2tsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgYmFja2xpbmsuc2V0QXR0cmlidXRlKCdjbGFzcycsICdmb290bm90ZS1iYWNrbGluaycpO1xyXG4gICAgICAgICAgYmFja2xpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX3NlbGYnKTtcclxuICAgICAgICAgIGJhY2tsaW5rLnRleHRDb250ZW50ID0gJ1vihqldJztcclxuICAgICAgICAgIGJhY2tsaW5rLmhyZWYgPSAnIycgKyBmb290bm90ZS5pZDtcclxuXHJcbiAgICAgICAgICBsaXN0SXRlbS5hcHBlbmRDaGlsZChiYWNrbGluayk7XHJcbiAgICAgICAgICB0aGlzLmxpc3QuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBlbnN1cmUgZm9vdG5vdGUgbGlzdCBpcyBpbnZpc2libGVcclxuICAgICAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCQ3ID0gVGVtcGxhdGUoJ2QtaG92ZXItYm94JywgYFxyXG48c3R5bGU+XHJcblxyXG46aG9zdCB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGxlZnQ6IDBweDtcclxuICB6LWluZGV4OiAxMDAwMDtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIHdoaXRlLXNwYWNlOiBub3JtYWxcclxufVxyXG5cclxuLmNvbnRhaW5lciB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHdpZHRoOiA3MDRweDtcclxuICBtYXgtd2lkdGg6IDEwMHZ3O1xyXG4gIG1hcmdpbjogMCBhdXRvO1xyXG59XHJcblxyXG4ucGFuZWwge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBmb250LXNpemU6IDFyZW07XHJcbiAgbGluZS1oZWlnaHQ6IDEuNWVtO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuOTUpO1xyXG4gIGJveC1zaGFkb3c6IDAgMCA3cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cclxuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcclxuICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xyXG59XHJcblxyXG48L3N0eWxlPlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lbFwiPlxyXG4gICAgPHNsb3Q+PC9zbG90PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuYCk7XHJcblxyXG4gIGNsYXNzIEhvdmVyQm94IGV4dGVuZHMgVCQ3KEhUTUxFbGVtZW50KSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RlbihlbGVtZW50KSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGVsZW1lbnQpXHJcbiAgICAgIHRoaXMuYmluZERpdkV2ZW50cyh0aGlzKTtcclxuICAgICAgdGhpcy5iaW5kVHJpZ2dlckV2ZW50cyhlbGVtZW50KTtcclxuICAgICAgLy8gdGhpcy5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmREaXZFdmVudHMoZWxlbWVudCkge1xyXG4gICAgICAvLyBGb3IgbWljZSwgc2FtZSBiZWhhdmlvciBhcyBob3ZlcmluZyBvbiBsaW5rc1xyXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkgdGhpcy5zaG93QXROb2RlKGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVvdXQoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5leHRlbmRUaW1lb3V0KDUwMCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBEb24ndCB0cmlnZ2VyIGJvZHkgdG91Y2hzdGFydCBldmVudCB3aGVuIHRvdWNoaW5nIHdpdGhpbiBib3hcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH0sIHtwYXNzaXZlOiB0cnVlfSk7XHJcbiAgICAgIC8vIENsb3NlIGJveCB3aGVuIHRvdWNoaW5nIG91dHNpZGUgYm94XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgfSwge3Bhc3NpdmU6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kVHJpZ2dlckV2ZW50cyhub2RlKSB7XHJcbiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBdE5vZGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVvdXQoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZXh0ZW5kVGltZW91dCgzMDApO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBdE5vZGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERvbid0IHRyaWdnZXIgYm9keSB0b3VjaHN0YXJ0IGV2ZW50IHdoZW4gdG91Y2hpbmcgbGlua1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9LCB7cGFzc2l2ZTogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3cocG9zaXRpb24pIHtcclxuICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgLy8gMTBweCBleHRyYSBvZmZzZXQgZnJvbSBlbGVtZW50XHJcbiAgICAgIHRoaXMuc3R5bGUudG9wID0gTWF0aC5yb3VuZChwb3NpdGlvblsxXSArIDEwKSArICdweCc7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0F0Tm9kZShub2RlKSB7XHJcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9vZmZzZXRUb3BcclxuICAgICAgY29uc3QgYmJveCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHRoaXMuc2hvdyhbbm9kZS5vZmZzZXRMZWZ0ICsgYmJveC53aWR0aCwgbm9kZS5vZmZzZXRUb3AgKyBiYm94LmhlaWdodF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGUoKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wVGltZW91dCgpIHtcclxuICAgICAgaWYgKHRoaXMudGltZW91dCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZW5kVGltZW91dCh0aW1lKSB7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVvdXQoKTtcclxuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgIH0sIHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuICAvL1xyXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gIC8vXHJcbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICAvL1xyXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG5cclxuICBjbGFzcyBUaXRsZSBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC10aXRsZSc7IH1cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCQ4ID0gVGVtcGxhdGUoJ2QtcmVmZXJlbmNlcycsIGBcclxuPHN0eWxlPlxyXG5kLXJlZmVyZW5jZXMge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcbjwvc3R5bGU+XHJcbmAsIGZhbHNlKTtcclxuXHJcbiAgY2xhc3MgUmVmZXJlbmNlcyBleHRlbmRzIFQkOChIVE1MRWxlbWVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuICAvL1xyXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gIC8vXHJcbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICAvL1xyXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG5cclxuICBjbGFzcyBUT0MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcblxyXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkLXRvYyc7IH1cclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgncHJlcmVuZGVyZWQnKSkge1xyXG4gICAgICAgIHdpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhcnRpY2xlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZC1hcnRpY2xlJyk7XHJcbiAgICAgICAgICBjb25zdCBoZWFkaW5ncyA9IGFydGljbGUucXVlcnlTZWxlY3RvckFsbCgnaDIsIGgzJyk7XHJcbiAgICAgICAgICByZW5kZXJUT0ModGhpcywgaGVhZGluZ3MpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW5kZXJUT0MoZWxlbWVudCwgaGVhZGluZ3MpIHtcclxuXHJcbiAgICBsZXQgVG9DID1gXHJcbiAgPHN0eWxlPlxyXG5cclxuICBkLXRvYyB7XHJcbiAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICB9XHJcblxyXG4gIGQtdG9jIHVsIHtcclxuICAgIHBhZGRpbmctbGVmdDogMDtcclxuICB9XHJcblxyXG4gIGQtdG9jIHVsID4gdWwge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyNHB4O1xyXG4gIH1cclxuXHJcbiAgZC10b2MgYSB7XHJcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gIH1cclxuXHJcbiAgPC9zdHlsZT5cclxuICA8bmF2IHJvbGU9XCJuYXZpZ2F0aW9uXCIgY2xhc3M9XCJ0YWJsZS1vZi1jb250ZW50c1wiPjwvbmF2PlxyXG4gIDxoMj5UYWJsZSBvZiBjb250ZW50czwvaDI+XHJcbiAgPHVsPmA7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbCBvZiBoZWFkaW5ncykge1xyXG4gICAgICAvLyBzaG91bGQgZWxlbWVudCBiZSBpbmNsdWRlZCBpbiBUT0M/XHJcbiAgICAgIGNvbnN0IGlzSW5UaXRsZSA9IGVsLnBhcmVudEVsZW1lbnQudGFnTmFtZSA9PSAnRC1USVRMRSc7XHJcbiAgICAgIGNvbnN0IGlzRXhjZXB0aW9uID0gZWwuZ2V0QXR0cmlidXRlKCduby10b2MnKTtcclxuICAgICAgaWYgKGlzSW5UaXRsZSB8fCBpc0V4Y2VwdGlvbikgY29udGludWU7XHJcbiAgICAgIC8vIGNyZWF0ZSBUT0MgZW50cnlcclxuICAgICAgY29uc3QgdGl0bGUgPSBlbC50ZXh0Q29udGVudDtcclxuICAgICAgY29uc3QgbGluayA9ICcjJyArIGVsLmdldEF0dHJpYnV0ZSgnaWQnKTtcclxuXHJcbiAgICAgIGxldCBuZXdMaW5lID0gJzxsaT4nICsgJzxhIGhyZWY9XCInICsgbGluayArICdcIj4nICsgdGl0bGUgKyAnPC9hPicgKyAnPC9saT4nO1xyXG4gICAgICBpZiAoZWwudGFnTmFtZSA9PSAnSDMnKSB7XHJcbiAgICAgICAgbmV3TGluZSA9ICc8dWw+JyArIG5ld0xpbmUgKyAnPC91bD4nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0xpbmUgKz0gJzxicj4nO1xyXG4gICAgICB9XHJcbiAgICAgIFRvQyArPSBuZXdMaW5lO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBUb0MgKz0gJzwvdWw+PC9uYXY+JztcclxuICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gVG9DO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG4gIC8vXHJcbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAgLy9cclxuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gIC8vXHJcbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcblxyXG4gIC8vIEZpZ3VyZVxyXG4gIC8vXHJcbiAgLy8gZC1maWd1cmUgcHJvdmlkZXMgYSBzdGF0ZS1tYWNoaW5lIG9mIHZpc2liaWxpdHkgZXZlbnRzOlxyXG4gIC8vXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsIG91dCBvZiB2aWV3XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgLy8gICAqZG8gd29yayBoZXJlKiAgICAgICAgfCAgICAgICAgICAgICAgICB8XHJcbiAgLy8gKy0tLS0tLS0tLS0tLS0tLS0rICAgICstKy0tLS0tLS0tLSsgICAgKy12LS0tLS0tLS0tK1xyXG4gIC8vIHwgcmVhZHkgICAgICAgICAgKy0tLS0+IG9uc2NyZWVuICB8ICAgIHwgb2Zmc2NyZWVuIHxcclxuICAvLyArLS0tLS0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLV4tKyAgICArLS0tLS0tLS0tKy0rXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHxcclxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tK1xyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbCBpbnRvIHZpZXdcclxuICAvL1xyXG5cclxuICBjbGFzcyBGaWd1cmUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcblxyXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkLWZpZ3VyZSc7IH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHJlYWR5UXVldWUoKSB7XHJcbiAgICAgIGlmICghRmlndXJlLl9yZWFkeVF1ZXVlKSB7XHJcbiAgICAgICAgRmlndXJlLl9yZWFkeVF1ZXVlID0gW107XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIEZpZ3VyZS5fcmVhZHlRdWV1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYWRkVG9SZWFkeVF1ZXVlKGZpZ3VyZSkge1xyXG4gICAgICBpZiAoRmlndXJlLnJlYWR5UXVldWUuaW5kZXhPZihmaWd1cmUpID09PSAtMSkge1xyXG4gICAgICAgIEZpZ3VyZS5yZWFkeVF1ZXVlLnB1c2goZmlndXJlKTtcclxuICAgICAgICBGaWd1cmUucnVuUmVhZHlRdWV1ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJ1blJlYWR5UXVldWUoKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiQ2hlY2tpbmcgdG8gcnVuIHJlYWR5UXVldWUsIGxlbmd0aDogXCIgKyBGaWd1cmUucmVhZHlRdWV1ZS5sZW5ndGggKyBcIiwgc2Nyb2xsaW5nOiBcIiArIEZpZ3VyZS5pc1Njcm9sbGluZyk7XHJcbiAgICAgIC8vIGlmIChGaWd1cmUuaXNTY3JvbGxpbmcpIHJldHVybjtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJSdW5uaW5nIHJlYWR5IFF1ZXVlXCIpO1xyXG4gICAgICBjb25zdCBmaWd1cmUgPSBGaWd1cmUucmVhZHlRdWV1ZVxyXG4gICAgICAgIC5zb3J0KChhLGIpID0+IGEuX3NlZW5PblNjcmVlbiAtIGIuX3NlZW5PblNjcmVlbiApXHJcbiAgICAgICAgLmZpbHRlcigoZmlndXJlKSA9PiAhZmlndXJlLl9yZWFkeSlcclxuICAgICAgICAucG9wKCk7XHJcbiAgICAgIGlmIChmaWd1cmUpIHtcclxuICAgICAgICBmaWd1cmUucmVhZHkoKTtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRmlndXJlLnJ1blJlYWR5UXVldWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG4gICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICB0aGlzLl9yZWFkeSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9vbnNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9vZmZzY3JlZW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICB0aGlzLmxvYWRzV2hpbGVTY3JvbGxpbmcgPSB0aGlzLmhhc0F0dHJpYnV0ZSgnbG9hZHNXaGlsZVNjcm9sbGluZycpO1xyXG4gICAgICBGaWd1cmUubWFyZ2luT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcclxuICAgICAgRmlndXJlLmRpcmVjdE9ic2VydmVyLm9ic2VydmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgIEZpZ3VyZS5tYXJnaW5PYnNlcnZlci51bm9ic2VydmUodGhpcyk7XHJcbiAgICAgIEZpZ3VyZS5kaXJlY3RPYnNlcnZlci51bm9ic2VydmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2UgdXNlIHR3byBzZXBhcmF0ZSBvYnNlcnZlcnM6XHJcbiAgICAvLyBPbmUgd2l0aCBhbiBleHRyYSAxMDAwcHggbWFyZ2luIHRvIHdhcm4gaWYgdGhlIHZpZXdwb2ludCBnZXRzIGNsb3NlLFxyXG4gICAgLy8gQW5kIG9uZSBmb3IgdGhlIGFjdHVhbCBvbi9vZmYgc2NyZWVuIGV2ZW50c1xyXG5cclxuICAgIHN0YXRpYyBnZXQgbWFyZ2luT2JzZXJ2ZXIoKSB7XHJcbiAgICAgIGlmICghRmlndXJlLl9tYXJnaW5PYnNlcnZlcikge1xyXG4gICAgICAgIC8vIGlmICghKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSkge1xyXG4gICAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdubyBpbnRlcnNjZXRpb25vYmJzZXJ2ZXIhJyk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IE1hdGguZmxvb3IoMiAqIHZpZXdwb3J0SGVpZ2h0KTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge3Jvb3RNYXJnaW46IG1hcmdpbiArICdweCAwcHggJyArIG1hcmdpbiArICdweCAwcHgnLCB0aHJlc2hvbGQ6IDAuMDF9O1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gRmlndXJlLmRpZE9ic2VydmVNYXJnaW5JbnRlcnNlY3Rpb247XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xyXG4gICAgICAgIEZpZ3VyZS5fbWFyZ2luT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gRmlndXJlLl9tYXJnaW5PYnNlcnZlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGlkT2JzZXJ2ZU1hcmdpbkludGVyc2VjdGlvbihlbnRyaWVzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xyXG4gICAgICAgIGNvbnN0IGZpZ3VyZSA9IGVudHJ5LnRhcmdldDtcclxuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgIWZpZ3VyZS5fcmVhZHkpIHtcclxuICAgICAgICAgIEZpZ3VyZS5hZGRUb1JlYWR5UXVldWUoZmlndXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGRpcmVjdE9ic2VydmVyKCkge1xyXG4gICAgICBpZiAoIUZpZ3VyZS5fZGlyZWN0T2JzZXJ2ZXIpIHtcclxuICAgICAgICBGaWd1cmUuX2RpcmVjdE9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxyXG4gICAgICAgICAgRmlndXJlLmRpZE9ic2VydmVEaXJlY3RJbnRlcnNlY3Rpb24sIHtcclxuICAgICAgICAgICAgcm9vdE1hcmdpbjogJzBweCcsIHRocmVzaG9sZDogWzAsIDEuMF0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gRmlndXJlLl9kaXJlY3RPYnNlcnZlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGlkT2JzZXJ2ZURpcmVjdEludGVyc2VjdGlvbihlbnRyaWVzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xyXG4gICAgICAgIGNvbnN0IGZpZ3VyZSA9IGVudHJ5LnRhcmdldDtcclxuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcclxuICAgICAgICAgIGZpZ3VyZS5fc2Vlbk9uU2NyZWVuID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIC8vIGlmICghZmlndXJlLl9yZWFkeSkgeyBmaWd1cmUucmVhZHkoKTsgfVxyXG4gICAgICAgICAgaWYgKGZpZ3VyZS5fb2Zmc2NyZWVuKSB7IGZpZ3VyZS5vbnNjcmVlbigpOyB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChmaWd1cmUuX29uc2NyZWVuKSB7IGZpZ3VyZS5vZmZzY3JlZW4oKTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgdGhhdCByZWdpc3RlcmVkIGxhdGUsIHRvbzpcclxuXHJcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcclxuICAgICAgc3VwZXIuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcclxuICAgICAgLy8gaWYgd2UgaGFkIGFscmVhZHkgZGlzcGF0Y2hlZCBzb21ldGhpbmcgd2hpbGUgcHJlc3VtaW5nbHkgbm8gb25lIHdhcyBsaXN0ZW5pbmcsIHdlIGRvIHNvIGFnYWluXHJcbiAgICAgIC8vIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChldmVudE5hbWUgPT09ICdyZWFkeScpIHtcclxuICAgICAgICBpZiAoRmlndXJlLnJlYWR5UXVldWUuaW5kZXhPZih0aGlzKSAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgICBGaWd1cmUucnVuUmVhZHlRdWV1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZXZlbnROYW1lID09PSAnb25zY3JlZW4nKSB7XHJcbiAgICAgICAgdGhpcy5vbnNjcmVlbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3VzdG9tIEV2ZW50c1xyXG5cclxuICAgIHJlYWR5KCkge1xyXG4gICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XHJcbiAgICAgIEZpZ3VyZS5tYXJnaW5PYnNlcnZlci51bm9ic2VydmUodGhpcyk7XHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWFkeScpO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uc2NyZWVuKCkge1xyXG4gICAgICB0aGlzLl9vbnNjcmVlbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuX29mZnNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25zY3JlZW4nKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBvZmZzY3JlZW4oKSB7XHJcbiAgICAgIHRoaXMuX29uc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX29mZnNjcmVlbiA9IHRydWU7XHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvZmZzY3JlZW4nKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuXHJcbiAgICBGaWd1cmUuaXNTY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgIGxldCB0aW1lb3V0O1xyXG4gICAgY29uc3QgcmVzZXRUaW1lciA9ICgpID0+IHtcclxuICAgICAgRmlndXJlLmlzU2Nyb2xsaW5nID0gdHJ1ZTtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgRmlndXJlLmlzU2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgICAgICAgRmlndXJlLnJ1blJlYWR5UXVldWUoKTtcclxuICAgICAgfSwgNTAwKTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgcmVzZXRUaW1lciwgdHJ1ZSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICAvLyBUaGlzIG92ZXJsYXkgaXMgbm90IHNlY3VyZS5cclxuICAvLyBJdCBpcyBvbmx5IG1lYW50IGFzIGEgc29jaWFsIGRldGVycmVudC5cclxuXHJcbiAgY29uc3QgcHJvZHVjdGlvbkhvc3RuYW1lID0gJ2Rpc3RpbGwucHViJztcclxuICBjb25zdCBUJDkgPSBUZW1wbGF0ZSgnZC1pbnRlcnN0aXRpYWwnLCBgXHJcbjxzdHlsZT5cclxuXHJcbi5vdmVybGF5IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xyXG5cclxuICBvcGFjaXR5OiAxO1xyXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XHJcblxyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1mbG93OiBjb2x1bW47XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgei1pbmRleDogMjE0NzQ4MzY0NyAvKiBNYXhJbnQzMiAqL1xyXG5cclxufVxyXG5cclxuLmNvbnRhaW5lciB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gIG1hcmdpbi1yaWdodDogYXV0bztcclxuICBtYXgtd2lkdGg6IDQyMHB4O1xyXG4gIHBhZGRpbmc6IDJlbTtcclxufVxyXG5cclxuaDEge1xyXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogaHNsKDAsMTAwJSw0MCUpO1xyXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiBoc2woMCwxMDAlLDQwJSk7XHJcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjVlbTtcclxufVxyXG5cclxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcclxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xyXG4gIGFwcGVhcmFuY2U6IG5vbmU7XHJcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xyXG4gIC1tb3otYm94LXNoYWRvdzogbm9uZTtcclxuICBib3gtc2hhZG93OiBub25lO1xyXG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogbm9uZTtcclxuICAtbW96LWJvcmRlci1yYWRpdXM6IG5vbmU7XHJcbiAgLW1zLWJvcmRlci1yYWRpdXM6IG5vbmU7XHJcbiAgLW8tYm9yZGVyLXJhZGl1czogbm9uZTtcclxuICBib3JkZXItcmFkaXVzOiBub25lO1xyXG4gIG91dGxpbmU6IG5vbmU7XHJcblxyXG4gIGZvbnQtc2l6ZTogMThweDtcclxuICBiYWNrZ3JvdW5kOiBub25lO1xyXG4gIHdpZHRoOiAyNSU7XHJcbiAgcGFkZGluZzogMTBweDtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4ICM5OTk7XHJcbiAgdHJhbnNpdGlvbjogYm9yZGVyIC4zcztcclxufVxyXG5cclxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdOmZvY3VzIHtcclxuICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzMzMztcclxufVxyXG5cclxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLndyb25nIHtcclxuICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggaHNsKDAsMTAwJSw0MCUpO1xyXG59XHJcblxyXG5wIHNtYWxsIHtcclxuICBjb2xvcjogIzg4ODtcclxufVxyXG5cclxuLmxvZ28ge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBmb250LXNpemU6IDEuNWVtO1xyXG4gIG1hcmdpbi1ib3R0b206IDNlbTtcclxufVxyXG5cclxuLmxvZ28gc3ZnIHtcclxuICB3aWR0aDogMzZweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgdG9wOiA2cHg7XHJcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XHJcbn1cclxuXHJcbi5sb2dvIHN2ZyBwYXRoIHtcclxuICBmaWxsOiBub25lO1xyXG4gIHN0cm9rZTogYmxhY2s7XHJcbiAgc3Ryb2tlLXdpZHRoOiAycHg7XHJcbn1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG48ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgIDxoMT5UaGlzIGFydGljbGUgaXMgaW4gcmV2aWV3LjwvaDE+XHJcbiAgICA8cD5EbyBub3Qgc2hhcmUgdGhpcyBVUkwgb3IgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJ0aWNsZS4gVGhhbmsgeW91ITwvcD5cclxuICAgIDxpbnB1dCBpZD1cImludGVyc3RpdGlhbC1wYXNzd29yZC1pbnB1dFwiIHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIGF1dG9mb2N1cy8+XHJcbiAgICA8cD48c21hbGw+RW50ZXIgdGhlIHBhc3N3b3JkIHdlIHNoYXJlZCB3aXRoIHlvdSBhcyBwYXJ0IG9mIHRoZSByZXZpZXcgcHJvY2VzcyB0byB2aWV3IHRoZSBhcnRpY2xlLjwvc21hbGw+PC9wPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuYCk7XHJcblxyXG4gIGNsYXNzIEludGVyc3RpdGlhbCBleHRlbmRzIFQkOShIVE1MRWxlbWVudCkge1xyXG5cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICBpZiAodGhpcy5zaG91bGRSZW1vdmVTZWxmKCkpIHtcclxuICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGFzc3dvcmRJbnB1dCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjaW50ZXJzdGl0aWFsLXBhc3N3b3JkLWlucHV0Jyk7XHJcbiAgICAgICAgcGFzc3dvcmRJbnB1dC5vbmlucHV0ID0gKGV2ZW50KSA9PiB0aGlzLnBhc3N3b3JkQ2hhbmdlZChldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXNzd29yZENoYW5nZWQoZXZlbnQpIHtcclxuICAgICAgY29uc3QgZW50ZXJlZCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgaWYgKGVudGVyZWQgPT09IHRoaXMucGFzc3dvcmQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ29ycmVjdCBwYXNzd29yZCBlbnRlcmVkLicpO1xyXG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTtcclxuICAgICAgICBpZiAodHlwZW9mKFN0b3JhZ2UpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1NhdmVkIHRoYXQgY29ycmVjdCBwYXNzd29yZCB3YXMgZW50ZXJlZC4nKTtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSWRlbnRpZmllcigpLCAndHJ1ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZFJlbW92ZVNlbGYoKSB7XHJcbiAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGluIHByb2R1Y3Rpb25cclxuICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09IHByb2R1Y3Rpb25Ib3N0bmFtZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignSW50ZXJzdGl0aWFsIGZvdW5kIG9uIHByb2R1Y3Rpb24sIGhpZGluZyBpdC4nKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNob3VsZCBvbmx5IGhhdmUgdG8gZW50ZXIgcGFzc3dvcmQgb25jZVxyXG4gICAgICBpZiAodHlwZW9mKFN0b3JhZ2UpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUlkZW50aWZpZXIoKSkgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0xvYWRlZCB0aGF0IGNvcnJlY3QgcGFzc3dvcmQgd2FzIGVudGVyZWQgYmVmb3JlOyBza2lwcGluZyBpbnRlcnN0aXRpYWwuJyk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gb3RoZXJ3aXNlLCBsZWF2ZSB2aXNpYmxlXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsb2NhbFN0b3JhZ2VJZGVudGlmaWVyKCkge1xyXG4gICAgICBjb25zdCBwcmVmaXggPSAnZGlzdGlsbC1kcmFmdHMnO1xyXG4gICAgICBjb25zdCBzdWZmaXggPSAnaW50ZXJzdGl0aWFsLXBhc3N3b3JkLWNvcnJlY3QnO1xyXG4gICAgICByZXR1cm4gcHJlZml4ICsgKHdpbmRvdyA/IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA6ICctJykgKyBzdWZmaXhcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xyXG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYmlzZWN0b3IoY29tcGFyZSkge1xyXG4gICAgaWYgKGNvbXBhcmUubGVuZ3RoID09PSAxKSBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihjb21wYXJlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xyXG4gICAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XHJcbiAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcclxuICAgICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xyXG4gICAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcclxuICAgICAgICAgIGVsc2UgaGkgPSBtaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsbztcclxuICAgICAgfSxcclxuICAgICAgcmlnaHQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xyXG4gICAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XHJcbiAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcclxuICAgICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xyXG4gICAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0gbWlkO1xyXG4gICAgICAgICAgZWxzZSBsbyA9IG1pZCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsbztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoZikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQsIHgpIHtcclxuICAgICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB2YXIgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcclxuICB2YXIgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XHJcblxyXG4gIGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XHJcbiAgICBzdGFydCA9ICtzdGFydCwgc3RvcCA9ICtzdG9wLCBzdGVwID0gKG4gPSBhcmd1bWVudHMubGVuZ3RoKSA8IDIgPyAoc3RvcCA9IHN0YXJ0LCBzdGFydCA9IDAsIDEpIDogbiA8IDMgPyAxIDogK3N0ZXA7XHJcblxyXG4gICAgdmFyIGkgPSAtMSxcclxuICAgICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcclxuICAgICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICB3aGlsZSAoKytpIDwgbikge1xyXG4gICAgICByYW5nZVtpXSA9IHN0YXJ0ICsgaSAqIHN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhbmdlO1xyXG4gIH1cclxuXHJcbiAgdmFyIGUxMCA9IE1hdGguc3FydCg1MCksXHJcbiAgICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcclxuICAgICAgZTIgPSBNYXRoLnNxcnQoMik7XHJcblxyXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xyXG4gICAgdmFyIHJldmVyc2UsXHJcbiAgICAgICAgaSA9IC0xLFxyXG4gICAgICAgIG4sXHJcbiAgICAgICAgdGlja3MsXHJcbiAgICAgICAgc3RlcDtcclxuXHJcbiAgICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcclxuICAgIGlmIChzdGFydCA9PT0gc3RvcCAmJiBjb3VudCA+IDApIHJldHVybiBbc3RhcnRdO1xyXG4gICAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcclxuICAgIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XHJcblxyXG4gICAgaWYgKHN0ZXAgPiAwKSB7XHJcbiAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0IC8gc3RlcCk7XHJcbiAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgLyBzdGVwKTtcclxuICAgICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XHJcbiAgICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCArIGkpICogc3RlcDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xyXG4gICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgKiBzdGVwKTtcclxuICAgICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdGFydCAtIHN0b3AgKyAxKSk7XHJcbiAgICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmV2ZXJzZSkgdGlja3MucmV2ZXJzZSgpO1xyXG5cclxuICAgIHJldHVybiB0aWNrcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XHJcbiAgICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxyXG4gICAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXHJcbiAgICAgICAgZXJyb3IgPSBzdGVwIC8gTWF0aC5wb3coMTAsIHBvd2VyKTtcclxuICAgIHJldHVybiBwb3dlciA+PSAwXHJcbiAgICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcclxuICAgICAgICA6IC1NYXRoLnBvdygxMCwgLXBvd2VyKSAvIChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XHJcbiAgICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxyXG4gICAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXHJcbiAgICAgICAgZXJyb3IgPSBzdGVwMCAvIHN0ZXAxO1xyXG4gICAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XHJcbiAgICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcclxuICAgIGVsc2UgaWYgKGVycm9yID49IGUyKSBzdGVwMSAqPSAyO1xyXG4gICAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcclxuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICBjYXNlIDA6IGJyZWFrO1xyXG4gICAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVmaW5lKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcclxuICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xyXG4gICAgcHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBleHRlbmQocGFyZW50LCBkZWZpbml0aW9uKSB7XHJcbiAgICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcclxuICAgIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcclxuICAgIHJldHVybiBwcm90b3R5cGU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBDb2xvcigpIHt9XHJcblxyXG4gIHZhciBkYXJrZXIgPSAwLjc7XHJcbiAgdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcclxuXHJcbiAgdmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLFxyXG4gICAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxyXG4gICAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcclxuICAgICAgcmVIZXggPSAvXiMoWzAtOWEtZl17Myw4fSkkLyxcclxuICAgICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXHJcbiAgICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxyXG4gICAgICByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZUksIHJlSSwgcmVJLCByZU5dICsgXCJcXFxcKSRcIiksXHJcbiAgICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcclxuICAgICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXHJcbiAgICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiICsgW3JlTiwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKTtcclxuXHJcbiAgdmFyIG5hbWVkID0ge1xyXG4gICAgYWxpY2VibHVlOiAweGYwZjhmZixcclxuICAgIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXHJcbiAgICBhcXVhOiAweDAwZmZmZixcclxuICAgIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxyXG4gICAgYXp1cmU6IDB4ZjBmZmZmLFxyXG4gICAgYmVpZ2U6IDB4ZjVmNWRjLFxyXG4gICAgYmlzcXVlOiAweGZmZTRjNCxcclxuICAgIGJsYWNrOiAweDAwMDAwMCxcclxuICAgIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcclxuICAgIGJsdWU6IDB4MDAwMGZmLFxyXG4gICAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXHJcbiAgICBicm93bjogMHhhNTJhMmEsXHJcbiAgICBidXJseXdvb2Q6IDB4ZGViODg3LFxyXG4gICAgY2FkZXRibHVlOiAweDVmOWVhMCxcclxuICAgIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxyXG4gICAgY2hvY29sYXRlOiAweGQyNjkxZSxcclxuICAgIGNvcmFsOiAweGZmN2Y1MCxcclxuICAgIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcclxuICAgIGNvcm5zaWxrOiAweGZmZjhkYyxcclxuICAgIGNyaW1zb246IDB4ZGMxNDNjLFxyXG4gICAgY3lhbjogMHgwMGZmZmYsXHJcbiAgICBkYXJrYmx1ZTogMHgwMDAwOGIsXHJcbiAgICBkYXJrY3lhbjogMHgwMDhiOGIsXHJcbiAgICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcclxuICAgIGRhcmtncmF5OiAweGE5YTlhOSxcclxuICAgIGRhcmtncmVlbjogMHgwMDY0MDAsXHJcbiAgICBkYXJrZ3JleTogMHhhOWE5YTksXHJcbiAgICBkYXJra2hha2k6IDB4YmRiNzZiLFxyXG4gICAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxyXG4gICAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxyXG4gICAgZGFya29yYW5nZTogMHhmZjhjMDAsXHJcbiAgICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcclxuICAgIGRhcmtyZWQ6IDB4OGIwMDAwLFxyXG4gICAgZGFya3NhbG1vbjogMHhlOTk2N2EsXHJcbiAgICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxyXG4gICAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXHJcbiAgICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcclxuICAgIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxyXG4gICAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXHJcbiAgICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcclxuICAgIGRlZXBwaW5rOiAweGZmMTQ5MyxcclxuICAgIGRlZXBza3libHVlOiAweDAwYmZmZixcclxuICAgIGRpbWdyYXk6IDB4Njk2OTY5LFxyXG4gICAgZGltZ3JleTogMHg2OTY5NjksXHJcbiAgICBkb2RnZXJibHVlOiAweDFlOTBmZixcclxuICAgIGZpcmVicmljazogMHhiMjIyMjIsXHJcbiAgICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXHJcbiAgICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXHJcbiAgICBmdWNoc2lhOiAweGZmMDBmZixcclxuICAgIGdhaW5zYm9ybzogMHhkY2RjZGMsXHJcbiAgICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcclxuICAgIGdvbGQ6IDB4ZmZkNzAwLFxyXG4gICAgZ29sZGVucm9kOiAweGRhYTUyMCxcclxuICAgIGdyYXk6IDB4ODA4MDgwLFxyXG4gICAgZ3JlZW46IDB4MDA4MDAwLFxyXG4gICAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxyXG4gICAgZ3JleTogMHg4MDgwODAsXHJcbiAgICBob25leWRldzogMHhmMGZmZjAsXHJcbiAgICBob3RwaW5rOiAweGZmNjliNCxcclxuICAgIGluZGlhbnJlZDogMHhjZDVjNWMsXHJcbiAgICBpbmRpZ286IDB4NGIwMDgyLFxyXG4gICAgaXZvcnk6IDB4ZmZmZmYwLFxyXG4gICAga2hha2k6IDB4ZjBlNjhjLFxyXG4gICAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxyXG4gICAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXHJcbiAgICBsYXduZ3JlZW46IDB4N2NmYzAwLFxyXG4gICAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcclxuICAgIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXHJcbiAgICBsaWdodGNvcmFsOiAweGYwODA4MCxcclxuICAgIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXHJcbiAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXHJcbiAgICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxyXG4gICAgbGlnaHRncmVlbjogMHg5MGVlOTAsXHJcbiAgICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxyXG4gICAgbGlnaHRwaW5rOiAweGZmYjZjMSxcclxuICAgIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcclxuICAgIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxyXG4gICAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcclxuICAgIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcclxuICAgIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcclxuICAgIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcclxuICAgIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcclxuICAgIGxpbWU6IDB4MDBmZjAwLFxyXG4gICAgbGltZWdyZWVuOiAweDMyY2QzMixcclxuICAgIGxpbmVuOiAweGZhZjBlNixcclxuICAgIG1hZ2VudGE6IDB4ZmYwMGZmLFxyXG4gICAgbWFyb29uOiAweDgwMDAwMCxcclxuICAgIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxyXG4gICAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXHJcbiAgICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxyXG4gICAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcclxuICAgIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcclxuICAgIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXHJcbiAgICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXHJcbiAgICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxyXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcclxuICAgIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXHJcbiAgICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxyXG4gICAgbWlzdHlyb3NlOiAweGZmZTRlMSxcclxuICAgIG1vY2Nhc2luOiAweGZmZTRiNSxcclxuICAgIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcclxuICAgIG5hdnk6IDB4MDAwMDgwLFxyXG4gICAgb2xkbGFjZTogMHhmZGY1ZTYsXHJcbiAgICBvbGl2ZTogMHg4MDgwMDAsXHJcbiAgICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxyXG4gICAgb3JhbmdlOiAweGZmYTUwMCxcclxuICAgIG9yYW5nZXJlZDogMHhmZjQ1MDAsXHJcbiAgICBvcmNoaWQ6IDB4ZGE3MGQ2LFxyXG4gICAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXHJcbiAgICBwYWxlZ3JlZW46IDB4OThmYjk4LFxyXG4gICAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXHJcbiAgICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcclxuICAgIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxyXG4gICAgcGVhY2hwdWZmOiAweGZmZGFiOSxcclxuICAgIHBlcnU6IDB4Y2Q4NTNmLFxyXG4gICAgcGluazogMHhmZmMwY2IsXHJcbiAgICBwbHVtOiAweGRkYTBkZCxcclxuICAgIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxyXG4gICAgcHVycGxlOiAweDgwMDA4MCxcclxuICAgIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxyXG4gICAgcmVkOiAweGZmMDAwMCxcclxuICAgIHJvc3licm93bjogMHhiYzhmOGYsXHJcbiAgICByb3lhbGJsdWU6IDB4NDE2OWUxLFxyXG4gICAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxyXG4gICAgc2FsbW9uOiAweGZhODA3MixcclxuICAgIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxyXG4gICAgc2VhZ3JlZW46IDB4MmU4YjU3LFxyXG4gICAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxyXG4gICAgc2llbm5hOiAweGEwNTIyZCxcclxuICAgIHNpbHZlcjogMHhjMGMwYzAsXHJcbiAgICBza3libHVlOiAweDg3Y2VlYixcclxuICAgIHNsYXRlYmx1ZTogMHg2YTVhY2QsXHJcbiAgICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxyXG4gICAgc2xhdGVncmV5OiAweDcwODA5MCxcclxuICAgIHNub3c6IDB4ZmZmYWZhLFxyXG4gICAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxyXG4gICAgc3RlZWxibHVlOiAweDQ2ODJiNCxcclxuICAgIHRhbjogMHhkMmI0OGMsXHJcbiAgICB0ZWFsOiAweDAwODA4MCxcclxuICAgIHRoaXN0bGU6IDB4ZDhiZmQ4LFxyXG4gICAgdG9tYXRvOiAweGZmNjM0NyxcclxuICAgIHR1cnF1b2lzZTogMHg0MGUwZDAsXHJcbiAgICB2aW9sZXQ6IDB4ZWU4MmVlLFxyXG4gICAgd2hlYXQ6IDB4ZjVkZWIzLFxyXG4gICAgd2hpdGU6IDB4ZmZmZmZmLFxyXG4gICAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXHJcbiAgICB5ZWxsb3c6IDB4ZmZmZjAwLFxyXG4gICAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXHJcbiAgfTtcclxuXHJcbiAgZGVmaW5lKENvbG9yLCBjb2xvciwge1xyXG4gICAgY29weTogZnVuY3Rpb24oY2hhbm5lbHMpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsIHRoaXMsIGNoYW5uZWxzKTtcclxuICAgIH0sXHJcbiAgICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XHJcbiAgICB9LFxyXG4gICAgaGV4OiBjb2xvcl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXHJcbiAgICBmb3JtYXRIZXg6IGNvbG9yX2Zvcm1hdEhleCxcclxuICAgIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxyXG4gICAgZm9ybWF0UmdiOiBjb2xvcl9mb3JtYXRSZ2IsXHJcbiAgICB0b1N0cmluZzogY29sb3JfZm9ybWF0UmdiXHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcclxuICAgIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xyXG4gICAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb2xvcl9mb3JtYXRSZ2IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xyXG4gICAgdmFyIG0sIGw7XHJcbiAgICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxyXG4gICAgICAgIDogbCA9PT0gMyA/IG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkgLy8gI2YwMFxyXG4gICAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXHJcbiAgICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXHJcbiAgICAgICAgOiBudWxsKSAvLyBpbnZhbGlkIGhleFxyXG4gICAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcclxuICAgICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXHJcbiAgICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXHJcbiAgICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcclxuICAgICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxyXG4gICAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcclxuICAgICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXHJcbiAgICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcclxuICAgICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZ2JuKG4pIHtcclxuICAgIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcclxuICAgIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcclxuICAgIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XHJcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XHJcbiAgICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xyXG4gICAgbyA9IG8ucmdiKCk7XHJcbiAgICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcclxuICAgIHRoaXMuciA9ICtyO1xyXG4gICAgdGhpcy5nID0gK2c7XHJcbiAgICB0aGlzLmIgPSArYjtcclxuICAgIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xyXG4gIH1cclxuXHJcbiAgZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcclxuICAgIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcclxuICAgICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcclxuICAgIH0sXHJcbiAgICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XHJcbiAgICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgcmdiOiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gKC0wLjUgPD0gdGhpcy5yICYmIHRoaXMuciA8IDI1NS41KVxyXG4gICAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxyXG4gICAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5iICYmIHRoaXMuYiA8IDI1NS41KVxyXG4gICAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcclxuICAgIH0sXHJcbiAgICBoZXg6IHJnYl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXHJcbiAgICBmb3JtYXRIZXg6IHJnYl9mb3JtYXRIZXgsXHJcbiAgICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXHJcbiAgICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxyXG4gIH0pKTtcclxuXHJcbiAgZnVuY3Rpb24gcmdiX2Zvcm1hdEhleCgpIHtcclxuICAgIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJnYl9mb3JtYXRSZ2IoKSB7XHJcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcclxuICAgIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxyXG4gICAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMucikgfHwgMCkpICsgXCIsIFwiXHJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcclxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxyXG4gICAgICAgICsgKGEgPT09IDEgPyBcIilcIiA6IFwiLCBcIiArIGEgKyBcIilcIik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoZXgodmFsdWUpIHtcclxuICAgIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XHJcbiAgICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaHNsYShoLCBzLCBsLCBhKSB7XHJcbiAgICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XHJcbiAgICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcclxuICAgIGVsc2UgaWYgKHMgPD0gMCkgaCA9IE5hTjtcclxuICAgIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XHJcbiAgICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcclxuICAgIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcclxuICAgIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XHJcbiAgICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XHJcbiAgICBvID0gby5yZ2IoKTtcclxuICAgIHZhciByID0gby5yIC8gMjU1LFxyXG4gICAgICAgIGcgPSBvLmcgLyAyNTUsXHJcbiAgICAgICAgYiA9IG8uYiAvIDI1NSxcclxuICAgICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcclxuICAgICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcclxuICAgICAgICBoID0gTmFOLFxyXG4gICAgICAgIHMgPSBtYXggLSBtaW4sXHJcbiAgICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcclxuICAgIGlmIChzKSB7XHJcbiAgICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xyXG4gICAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XHJcbiAgICAgIGVsc2UgaCA9IChyIC0gZykgLyBzICsgNDtcclxuICAgICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcclxuICAgICAgaCAqPSA2MDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgby5vcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XHJcbiAgICB0aGlzLmggPSAraDtcclxuICAgIHRoaXMucyA9ICtzO1xyXG4gICAgdGhpcy5sID0gK2w7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XHJcbiAgICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XHJcbiAgICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIGRhcmtlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcclxuICAgICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgcmdiOiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXHJcbiAgICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXHJcbiAgICAgICAgICBsID0gdGhpcy5sLFxyXG4gICAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcclxuICAgICAgICAgIG0xID0gMiAqIGwgLSBtMjtcclxuICAgICAgcmV0dXJuIG5ldyBSZ2IoXHJcbiAgICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxyXG4gICAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcclxuICAgICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcclxuICAgICAgICB0aGlzLm9wYWNpdHlcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcclxuICAgICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcclxuICAgICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XHJcbiAgICB9LFxyXG4gICAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XHJcbiAgICAgIHJldHVybiAoYSA9PT0gMSA/IFwiaHNsKFwiIDogXCJoc2xhKFwiKVxyXG4gICAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXHJcbiAgICAgICAgICArICh0aGlzLnMgfHwgMCkgKiAxMDAgKyBcIiUsIFwiXHJcbiAgICAgICAgICArICh0aGlzLmwgfHwgMCkgKiAxMDAgKyBcIiVcIlxyXG4gICAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIC8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cclxuICBmdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xyXG4gICAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxyXG4gICAgICAgIDogaCA8IDE4MCA/IG0yXHJcbiAgICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxyXG4gICAgICAgIDogbTEpICogMjU1O1xyXG4gIH1cclxuXHJcbiAgdmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xyXG4gIHZhciByYWQyZGVnID0gMTgwIC8gTWF0aC5QSTtcclxuXHJcbiAgLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxyXG4gIHZhciBLID0gMTgsXHJcbiAgICAgIFhuID0gMC45NjQyMixcclxuICAgICAgWW4gPSAxLFxyXG4gICAgICBabiA9IDAuODI1MjEsXHJcbiAgICAgIHQwID0gNCAvIDI5LFxyXG4gICAgICB0MSA9IDYgLyAyOSxcclxuICAgICAgdDIgPSAzICogdDEgKiB0MSxcclxuICAgICAgdDMgPSB0MSAqIHQxICogdDE7XHJcblxyXG4gIGZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7XHJcbiAgICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIGhjbDJsYWIobyk7XHJcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XHJcbiAgICB2YXIgciA9IHJnYjJscmdiKG8uciksXHJcbiAgICAgICAgZyA9IHJnYjJscmdiKG8uZyksXHJcbiAgICAgICAgYiA9IHJnYjJscmdiKG8uYiksXHJcbiAgICAgICAgeSA9IHh5ejJsYWIoKDAuMjIyNTA0NSAqIHIgKyAwLjcxNjg3ODYgKiBnICsgMC4wNjA2MTY5ICogYikgLyBZbiksIHgsIHo7XHJcbiAgICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xyXG4gICAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcclxuICAgICAgeiA9IHh5ejJsYWIoKDAuMDEzOTMyMiAqIHIgKyAwLjA5NzEwNDUgKiBnICsgMC43MTQxNzMzICogYikgLyBabik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xyXG4gICAgdGhpcy5sID0gK2w7XHJcbiAgICB0aGlzLmEgPSArYTtcclxuICAgIHRoaXMuYiA9ICtiO1xyXG4gICAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xyXG4gICAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIGRhcmtlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgcmdiOiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxyXG4gICAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcclxuICAgICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7XHJcbiAgICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XHJcbiAgICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XHJcbiAgICAgIHogPSBabiAqIGxhYjJ4eXooeik7XHJcbiAgICAgIHJldHVybiBuZXcgUmdiKFxyXG4gICAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxyXG4gICAgICAgIGxyZ2IycmdiKC0wLjk3ODc2ODQgKiB4ICsgMS45MTYxNDE1ICogeSArIDAuMDMzNDU0MCAqIHopLFxyXG4gICAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxyXG4gICAgICAgIHRoaXMub3BhY2l0eVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgZnVuY3Rpb24geHl6MmxhYih0KSB7XHJcbiAgICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsYWIyeHl6KHQpIHtcclxuICAgIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbHJnYjJyZ2IoeCkge1xyXG4gICAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZ2IybHJnYih4KSB7XHJcbiAgICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XHJcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XHJcbiAgICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwIDwgby5sICYmIG8ubCA8IDEwMCA/IDAgOiBOYU4sIG8ubCwgby5vcGFjaXR5KTtcclxuICAgIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xyXG4gICAgcmV0dXJuIG5ldyBIY2woaCA8IDAgPyBoICsgMzYwIDogaCwgTWF0aC5zcXJ0KG8uYSAqIG8uYSArIG8uYiAqIG8uYiksIG8ubCwgby5vcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XHJcbiAgICB0aGlzLmggPSAraDtcclxuICAgIHRoaXMuYyA9ICtjO1xyXG4gICAgdGhpcy5sID0gK2w7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhjbDJsYWIobykge1xyXG4gICAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcclxuICAgIHZhciBoID0gby5oICogZGVnMnJhZDtcclxuICAgIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcclxuICAgIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcclxuICAgIH0sXHJcbiAgICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIHJnYjogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBoY2wybGFiKHRoaXMpLnJnYigpO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgdmFyIEEgPSAtMC4xNDg2MSxcclxuICAgICAgQiA9ICsxLjc4Mjc3LFxyXG4gICAgICBDID0gLTAuMjkyMjcsXHJcbiAgICAgIEQgPSAtMC45MDY0OSxcclxuICAgICAgRSA9ICsxLjk3Mjk0LFxyXG4gICAgICBFRCA9IEUgKiBELFxyXG4gICAgICBFQiA9IEUgKiBCLFxyXG4gICAgICBCQ19EQSA9IEIgKiBDIC0gRCAqIEE7XHJcblxyXG4gIGZ1bmN0aW9uIGN1YmVoZWxpeENvbnZlcnQobykge1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XHJcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XHJcbiAgICB2YXIgciA9IG8uciAvIDI1NSxcclxuICAgICAgICBnID0gby5nIC8gMjU1LFxyXG4gICAgICAgIGIgPSBvLmIgLyAyNTUsXHJcbiAgICAgICAgbCA9IChCQ19EQSAqIGIgKyBFRCAqIHIgLSBFQiAqIGcpIC8gKEJDX0RBICsgRUQgLSBFQiksXHJcbiAgICAgICAgYmwgPSBiIC0gbCxcclxuICAgICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXHJcbiAgICAgICAgcyA9IE1hdGguc3FydChrICogayArIGJsICogYmwpIC8gKEUgKiBsICogKDEgLSBsKSksIC8vIE5hTiBpZiBsPTAgb3IgbD0xXHJcbiAgICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XHJcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcclxuICAgIHRoaXMuaCA9ICtoO1xyXG4gICAgdGhpcy5zID0gK3M7XHJcbiAgICB0aGlzLmwgPSArbDtcclxuICAgIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xyXG4gIH1cclxuXHJcbiAgZGVmaW5lKEN1YmVoZWxpeCwgY3ViZWhlbGl4LCBleHRlbmQoQ29sb3IsIHtcclxuICAgIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcclxuICAgICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgZGFya2VyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xyXG4gICAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcclxuICAgIH0sXHJcbiAgICByZ2I6IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxyXG4gICAgICAgICAgbCA9ICt0aGlzLmwsXHJcbiAgICAgICAgICBhID0gaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMgKiBsICogKDEgLSBsKSxcclxuICAgICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcclxuICAgICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTtcclxuICAgICAgcmV0dXJuIG5ldyBSZ2IoXHJcbiAgICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcclxuICAgICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLFxyXG4gICAgICAgIDI1NSAqIChsICsgYSAqIChFICogY29zaCkpLFxyXG4gICAgICAgIHRoaXMub3BhY2l0eVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH0pKTtcclxuXHJcbiAgZnVuY3Rpb24gY29uc3RhbnQoeCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgcmV0dXJuIGEgKyB0ICogZDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XHJcbiAgICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2FtbWEoeSkge1xyXG4gICAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcclxuICAgIHZhciBkID0gYiAtIGE7XHJcbiAgICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHJnYiQxID0gKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcclxuICAgIHZhciBjb2xvciA9IGdhbW1hKHkpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJnYiQxKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSByZ2Ioc3RhcnQpKS5yLCAoZW5kID0gcmdiKGVuZCkpLnIpLFxyXG4gICAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcclxuICAgICAgICAgIGIgPSBjb2xvcihzdGFydC5iLCBlbmQuYiksXHJcbiAgICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgc3RhcnQuciA9IHIodCk7XHJcbiAgICAgICAgc3RhcnQuZyA9IGcodCk7XHJcbiAgICAgICAgc3RhcnQuYiA9IGIodCk7XHJcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZ2IkMS5nYW1tYSA9IHJnYkdhbW1hO1xyXG5cclxuICAgIHJldHVybiByZ2IkMTtcclxuICB9KSgxKTtcclxuXHJcbiAgZnVuY3Rpb24gbnVtYmVyQXJyYXkoYSwgYikge1xyXG4gICAgaWYgKCFiKSBiID0gW107XHJcbiAgICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcclxuICAgICAgICBjID0gYi5zbGljZSgpLFxyXG4gICAgICAgIGk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBjW2ldID0gYVtpXSAqICgxIC0gdCkgKyBiW2ldICogdDtcclxuICAgICAgcmV0dXJuIGM7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XHJcbiAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHgpICYmICEoeCBpbnN0YW5jZW9mIERhdGFWaWV3KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XHJcbiAgICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxyXG4gICAgICAgIG5hID0gYSA/IE1hdGgubWluKG5iLCBhLmxlbmd0aCkgOiAwLFxyXG4gICAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxyXG4gICAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxyXG4gICAgICAgIGk7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSBpbnRlcnBvbGF0ZShhW2ldLCBiW2ldKTtcclxuICAgIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xyXG4gICAgICByZXR1cm4gYztcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkYXRlKGEsIGIpIHtcclxuICAgIHZhciBkID0gbmV3IERhdGU7XHJcbiAgICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZU51bWJlcihhLCBiKSB7XHJcbiAgICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgcmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gb2JqZWN0KGEsIGIpIHtcclxuICAgIHZhciBpID0ge30sXHJcbiAgICAgICAgYyA9IHt9LFxyXG4gICAgICAgIGs7XHJcblxyXG4gICAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcclxuICAgIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XHJcblxyXG4gICAgZm9yIChrIGluIGIpIHtcclxuICAgICAgaWYgKGsgaW4gYSkge1xyXG4gICAgICAgIGlba10gPSBpbnRlcnBvbGF0ZShhW2tdLCBiW2tdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjW2tdID0gYltrXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XHJcbiAgICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcclxuICAgICAgcmV0dXJuIGM7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcclxuICAgICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XHJcblxyXG4gIGZ1bmN0aW9uIHplcm8oYikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gYjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBvbmUoYikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgcmV0dXJuIGIodCkgKyBcIlwiO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHN0cmluZyhhLCBiKSB7XHJcbiAgICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcclxuICAgICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXHJcbiAgICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxyXG4gICAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxyXG4gICAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xyXG4gICAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXHJcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xyXG5cclxuICAgIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cclxuICAgIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xyXG5cclxuICAgIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXHJcbiAgICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXHJcbiAgICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XHJcbiAgICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxyXG4gICAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xyXG4gICAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xyXG4gICAgICAgIGVsc2Ugc1srK2ldID0gYnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcclxuICAgICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcclxuICAgICAgICBlbHNlIHNbKytpXSA9IGJtO1xyXG4gICAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xyXG4gICAgICAgIHNbKytpXSA9IG51bGw7XHJcbiAgICAgICAgcS5wdXNoKHtpOiBpLCB4OiBpbnRlcnBvbGF0ZU51bWJlcihhbSwgYm0pfSk7XHJcbiAgICAgIH1cclxuICAgICAgYmkgPSByZUIubGFzdEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCByZW1haW5zIG9mIGIuXHJcbiAgICBpZiAoYmkgPCBiLmxlbmd0aCkge1xyXG4gICAgICBicyA9IGIuc2xpY2UoYmkpO1xyXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcclxuICAgICAgZWxzZSBzWysraV0gPSBicztcclxuICAgIH1cclxuXHJcbiAgICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cclxuICAgIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXHJcbiAgICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cclxuICAgICAgICA/IG9uZShxWzBdLngpXHJcbiAgICAgICAgOiB6ZXJvKGIpKVxyXG4gICAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZShhLCBiKSB7XHJcbiAgICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xyXG4gICAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXHJcbiAgICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IGludGVycG9sYXRlTnVtYmVyXHJcbiAgICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IkMSkgOiBzdHJpbmcpXHJcbiAgICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2IkMVxyXG4gICAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXHJcbiAgICAgICAgOiBpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXlcclxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcclxuICAgICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XHJcbiAgICAgICAgOiBpbnRlcnBvbGF0ZU51bWJlcikoYSwgYik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZVJvdW5kKGEsIGIpIHtcclxuICAgIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChhICogKDEgLSB0KSArIGIgKiB0KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb25zdGFudCQxKHgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbnVtYmVyKHgpIHtcclxuICAgIHJldHVybiAreDtcclxuICB9XHJcblxyXG4gIHZhciB1bml0ID0gWzAsIDFdO1xyXG5cclxuICBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZShhLCBiKSB7XHJcbiAgICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXHJcbiAgICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxyXG4gICAgICAgIDogY29uc3RhbnQkMShpc05hTihiKSA/IE5hTiA6IDAuNSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjbGFtcGVyKGEsIGIpIHtcclxuICAgIHZhciB0O1xyXG4gICAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHgpKTsgfTtcclxuICB9XHJcblxyXG4gIC8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxyXG4gIC8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cclxuICBmdW5jdGlvbiBiaW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xyXG4gICAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcclxuICAgIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XHJcbiAgICBlbHNlIGQwID0gbm9ybWFsaXplKGQwLCBkMSksIHIwID0gaW50ZXJwb2xhdGUocjAsIHIxKTtcclxuICAgIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XHJcbiAgICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxyXG4gICAgICAgIGQgPSBuZXcgQXJyYXkoaiksXHJcbiAgICAgICAgciA9IG5ldyBBcnJheShqKSxcclxuICAgICAgICBpID0gLTE7XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXHJcbiAgICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XHJcbiAgICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcclxuICAgICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAoKytpIDwgaikge1xyXG4gICAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XHJcbiAgICAgIHJbaV0gPSBpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oeCkge1xyXG4gICAgICB2YXIgaSA9IGJpc2VjdFJpZ2h0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xyXG4gICAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XHJcbiAgICByZXR1cm4gdGFyZ2V0XHJcbiAgICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXHJcbiAgICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxyXG4gICAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcclxuICAgICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXHJcbiAgICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcclxuICAgIHZhciBkb21haW4gPSB1bml0LFxyXG4gICAgICAgIHJhbmdlID0gdW5pdCxcclxuICAgICAgICBpbnRlcnBvbGF0ZSQxID0gaW50ZXJwb2xhdGUsXHJcbiAgICAgICAgdHJhbnNmb3JtLFxyXG4gICAgICAgIHVudHJhbnNmb3JtLFxyXG4gICAgICAgIHVua25vd24sXHJcbiAgICAgICAgY2xhbXAgPSBpZGVudGl0eSxcclxuICAgICAgICBwaWVjZXdpc2UsXHJcbiAgICAgICAgb3V0cHV0LFxyXG4gICAgICAgIGlucHV0O1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XHJcbiAgICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcclxuICAgICAgaWYgKGNsYW1wICE9PSBpZGVudGl0eSkgY2xhbXAgPSBjbGFtcGVyKGRvbWFpblswXSwgZG9tYWluW24gLSAxXSk7XHJcbiAgICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xyXG4gICAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XHJcbiAgICAgIHJldHVybiBzY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzY2FsZSh4KSB7XHJcbiAgICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSQxKSkpKHRyYW5zZm9ybShjbGFtcCh4KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcclxuICAgICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcclxuICAgIH07XHJcblxyXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcclxuICAgIH07XHJcblxyXG4gICAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XHJcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XHJcbiAgICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlJDEgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9IF8gPyB0cnVlIDogaWRlbnRpdHksIHJlc2NhbGUoKSkgOiBjbGFtcCAhPT0gaWRlbnRpdHk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSQxID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlJDE7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XHJcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24odCwgdSkge1xyXG4gICAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XHJcbiAgICAgIHJldHVybiByZXNjYWxlKCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29udGludW91cygpIHtcclxuICAgIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XHJcbiAgfVxyXG5cclxuICAvLyBDb21wdXRlcyB0aGUgZGVjaW1hbCBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQgb2YgdGhlIHNwZWNpZmllZCBudW1iZXIgeCB3aXRoXHJcbiAgLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXHJcbiAgLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWwoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXHJcbiAgZnVuY3Rpb24gZm9ybWF0RGVjaW1hbCh4LCBwKSB7XHJcbiAgICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcclxuICAgIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XHJcblxyXG4gICAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xyXG4gICAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cclxuICAgIHJldHVybiBbXHJcbiAgICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXHJcbiAgICAgICt4LnNsaWNlKGkgKyAxKVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGV4cG9uZW50KHgpIHtcclxuICAgIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbChNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0R3JvdXAoZ3JvdXBpbmcsIHRob3VzYW5kcykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCB3aWR0aCkge1xyXG4gICAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcclxuICAgICAgICAgIHQgPSBbXSxcclxuICAgICAgICAgIGogPSAwLFxyXG4gICAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxyXG4gICAgICAgICAgbGVuZ3RoID0gMDtcclxuXHJcbiAgICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xyXG4gICAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xyXG4gICAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xyXG4gICAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcclxuICAgICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdE51bWVyYWxzKG51bWVyYWxzKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcclxuICAgICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXHJcbiAgdmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XHJcbiAgICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XHJcbiAgICB2YXIgbWF0Y2g7XHJcbiAgICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XHJcbiAgICAgIGZpbGw6IG1hdGNoWzFdLFxyXG4gICAgICBhbGlnbjogbWF0Y2hbMl0sXHJcbiAgICAgIHNpZ246IG1hdGNoWzNdLFxyXG4gICAgICBzeW1ib2w6IG1hdGNoWzRdLFxyXG4gICAgICB6ZXJvOiBtYXRjaFs1XSxcclxuICAgICAgd2lkdGg6IG1hdGNoWzZdLFxyXG4gICAgICBjb21tYTogbWF0Y2hbN10sXHJcbiAgICAgIHByZWNpc2lvbjogbWF0Y2hbOF0gJiYgbWF0Y2hbOF0uc2xpY2UoMSksXHJcbiAgICAgIHRyaW06IG1hdGNoWzldLFxyXG4gICAgICB0eXBlOiBtYXRjaFsxMF1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcclxuXHJcbiAgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xyXG4gICAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xyXG4gICAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xyXG4gICAgdGhpcy5zaWduID0gc3BlY2lmaWVyLnNpZ24gPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogc3BlY2lmaWVyLnNpZ24gKyBcIlwiO1xyXG4gICAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XHJcbiAgICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xyXG4gICAgdGhpcy53aWR0aCA9IHNwZWNpZmllci53aWR0aCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci53aWR0aDtcclxuICAgIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcclxuICAgIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XHJcbiAgICB0aGlzLnRyaW0gPSAhIXNwZWNpZmllci50cmltO1xyXG4gICAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XHJcbiAgfVxyXG5cclxuICBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxsXHJcbiAgICAgICAgKyB0aGlzLmFsaWduXHJcbiAgICAgICAgKyB0aGlzLnNpZ25cclxuICAgICAgICArIHRoaXMuc3ltYm9sXHJcbiAgICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxyXG4gICAgICAgICsgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXHJcbiAgICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcclxuICAgICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcclxuICAgICAgICArICh0aGlzLnRyaW0gPyBcIn5cIiA6IFwiXCIpXHJcbiAgICAgICAgKyB0aGlzLnR5cGU7XHJcbiAgfTtcclxuXHJcbiAgLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VHJpbShzKSB7XHJcbiAgICBvdXQ6IGZvciAodmFyIG4gPSBzLmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgIHN3aXRjaCAoc1tpXSkge1xyXG4gICAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcclxuICAgICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcclxuICAgICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XHJcbiAgfVxyXG5cclxuICB2YXIgcHJlZml4RXhwb25lbnQ7XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeEF1dG8oeCwgcCkge1xyXG4gICAgdmFyIGQgPSBmb3JtYXREZWNpbWFsKHgsIHApO1xyXG4gICAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XHJcbiAgICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxyXG4gICAgICAgIGV4cG9uZW50ID0gZFsxXSxcclxuICAgICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXHJcbiAgICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcclxuICAgIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcclxuICAgICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxyXG4gICAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcclxuICAgICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRSb3VuZGVkKHgsIHApIHtcclxuICAgIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTtcclxuICAgIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xyXG4gICAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcclxuICAgICAgICBleHBvbmVudCA9IGRbMV07XHJcbiAgICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxyXG4gICAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxyXG4gICAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcclxuICB9XHJcblxyXG4gIHZhciBmb3JtYXRUeXBlcyA9IHtcclxuICAgIFwiJVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiAoeCAqIDEwMCkudG9GaXhlZChwKTsgfSxcclxuICAgIFwiYlwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpOyB9LFxyXG4gICAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxyXG4gICAgXCJkXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTApOyB9LFxyXG4gICAgXCJlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9FeHBvbmVudGlhbChwKTsgfSxcclxuICAgIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXHJcbiAgICBcImdcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b1ByZWNpc2lvbihwKTsgfSxcclxuICAgIFwib1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpOyB9LFxyXG4gICAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXHJcbiAgICBcInJcIjogZm9ybWF0Um91bmRlZCxcclxuICAgIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxyXG4gICAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXHJcbiAgICBcInhcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNik7IH1cclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBpZGVudGl0eSQxKHgpIHtcclxuICAgIHJldHVybiB4O1xyXG4gIH1cclxuXHJcbiAgdmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXHJcbiAgICAgIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xyXG4gICAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkkMSA6IGZvcm1hdEdyb3VwKG1hcC5jYWxsKGxvY2FsZS5ncm91cGluZywgTnVtYmVyKSwgbG9jYWxlLnRob3VzYW5kcyArIFwiXCIpLFxyXG4gICAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcclxuICAgICAgICBjdXJyZW5jeVN1ZmZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVsxXSArIFwiXCIsXHJcbiAgICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsID09PSB1bmRlZmluZWQgPyBcIi5cIiA6IGxvY2FsZS5kZWNpbWFsICsgXCJcIixcclxuICAgICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkkMSA6IGZvcm1hdE51bWVyYWxzKG1hcC5jYWxsKGxvY2FsZS5udW1lcmFscywgU3RyaW5nKSksXHJcbiAgICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcclxuICAgICAgICBtaW51cyA9IGxvY2FsZS5taW51cyA9PT0gdW5kZWZpbmVkID8gXCItXCIgOiBsb2NhbGUubWludXMgKyBcIlwiLFxyXG4gICAgICAgIG5hbiA9IGxvY2FsZS5uYW4gPT09IHVuZGVmaW5lZCA/IFwiTmFOXCIgOiBsb2NhbGUubmFuICsgXCJcIjtcclxuXHJcbiAgICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XHJcbiAgICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xyXG5cclxuICAgICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcclxuICAgICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxyXG4gICAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxyXG4gICAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcclxuICAgICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcclxuICAgICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxyXG4gICAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXHJcbiAgICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxyXG4gICAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxyXG4gICAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xyXG5cclxuICAgICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cclxuICAgICAgaWYgKHR5cGUgPT09IFwiblwiKSBjb21tYSA9IHRydWUsIHR5cGUgPSBcImdcIjtcclxuXHJcbiAgICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxyXG4gICAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XHJcblxyXG4gICAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cclxuICAgICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XHJcblxyXG4gICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cclxuICAgICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXHJcbiAgICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lQcmVmaXggOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXHJcbiAgICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xyXG5cclxuICAgICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cclxuICAgICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XHJcbiAgICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XHJcbiAgICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXHJcbiAgICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xyXG5cclxuICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxyXG4gICAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxyXG4gICAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXHJcbiAgICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cclxuICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XHJcbiAgICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcclxuICAgICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xyXG5cclxuICAgICAgZnVuY3Rpb24gZm9ybWF0KHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxyXG4gICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcclxuICAgICAgICAgICAgaSwgbiwgYztcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XHJcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XHJcbiAgICAgICAgICB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbHVlID0gK3ZhbHVlO1xyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxyXG4gICAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDAgfHwgMSAvIHZhbHVlIDwgMDtcclxuXHJcbiAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXHJcbiAgICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xyXG5cclxuICAgICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cclxuICAgICAgICAgIGlmICh0cmltKSB2YWx1ZSA9IGZvcm1hdFRyaW0odmFsdWUpO1xyXG5cclxuICAgICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxyXG4gICAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwICYmIHNpZ24gIT09IFwiK1wiKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXHJcbiAgICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XHJcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9ICh0eXBlID09PSBcInNcIiA/IHByZWZpeGVzWzggKyBwcmVmaXhFeHBvbmVudCAvIDNdIDogXCJcIikgKyB2YWx1ZVN1ZmZpeCArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcclxuXHJcbiAgICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxyXG4gICAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXHJcbiAgICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcclxuICAgICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xyXG4gICAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxyXG4gICAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xyXG5cclxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxyXG4gICAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXHJcbiAgICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cclxuICAgICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xyXG5cclxuICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cclxuICAgICAgICBzd2l0Y2ggKGFsaWduKSB7XHJcbiAgICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XHJcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXHJcbiAgICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXHJcbiAgICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcclxuICAgICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZm9ybWF0OiBuZXdGb3JtYXQsXHJcbiAgICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdmFyIGxvY2FsZTtcclxuICB2YXIgZm9ybWF0O1xyXG4gIHZhciBmb3JtYXRQcmVmaXg7XHJcblxyXG4gIGRlZmF1bHRMb2NhbGUoe1xyXG4gICAgZGVjaW1hbDogXCIuXCIsXHJcbiAgICB0aG91c2FuZHM6IFwiLFwiLFxyXG4gICAgZ3JvdXBpbmc6IFszXSxcclxuICAgIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdLFxyXG4gICAgbWludXM6IFwiLVwiXHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xyXG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xyXG4gICAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcclxuICAgIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XHJcbiAgICByZXR1cm4gbG9jYWxlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJlY2lzaW9uRml4ZWQoc3RlcCkge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJlY2lzaW9uUm91bmQoc3RlcCwgbWF4KSB7XHJcbiAgICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xyXG4gICAgdmFyIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLFxyXG4gICAgICAgIHByZWNpc2lvbjtcclxuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XHJcbiAgICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJzXCI6IHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcclxuICAgICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcclxuICAgICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgXCJcIjpcclxuICAgICAgY2FzZSBcImVcIjpcclxuICAgICAgY2FzZSBcImdcIjpcclxuICAgICAgY2FzZSBcInBcIjpcclxuICAgICAgY2FzZSBcInJcIjoge1xyXG4gICAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwiZlwiOlxyXG4gICAgICBjYXNlIFwiJVwiOiB7XHJcbiAgICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcclxuICAgIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XHJcblxyXG4gICAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgICB2YXIgZCA9IGRvbWFpbigpO1xyXG4gICAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XHJcbiAgICAgIHZhciBkID0gZG9tYWluKCk7XHJcbiAgICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcclxuXHJcbiAgICAgIHZhciBkID0gZG9tYWluKCksXHJcbiAgICAgICAgICBpMCA9IDAsXHJcbiAgICAgICAgICBpMSA9IGQubGVuZ3RoIC0gMSxcclxuICAgICAgICAgIHN0YXJ0ID0gZFtpMF0sXHJcbiAgICAgICAgICBzdG9wID0gZFtpMV0sXHJcbiAgICAgICAgICBzdGVwO1xyXG5cclxuICAgICAgaWYgKHN0b3AgPCBzdGFydCkge1xyXG4gICAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcclxuICAgICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcclxuXHJcbiAgICAgIGlmIChzdGVwID4gMCkge1xyXG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcclxuICAgICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcclxuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xyXG4gICAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xyXG4gICAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XHJcbiAgICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN0ZXAgPiAwKSB7XHJcbiAgICAgICAgZFtpMF0gPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgIGRbaTFdID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgZG9tYWluKGQpO1xyXG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XHJcbiAgICAgICAgZFtpMF0gPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XHJcbiAgICAgICAgZFtpMV0gPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XHJcbiAgICAgICAgZG9tYWluKGQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2NhbGU7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBzY2FsZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGxpbmVhciQxKCkge1xyXG4gICAgdmFyIHNjYWxlID0gY29udGludW91cygpO1xyXG5cclxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGNvcHkoc2NhbGUsIGxpbmVhciQxKCkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdDAkMSA9IG5ldyBEYXRlLFxyXG4gICAgICB0MSQxID0gbmV3IERhdGU7XHJcblxyXG4gIGZ1bmN0aW9uIG5ld0ludGVydmFsKGZsb29yaSwgb2Zmc2V0aSwgY291bnQsIGZpZWxkKSB7XHJcblxyXG4gICAgZnVuY3Rpb24gaW50ZXJ2YWwoZGF0ZSkge1xyXG4gICAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVydmFsLmZsb29yID0gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZShkYXRlIC0gMSkpLCBvZmZzZXRpKGRhdGUsIDEpLCBmbG9vcmkoZGF0ZSksIGRhdGU7XHJcbiAgICB9O1xyXG5cclxuICAgIGludGVydmFsLnJvdW5kID0gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcclxuICAgICAgICAgIGQxID0gaW50ZXJ2YWwuY2VpbChkYXRlKTtcclxuICAgICAgcmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZSA/IGQwIDogZDE7XHJcbiAgICB9O1xyXG5cclxuICAgIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbnRlcnZhbC5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XHJcbiAgICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcclxuICAgICAgc3RhcnQgPSBpbnRlcnZhbC5jZWlsKHN0YXJ0KTtcclxuICAgICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xyXG4gICAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcclxuICAgICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcclxuICAgICAgd2hpbGUgKHByZXZpb3VzIDwgc3RhcnQgJiYgc3RhcnQgPCBzdG9wKTtcclxuICAgICAgcmV0dXJuIHJhbmdlO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbnRlcnZhbC5maWx0ZXIgPSBmdW5jdGlvbih0ZXN0KSB7XHJcbiAgICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XHJcbiAgICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB7XHJcbiAgICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xyXG4gICAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICAgICAgICB9IGVsc2Ugd2hpbGUgKC0tc3RlcCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoY291bnQpIHtcclxuICAgICAgaW50ZXJ2YWwuY291bnQgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICAgICAgdDAkMS5zZXRUaW1lKCtzdGFydCksIHQxJDEuc2V0VGltZSgrZW5kKTtcclxuICAgICAgICBmbG9vcmkodDAkMSksIGZsb29yaSh0MSQxKTtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihjb3VudCh0MCQxLCB0MSQxKSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcclxuICAgICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcclxuICAgICAgICByZXR1cm4gIWlzRmluaXRlKHN0ZXApIHx8ICEoc3RlcCA+IDApID8gbnVsbFxyXG4gICAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcclxuICAgICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcclxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24oZCkgeyByZXR1cm4gZmllbGQoZCkgJSBzdGVwID09PSAwOyB9XHJcbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGludGVydmFsO1xyXG4gIH1cclxuXHJcbiAgdmFyIG1pbGxpc2Vjb25kID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBub29wXHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xyXG4gIH0pO1xyXG5cclxuICAvLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXHJcbiAgbWlsbGlzZWNvbmQuZXZlcnkgPSBmdW5jdGlvbihrKSB7XHJcbiAgICBrID0gTWF0aC5mbG9vcihrKTtcclxuICAgIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKCEoayA+IDEpKSByZXR1cm4gbWlsbGlzZWNvbmQ7XHJcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gaykgKiBrKTtcclxuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xyXG4gICAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICB2YXIgZHVyYXRpb25TZWNvbmQgPSAxZTM7XHJcbiAgdmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xyXG4gIHZhciBkdXJhdGlvbkhvdXIgPSAzNmU1O1xyXG4gIHZhciBkdXJhdGlvbkRheSA9IDg2NGU1O1xyXG4gIHZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XHJcblxyXG4gIHZhciBzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvblNlY29uZDtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgfSk7XHJcblxyXG4gIHZhciBtaW51dGUgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgaG91ciA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcclxuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgZGF5ID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcclxuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgLSAxO1xyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiB3ZWVrZGF5KGkpIHtcclxuICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpICsgNyAtIGkpICUgNyk7XHJcbiAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcclxuICAgIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25XZWVrO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcclxuICB2YXIgbW9uZGF5ID0gd2Vla2RheSgxKTtcclxuICB2YXIgdHVlc2RheSA9IHdlZWtkYXkoMik7XHJcbiAgdmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XHJcbiAgdmFyIHRodXJzZGF5ID0gd2Vla2RheSg0KTtcclxuICB2YXIgZnJpZGF5ID0gd2Vla2RheSg1KTtcclxuICB2YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xyXG5cclxuICB2YXIgbW9udGggPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldERhdGUoMSk7XHJcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIGVuZC5nZXRNb250aCgpIC0gc3RhcnQuZ2V0TW9udGgoKSArIChlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcclxuICB9KTtcclxuXHJcbiAgdmFyIHllYXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xyXG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICB9KTtcclxuXHJcbiAgLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxyXG4gIHllYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XHJcbiAgICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xyXG4gICAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xyXG4gICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHZhciB1dGNNaW51dGUgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcclxuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICB9KTtcclxuXHJcbiAgdmFyIHV0Y0hvdXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDSG91cnMoKTtcclxuICB9KTtcclxuXHJcbiAgdmFyIHV0Y0RheSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcclxuICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XHJcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcclxuICAgIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xyXG4gIHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xyXG4gIHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcclxuICB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcclxuICB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xyXG4gIHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xyXG4gIHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XHJcblxyXG4gIHZhciB1dGNNb250aCA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIGRhdGUuc2V0VVRDRGF0ZSgxKTtcclxuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyBzdGVwKTtcclxuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgdXRjWWVhciA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XHJcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gIH0pO1xyXG5cclxuICAvLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXHJcbiAgdXRjWWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcclxuICAgIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSAvIGspICogayk7XHJcbiAgICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XHJcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCAqIGspO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcclxuICAgIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XHJcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcclxuICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xyXG4gICAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xyXG4gICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XHJcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcclxuICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBuZXdEYXRlKHksIG0sIGQpIHtcclxuICAgIHJldHVybiB7eTogeSwgbTogbSwgZDogZCwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRMb2NhbGUkMShsb2NhbGUpIHtcclxuICAgIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXHJcbiAgICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcclxuICAgICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxyXG4gICAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXHJcbiAgICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXHJcbiAgICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxyXG4gICAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxyXG4gICAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcclxuXHJcbiAgICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXHJcbiAgICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcclxuICAgICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxyXG4gICAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcclxuICAgICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcclxuICAgICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxyXG4gICAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcclxuICAgICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcclxuICAgICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxyXG4gICAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcclxuXHJcbiAgICB2YXIgZm9ybWF0cyA9IHtcclxuICAgICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcclxuICAgICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXHJcbiAgICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxyXG4gICAgICBcIkJcIjogZm9ybWF0TW9udGgsXHJcbiAgICAgIFwiY1wiOiBudWxsLFxyXG4gICAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcclxuICAgICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXHJcbiAgICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXHJcbiAgICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXHJcbiAgICAgIFwiSVwiOiBmb3JtYXRIb3VyMTIsXHJcbiAgICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXHJcbiAgICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXHJcbiAgICAgIFwibVwiOiBmb3JtYXRNb250aE51bWJlcixcclxuICAgICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXHJcbiAgICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXHJcbiAgICAgIFwicVwiOiBmb3JtYXRRdWFydGVyLFxyXG4gICAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcclxuICAgICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxyXG4gICAgICBcIlNcIjogZm9ybWF0U2Vjb25kcyxcclxuICAgICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXHJcbiAgICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxyXG4gICAgICBcIlZcIjogZm9ybWF0V2Vla051bWJlcklTTyxcclxuICAgICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXHJcbiAgICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxyXG4gICAgICBcInhcIjogbnVsbCxcclxuICAgICAgXCJYXCI6IG51bGwsXHJcbiAgICAgIFwieVwiOiBmb3JtYXRZZWFyLFxyXG4gICAgICBcIllcIjogZm9ybWF0RnVsbFllYXIsXHJcbiAgICAgIFwiWlwiOiBmb3JtYXRab25lLFxyXG4gICAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcclxuICAgIH07XHJcblxyXG4gICAgdmFyIHV0Y0Zvcm1hdHMgPSB7XHJcbiAgICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXHJcbiAgICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxyXG4gICAgICBcImJcIjogZm9ybWF0VVRDU2hvcnRNb250aCxcclxuICAgICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxyXG4gICAgICBcImNcIjogbnVsbCxcclxuICAgICAgXCJkXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXHJcbiAgICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxyXG4gICAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxyXG4gICAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxyXG4gICAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxyXG4gICAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxyXG4gICAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxyXG4gICAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXHJcbiAgICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxyXG4gICAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxyXG4gICAgICBcInFcIjogZm9ybWF0VVRDUXVhcnRlcixcclxuICAgICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXHJcbiAgICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcclxuICAgICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXHJcbiAgICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxyXG4gICAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcclxuICAgICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXHJcbiAgICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxyXG4gICAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcclxuICAgICAgXCJ4XCI6IG51bGwsXHJcbiAgICAgIFwiWFwiOiBudWxsLFxyXG4gICAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcclxuICAgICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxyXG4gICAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcclxuICAgICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBwYXJzZXMgPSB7XHJcbiAgICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcclxuICAgICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcclxuICAgICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcclxuICAgICAgXCJCXCI6IHBhcnNlTW9udGgsXHJcbiAgICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxyXG4gICAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxyXG4gICAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxyXG4gICAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXHJcbiAgICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcclxuICAgICAgXCJJXCI6IHBhcnNlSG91cjI0LFxyXG4gICAgICBcImpcIjogcGFyc2VEYXlPZlllYXIsXHJcbiAgICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcclxuICAgICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXHJcbiAgICAgIFwiTVwiOiBwYXJzZU1pbnV0ZXMsXHJcbiAgICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcclxuICAgICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcclxuICAgICAgXCJRXCI6IHBhcnNlVW5peFRpbWVzdGFtcCxcclxuICAgICAgXCJzXCI6IHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMsXHJcbiAgICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXHJcbiAgICAgIFwidVwiOiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXksXHJcbiAgICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXHJcbiAgICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXHJcbiAgICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXksXHJcbiAgICAgIFwiV1wiOiBwYXJzZVdlZWtOdW1iZXJNb25kYXksXHJcbiAgICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXHJcbiAgICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXHJcbiAgICAgIFwieVwiOiBwYXJzZVllYXIsXHJcbiAgICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxyXG4gICAgICBcIlpcIjogcGFyc2Vab25lLFxyXG4gICAgICBcIiVcIjogcGFyc2VMaXRlcmFsUGVyY2VudFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXHJcbiAgICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xyXG4gICAgZm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCBmb3JtYXRzKTtcclxuICAgIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xyXG4gICAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcclxuICAgIHV0Y0Zvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgdXRjRm9ybWF0cyk7XHJcbiAgICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcclxuXHJcbiAgICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICAgICAgdmFyIHN0cmluZyA9IFtdLFxyXG4gICAgICAgICAgICBpID0gLTEsXHJcbiAgICAgICAgICAgIGogPSAwLFxyXG4gICAgICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcclxuICAgICAgICAgICAgYyxcclxuICAgICAgICAgICAgcGFkLFxyXG4gICAgICAgICAgICBmb3JtYXQ7XHJcblxyXG4gICAgICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKTtcclxuXHJcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcclxuICAgICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcclxuICAgICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcclxuICAgICAgICAgICAgaWYgKChwYWQgPSBwYWRzW2MgPSBzcGVjaWZpZXIuY2hhckF0KCsraSldKSAhPSBudWxsKSBjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpO1xyXG4gICAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcclxuICAgICAgICAgICAgc3RyaW5nLnB1c2goYyk7XHJcbiAgICAgICAgICAgIGogPSBpICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG5ld1BhcnNlKHNwZWNpZmllciwgWikge1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXdEYXRlKDE5MDAsIHVuZGVmaW5lZCwgMSksXHJcbiAgICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKSxcclxuICAgICAgICAgICAgd2VlaywgZGF5JDE7XHJcbiAgICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXHJcbiAgICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xyXG4gICAgICAgIGlmIChcInNcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5zICogMTAwMCArIChcIkxcIiBpbiBkID8gZC5MIDogMCkpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGlzIGlzIHV0Y1BhcnNlLCBuZXZlciB1c2UgdGhlIGxvY2FsIHRpbWV6b25lLlxyXG4gICAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XHJcblxyXG4gICAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXHJcbiAgICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBtb250aCB3YXMgbm90IHNwZWNpZmllZCwgaW5oZXJpdCBmcm9tIHRoZSBxdWFydGVyLlxyXG4gICAgICAgIGlmIChkLm0gPT09IHVuZGVmaW5lZCkgZC5tID0gXCJxXCIgaW4gZCA/IGQucSA6IDA7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cclxuICAgICAgICBpZiAoXCJWXCIgaW4gZCkge1xyXG4gICAgICAgICAgaWYgKGQuViA8IDEgfHwgZC5WID4gNTMpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XHJcbiAgICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xyXG4gICAgICAgICAgICB3ZWVrID0gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkkMSA9IHdlZWsuZ2V0VVRDRGF5KCk7XHJcbiAgICAgICAgICAgIHdlZWsgPSBkYXkkMSA+IDQgfHwgZGF5JDEgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcclxuICAgICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XHJcbiAgICAgICAgICAgIGQueSA9IHdlZWsuZ2V0VVRDRnVsbFllYXIoKTtcclxuICAgICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xyXG4gICAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3ZWVrID0gbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSQxID0gd2Vlay5nZXREYXkoKTtcclxuICAgICAgICAgICAgd2VlayA9IGRheSQxID4gNCB8fCBkYXkkMSA9PT0gMCA/IG1vbmRheS5jZWlsKHdlZWspIDogbW9uZGF5KHdlZWspO1xyXG4gICAgICAgICAgICB3ZWVrID0gZGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcclxuICAgICAgICAgICAgZC55ID0gd2Vlay5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0RGF0ZSgpICsgKGQudyArIDYpICUgNztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xyXG4gICAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwidVwiIGluIGQgPyBkLnUgJSA3IDogXCJXXCIgaW4gZCA/IDEgOiAwO1xyXG4gICAgICAgICAgZGF5JDEgPSBcIlpcIiBpbiBkID8gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldFVUQ0RheSgpIDogbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0RGF5KCk7XHJcbiAgICAgICAgICBkLm0gPSAwO1xyXG4gICAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSQxICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChkYXkkMSArIDYpICUgNztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIGEgdGltZSB6b25lIGlzIHNwZWNpZmllZCwgYWxsIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRDIGFuZCB0aGVuXHJcbiAgICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cclxuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xyXG4gICAgICAgICAgZC5IICs9IGQuWiAvIDEwMCB8IDA7XHJcbiAgICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xyXG4gICAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdGhlcndpc2UsIGFsbCBmaWVsZHMgYXJlIGluIGxvY2FsIHRpbWUuXHJcbiAgICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xyXG4gICAgICB2YXIgaSA9IDAsXHJcbiAgICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcclxuICAgICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxyXG4gICAgICAgICAgYyxcclxuICAgICAgICAgIHBhcnNlO1xyXG5cclxuICAgICAgd2hpbGUgKGkgPCBuKSB7XHJcbiAgICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xyXG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChjID09PSAzNykge1xyXG4gICAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcclxuICAgICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xyXG4gICAgICAgICAgaWYgKCFwYXJzZSB8fCAoKGogPSBwYXJzZShkLCBzdHJpbmcsIGopKSA8IDApKSByZXR1cm4gLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBqO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xyXG4gICAgICB2YXIgbiA9IHBlcmlvZFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcclxuICAgICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcclxuICAgICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XHJcbiAgICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGQsIHN0cmluZywgaSkge1xyXG4gICAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XHJcbiAgICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcclxuICAgICAgdmFyIG4gPSBzaG9ydE1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xyXG4gICAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xyXG4gICAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xyXG4gICAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlVGltZShkLCBzdHJpbmcsIGkpIHtcclxuICAgICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZSwgc3RyaW5nLCBpKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRTaG9ydFdlZWtkYXkoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXREYXkoKV07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRNb250aChkKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcclxuICAgICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0UXVhcnRlcihkKSB7XHJcbiAgICAgIHJldHVybiAxICsgfn4oZC5nZXRNb250aCgpIC8gMyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcclxuICAgICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1F1YXJ0ZXIoZCkge1xyXG4gICAgICByZXR1cm4gMSArIH5+KGQuZ2V0VVRDTW9udGgoKSAvIDMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XHJcbiAgICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xyXG4gICAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcclxuICAgICAgICByZXR1cm4gZjtcclxuICAgICAgfSxcclxuICAgICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xyXG4gICAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGZhbHNlKTtcclxuICAgICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgIH0sXHJcbiAgICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XHJcbiAgICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xyXG4gICAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcclxuICAgICAgICByZXR1cm4gZjtcclxuICAgICAgfSxcclxuICAgICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xyXG4gICAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIHRydWUpO1xyXG4gICAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcclxuICAgICAgICByZXR1cm4gcDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXHJcbiAgICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcclxuICAgICAgcGVyY2VudFJlID0gL14lLyxcclxuICAgICAgcmVxdW90ZVJlID0gL1tcXFxcXiQqKz98W1xcXSgpLnt9XS9nO1xyXG5cclxuICBmdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XHJcbiAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcclxuICAgICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXHJcbiAgICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcclxuICAgIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZXF1b3RlKHMpIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcclxuICAgIHZhciBtYXAgPSB7fSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XHJcbiAgICByZXR1cm4gbWFwO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcclxuICAgIHJldHVybiBuID8gKGQudSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5WID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQuVyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQueSA9ICtuWzBdICsgKCtuWzBdID4gNjggPyAxOTAwIDogMjAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VRdWFydGVyKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5xID0gblswXSAqIDMgLSAzLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcclxuICAgIHJldHVybiBuID8gKGQubSA9IDAsIGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLk0gPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5MID0gTWF0aC5mbG9vcihuWzBdIC8gMTAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xyXG4gICAgcmV0dXJuIG4gPyBpICsgblswXS5sZW5ndGggOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcChkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcclxuICAgIHJldHVybiBuID8gKGQucyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKDEgKyBkYXkuY291bnQoeWVhcihkKSwgZCksIHAsIDMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRNaWNyb3NlY29uZHMoZCwgcCkge1xyXG4gICAgcmV0dXJuIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcclxuICAgIHZhciBkYXkgPSBkLmdldERheSgpO1xyXG4gICAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoc3VuZGF5LmNvdW50KHllYXIoZCkgLSAxLCBkKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVySVNPKGQsIHApIHtcclxuICAgIHZhciBkYXkgPSBkLmdldERheSgpO1xyXG4gICAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGh1cnNkYXkoZCkgOiB0aHVyc2RheS5jZWlsKGQpO1xyXG4gICAgcmV0dXJuIHBhZCh0aHVyc2RheS5jb3VudCh5ZWFyKGQpLCBkKSArICh5ZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcclxuICAgIHJldHVybiBkLmdldERheSgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKG1vbmRheS5jb3VudCh5ZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFpvbmUoZCkge1xyXG4gICAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcbiAgICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxyXG4gICAgICAgICsgcGFkKHogLyA2MCB8IDAsIFwiMFwiLCAyKVxyXG4gICAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDRGF0ZSgpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENIb3VyMTIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZCgxICsgdXRjRGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDTWljcm9zZWNvbmRzKGQsIHApIHtcclxuICAgIHJldHVybiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ01vbnRoKCkgKyAxLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENTZWNvbmRzKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XHJcbiAgICB2YXIgZG93ID0gZC5nZXRVVENEYXkoKTtcclxuICAgIHJldHVybiBkb3cgPT09IDAgPyA3IDogZG93O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKHV0Y1N1bmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XHJcbiAgICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcclxuICAgIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcclxuICAgIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheShkKSB7XHJcbiAgICByZXR1cm4gZC5nZXRVVENEYXkoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENab25lKCkge1xyXG4gICAgcmV0dXJuIFwiKzAwMDBcIjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xyXG4gICAgcmV0dXJuIFwiJVwiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XHJcbiAgICByZXR1cm4gK2Q7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyhkKSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxvY2FsZSQxO1xyXG4gIHZhciB0aW1lRm9ybWF0O1xyXG4gIHZhciB0aW1lUGFyc2U7XHJcbiAgdmFyIHV0Y0Zvcm1hdDtcclxuICB2YXIgdXRjUGFyc2U7XHJcblxyXG4gIGRlZmF1bHRMb2NhbGUkMSh7XHJcbiAgICBkYXRlVGltZTogXCIleCwgJVhcIixcclxuICAgIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxyXG4gICAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcclxuICAgIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXHJcbiAgICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcclxuICAgIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxyXG4gICAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcclxuICAgIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gZGVmYXVsdExvY2FsZSQxKGRlZmluaXRpb24pIHtcclxuICAgIGxvY2FsZSQxID0gZm9ybWF0TG9jYWxlJDEoZGVmaW5pdGlvbik7XHJcbiAgICB0aW1lRm9ybWF0ID0gbG9jYWxlJDEuZm9ybWF0O1xyXG4gICAgdGltZVBhcnNlID0gbG9jYWxlJDEucGFyc2U7XHJcbiAgICB1dGNGb3JtYXQgPSBsb2NhbGUkMS51dGNGb3JtYXQ7XHJcbiAgICB1dGNQYXJzZSA9IGxvY2FsZSQxLnV0Y1BhcnNlO1xyXG4gICAgcmV0dXJuIGxvY2FsZSQxO1xyXG4gIH1cclxuXHJcbiAgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgdmFyIGZvcm1hdElzbyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nXHJcbiAgICAgID8gZm9ybWF0SXNvTmF0aXZlXHJcbiAgICAgIDogdXRjRm9ybWF0KGlzb1NwZWNpZmllcik7XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlSXNvTmF0aXZlKHN0cmluZykge1xyXG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xyXG4gICAgcmV0dXJuIGlzTmFOKGRhdGUpID8gbnVsbCA6IGRhdGU7XHJcbiAgfVxyXG5cclxuICB2YXIgcGFyc2VJc28gPSArbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIilcclxuICAgICAgPyBwYXJzZUlzb05hdGl2ZVxyXG4gICAgICA6IHV0Y1BhcnNlKGlzb1NwZWNpZmllcik7XHJcblxyXG4gIHZhciBub29wID0ge3ZhbHVlOiBmdW5jdGlvbigpIHt9fTtcclxuXHJcbiAgZnVuY3Rpb24gZGlzcGF0Y2goKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xyXG4gICAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykgfHwgL1tcXHMuXS8udGVzdCh0KSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xyXG4gICAgICBfW3RdID0gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gRGlzcGF0Y2goXykge1xyXG4gICAgdGhpcy5fID0gXztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcclxuICAgIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xyXG4gICAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xyXG4gICAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xyXG4gICAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcclxuICAgICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xyXG4gICAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxyXG4gICAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xyXG4gICAgICB2YXIgXyA9IHRoaXMuXyxcclxuICAgICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxyXG4gICAgICAgICAgdCxcclxuICAgICAgICAgIGkgPSAtMSxcclxuICAgICAgICAgIG4gPSBULmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXHJcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxyXG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XHJcbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XHJcbiAgICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcclxuICAgICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgY29weTogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XHJcbiAgICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcclxuICAgICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcclxuICAgIH0sXHJcbiAgICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XHJcbiAgICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcclxuICAgICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcclxuICAgICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xyXG4gICAgfSxcclxuICAgIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XHJcbiAgICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XHJcbiAgICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcclxuICAgICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHJldHVybiBjLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcclxuICAgICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcclxuICAgIHJldHVybiB0eXBlO1xyXG4gIH1cclxuXHJcbiAgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XHJcblxyXG4gIHZhciBuYW1lc3BhY2VzID0ge1xyXG4gICAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICB4aHRtbDogeGh0bWwsXHJcbiAgICB4bGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXHJcbiAgICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXHJcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gbmFtZXNwYWNlKG5hbWUpIHtcclxuICAgIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XHJcbiAgICBpZiAoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsIGkpKSAhPT0gXCJ4bWxuc1wiKSBuYW1lID0gbmFtZS5zbGljZShpICsgMSk7XHJcbiAgICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcclxuICAgICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xyXG4gICAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxyXG4gICAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXHJcbiAgICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0b3IobmFtZSkge1xyXG4gICAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xyXG4gICAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxyXG4gICAgICAgID8gY3JlYXRvckZpeGVkXHJcbiAgICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbm9uZSgpIHt9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdG9yKHNlbGVjdG9yKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3NlbGVjdChzZWxlY3QpIHtcclxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XHJcblxyXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xyXG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xyXG4gICAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcclxuICAgICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZW1wdHkoKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3RvckFsbChzZWxlY3Rvcikge1xyXG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0QWxsKHNlbGVjdCkge1xyXG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcclxuXHJcbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xyXG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XHJcbiAgICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xyXG4gICAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBtYXRjaGVyKHNlbGVjdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9maWx0ZXIobWF0Y2gpIHtcclxuICAgIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcclxuXHJcbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XHJcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xyXG4gICAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xyXG4gICAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc3BhcnNlKHVwZGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9lbnRlcigpIHtcclxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xyXG4gICAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XHJcbiAgICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XHJcbiAgICB0aGlzLl9uZXh0ID0gbnVsbDtcclxuICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcclxuICAgIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcclxuICB9XHJcblxyXG4gIEVudGVyTm9kZS5wcm90b3R5cGUgPSB7XHJcbiAgICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxyXG4gICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcclxuICAgIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxyXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcclxuICAgIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBjb25zdGFudCQyKHgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdmFyIGtleVByZWZpeCA9IFwiJFwiOyAvLyBQcm90ZWN0IGFnYWluc3Qga2V5cyBsaWtlIOKAnF9fcHJvdG9fX+KAnS5cclxuXHJcbiAgZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcclxuICAgIHZhciBpID0gMCxcclxuICAgICAgICBub2RlLFxyXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxyXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcclxuXHJcbiAgICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxyXG4gICAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXHJcbiAgICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXHJcbiAgICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xyXG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XHJcbiAgICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XHJcbiAgICAgICAgdXBkYXRlW2ldID0gbm9kZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXHJcbiAgICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xyXG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xyXG4gICAgdmFyIGksXHJcbiAgICAgICAgbm9kZSxcclxuICAgICAgICBub2RlQnlLZXlWYWx1ZSA9IHt9LFxyXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxyXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcclxuICAgICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxyXG4gICAgICAgIGtleVZhbHVlO1xyXG5cclxuICAgIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxyXG4gICAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xyXG4gICAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xyXG4gICAgICAgIGlmIChrZXlWYWx1ZSBpbiBub2RlQnlLZXlWYWx1ZSkge1xyXG4gICAgICAgICAgZXhpdFtpXSA9IG5vZGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxyXG4gICAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cclxuICAgIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcclxuICAgICAga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpO1xyXG4gICAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xyXG4gICAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XHJcbiAgICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XHJcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZXNbaV1dID09PSBub2RlKSkge1xyXG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZGF0YSh2YWx1ZSwga2V5KSB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XHJcbiAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihkKSB7IGRhdGFbKytqXSA9IGQ7IH0pO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXHJcbiAgICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXHJcbiAgICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCQyKHZhbHVlKTtcclxuXHJcbiAgICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcclxuICAgICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXHJcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcclxuICAgICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxyXG4gICAgICAgICAgZGF0YSA9IHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSxcclxuICAgICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcclxuICAgICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcclxuICAgICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxyXG4gICAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XHJcblxyXG4gICAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XHJcblxyXG4gICAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcclxuICAgICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcclxuICAgICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXHJcbiAgICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcclxuICAgICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XHJcbiAgICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XHJcbiAgICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XHJcbiAgICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XHJcbiAgICB1cGRhdGUuX2V4aXQgPSBleGl0O1xyXG4gICAgcmV0dXJuIHVwZGF0ZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9leGl0KCkge1xyXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2pvaW4ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xyXG4gICAgdmFyIGVudGVyID0gdGhpcy5lbnRlcigpLCB1cGRhdGUgPSB0aGlzLCBleGl0ID0gdGhpcy5leGl0KCk7XHJcbiAgICBlbnRlciA9IHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIgPyBvbmVudGVyKGVudGVyKSA6IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XHJcbiAgICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcclxuICAgIGlmIChvbmV4aXQgPT0gbnVsbCkgZXhpdC5yZW1vdmUoKTsgZWxzZSBvbmV4aXQoZXhpdCk7XHJcbiAgICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX21lcmdlKHNlbGVjdGlvbikge1xyXG5cclxuICAgIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XHJcbiAgICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcclxuICAgICAgICAgIG1lcmdlW2ldID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKDsgaiA8IG0wOyArK2opIHtcclxuICAgICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX29yZGVyKCkge1xyXG5cclxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcclxuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xyXG4gICAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcclxuICAgICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xyXG4gICAgICAgICAgbmV4dCA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc29ydChjb21wYXJlKSB7XHJcbiAgICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmckMTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XHJcbiAgICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xyXG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XHJcbiAgICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFzY2VuZGluZyQxKGEsIGIpIHtcclxuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jYWxsKCkge1xyXG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xyXG4gICAgYXJndW1lbnRzWzBdID0gdGhpcztcclxuICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9ub2RlcygpIHtcclxuICAgIHZhciBub2RlcyA9IG5ldyBBcnJheSh0aGlzLnNpemUoKSksIGkgPSAtMTtcclxuICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX25vZGUoKSB7XHJcblxyXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcclxuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcclxuICAgICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zaXplKCkge1xyXG4gICAgdmFyIHNpemUgPSAwO1xyXG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyArK3NpemU7IH0pO1xyXG4gICAgcmV0dXJuIHNpemU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZW1wdHkoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMubm9kZSgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VhY2goY2FsbGJhY2spIHtcclxuXHJcbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xyXG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcclxuICAgICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XHJcbiAgICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9hdHRyKG5hbWUsIHZhbHVlKSB7XHJcbiAgICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XHJcbiAgICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxyXG4gICAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcclxuICAgICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcclxuICAgICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcclxuICAgICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVmYXVsdFZpZXcobm9kZSkge1xyXG4gICAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxyXG4gICAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcclxuICAgICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xyXG4gICAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zdHlsZShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxyXG4gICAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXHJcbiAgICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxyXG4gICAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgZGVsZXRlIHRoaXNbbmFtZV07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzW25hbWVdID0gdmFsdWU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xyXG4gICAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9wcm9wZXJ0eShuYW1lLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXHJcbiAgICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxyXG4gICAgICAgICAgICA6IHByb3BlcnR5Q29uc3RhbnQpKG5hbWUsIHZhbHVlKSlcclxuICAgICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcclxuICAgIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XHJcbiAgICB0aGlzLl9ub2RlID0gbm9kZTtcclxuICAgIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcclxuICAgIGFkZDogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XHJcbiAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XHJcbiAgICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xyXG4gICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XHJcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcclxuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XHJcbiAgICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jbGFzc2VkKG5hbWUsIHZhbHVlKSB7XHJcbiAgICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcclxuXHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XHJcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxyXG4gICAgICAgID8gY2xhc3NlZFRydWVcclxuICAgICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xyXG4gICAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fdGV4dCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgID8gdGV4dFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgICAgICA/IHRleHRGdW5jdGlvblxyXG4gICAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxyXG4gICAgICAgIDogdGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBodG1sUmVtb3ZlKCkge1xyXG4gICAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25faHRtbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgICAgICA/IGh0bWxGdW5jdGlvblxyXG4gICAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxyXG4gICAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmFpc2UoKSB7XHJcbiAgICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3JhaXNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsb3dlcigpIHtcclxuICAgIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbG93ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9hcHBlbmQobmFtZSkge1xyXG4gICAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9pbnNlcnQobmFtZSwgYmVmb3JlKSB7XHJcbiAgICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxyXG4gICAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlKCkge1xyXG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcclxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9yZW1vdmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xyXG4gICAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XHJcbiAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XHJcbiAgICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xyXG4gICAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmUoZGVlcCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZGF0dW0odmFsdWUpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXHJcbiAgICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcclxuICB9XHJcblxyXG4gIHZhciBmaWx0ZXJFdmVudHMgPSB7fTtcclxuXHJcbiAgdmFyIGV2ZW50ID0gbnVsbDtcclxuXHJcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICBpZiAoIShcIm9ubW91c2VlbnRlclwiIGluIGVsZW1lbnQpKSB7XHJcbiAgICAgIGZpbHRlckV2ZW50cyA9IHttb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLCBtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCJ9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZmlsdGVyQ29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcclxuICAgIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgIHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0aGlzICYmICEocmVsYXRlZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSAmIDgpKSkge1xyXG4gICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihldmVudDEpIHtcclxuICAgICAgdmFyIGV2ZW50MCA9IGV2ZW50OyAvLyBFdmVudHMgY2FuIGJlIHJlZW50cmFudCAoZS5nLiwgZm9jdXMpLlxyXG4gICAgICBldmVudCA9IGV2ZW50MTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHRoaXMuX19kYXRhX18sIGluZGV4LCBncm91cCk7XHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgZXZlbnQgPSBldmVudDA7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyQxKHR5cGVuYW1lcykge1xyXG4gICAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XHJcbiAgICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XHJcbiAgICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XHJcbiAgICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBvbiA9IHRoaXMuX19vbjtcclxuICAgICAgaWYgKCFvbikgcmV0dXJuO1xyXG4gICAgICBmb3IgKHZhciBqID0gMCwgaSA9IC0xLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XHJcbiAgICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvblsrK2ldID0gbztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcclxuICAgICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG9uQWRkKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xyXG4gICAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZCwgaSwgZ3JvdXApIHtcclxuICAgICAgdmFyIG9uID0gdGhpcy5fX29uLCBvLCBsaXN0ZW5lciA9IHdyYXAodmFsdWUsIGksIGdyb3VwKTtcclxuICAgICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xyXG4gICAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcclxuICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XHJcbiAgICAgICAgICBvLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlbmFtZS50eXBlLCBsaXN0ZW5lciwgY2FwdHVyZSk7XHJcbiAgICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xyXG4gICAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XHJcbiAgICAgIGVsc2Ugb24ucHVzaChvKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fb24odHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XHJcbiAgICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXMkMSh0eXBlbmFtZSArIFwiXCIpLCBpLCBuID0gdHlwZW5hbWVzLmxlbmd0aCwgdDtcclxuXHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcclxuICAgICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xyXG4gICAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xyXG4gICAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG8udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcclxuICAgIGlmIChjYXB0dXJlID09IG51bGwpIGNhcHR1cmUgPSBmYWxzZTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBjYXB0dXJlKSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcclxuICAgIHZhciBldmVudDAgPSBldmVudDtcclxuICAgIGV2ZW50MS5zb3VyY2VFdmVudCA9IGV2ZW50O1xyXG4gICAgZXZlbnQgPSBldmVudDE7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gbGlzdGVuZXIuYXBwbHkodGhhdCwgYXJncyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBldmVudCA9IGV2ZW50MDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQobm9kZSwgdHlwZSwgcGFyYW1zKSB7XHJcbiAgICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGV2ZW50ID0gbmV3IGV2ZW50KHR5cGUsIHBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xyXG4gICAgICBpZiAocGFyYW1zKSBldmVudC5pbml0RXZlbnQodHlwZSwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlKSwgZXZlbnQuZGV0YWlsID0gcGFyYW1zLmRldGFpbDtcclxuICAgICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGlzcGF0Y2hDb25zdGFudCh0eXBlLCBwYXJhbXMpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Rpc3BhdGNoKHR5cGUsIHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXHJcbiAgICAgICAgOiBkaXNwYXRjaENvbnN0YW50KSh0eXBlLCBwYXJhbXMpKTtcclxuICB9XHJcblxyXG4gIHZhciByb290ID0gW251bGxdO1xyXG5cclxuICBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XHJcbiAgICB0aGlzLl9ncm91cHMgPSBncm91cHM7XHJcbiAgICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xyXG4gIH1cclxuXHJcbiAgU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XHJcbiAgICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxyXG4gICAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxyXG4gICAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxyXG4gICAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxyXG4gICAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXHJcbiAgICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxyXG4gICAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXHJcbiAgICBqb2luOiBzZWxlY3Rpb25fam9pbixcclxuICAgIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXHJcbiAgICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxyXG4gICAgc29ydDogc2VsZWN0aW9uX3NvcnQsXHJcbiAgICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcclxuICAgIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXHJcbiAgICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcclxuICAgIHNpemU6IHNlbGVjdGlvbl9zaXplLFxyXG4gICAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcclxuICAgIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxyXG4gICAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXHJcbiAgICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxyXG4gICAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcclxuICAgIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxyXG4gICAgdGV4dDogc2VsZWN0aW9uX3RleHQsXHJcbiAgICBodG1sOiBzZWxlY3Rpb25faHRtbCxcclxuICAgIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXHJcbiAgICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxyXG4gICAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxyXG4gICAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxyXG4gICAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxyXG4gICAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcclxuICAgIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXHJcbiAgICBvbjogc2VsZWN0aW9uX29uLFxyXG4gICAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaFxyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdChzZWxlY3Rvcikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxyXG4gICAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxyXG4gICAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc291cmNlRXZlbnQoKSB7XHJcbiAgICB2YXIgY3VycmVudCA9IGV2ZW50LCBzb3VyY2U7XHJcbiAgICB3aGlsZSAoc291cmNlID0gY3VycmVudC5zb3VyY2VFdmVudCkgY3VycmVudCA9IHNvdXJjZTtcclxuICAgIHJldHVybiBjdXJyZW50O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcG9pbnQobm9kZSwgZXZlbnQpIHtcclxuICAgIHZhciBzdmcgPSBub2RlLm93bmVyU1ZHRWxlbWVudCB8fCBub2RlO1xyXG5cclxuICAgIGlmIChzdmcuY3JlYXRlU1ZHUG9pbnQpIHtcclxuICAgICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XHJcbiAgICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcclxuICAgICAgcG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obm9kZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpO1xyXG4gICAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbW91c2Uobm9kZSkge1xyXG4gICAgdmFyIGV2ZW50ID0gc291cmNlRXZlbnQoKTtcclxuICAgIGlmIChldmVudC5jaGFuZ2VkVG91Y2hlcykgZXZlbnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0b3VjaChub2RlLCB0b3VjaGVzLCBpZGVudGlmaWVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIGlkZW50aWZpZXIgPSB0b3VjaGVzLCB0b3VjaGVzID0gc291cmNlRXZlbnQoKS5jaGFuZ2VkVG91Y2hlcztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHRvdWNoOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgIGlmICgodG91Y2ggPSB0b3VjaGVzW2ldKS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIHRvdWNoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbm9wcm9wYWdhdGlvbigpIHtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbm9ldmVudCgpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG5vZHJhZyh2aWV3KSB7XHJcbiAgICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xyXG4gICAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcclxuICAgICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcclxuICAgICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gXCJub25lXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB5ZXNkcmFnKHZpZXcsIG5vY2xpY2spIHtcclxuICAgIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXHJcbiAgICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbnVsbCk7XHJcbiAgICBpZiAobm9jbGljaykge1xyXG4gICAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG51bGwpOyB9LCAwKTtcclxuICAgIH1cclxuICAgIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XHJcbiAgICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XHJcbiAgICAgIGRlbGV0ZSByb290Ll9fbm9zZWxlY3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb25zdGFudCQzKHgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gRHJhZ0V2ZW50KHRhcmdldCwgdHlwZSwgc3ViamVjdCwgaWQsIGFjdGl2ZSwgeCwgeSwgZHgsIGR5LCBkaXNwYXRjaCkge1xyXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5zdWJqZWN0ID0gc3ViamVjdDtcclxuICAgIHRoaXMuaWRlbnRpZmllciA9IGlkO1xyXG4gICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XHJcbiAgICB0aGlzLnggPSB4O1xyXG4gICAgdGhpcy55ID0geTtcclxuICAgIHRoaXMuZHggPSBkeDtcclxuICAgIHRoaXMuZHkgPSBkeTtcclxuICAgIHRoaXMuXyA9IGRpc3BhdGNoO1xyXG4gIH1cclxuXHJcbiAgRHJhZ0V2ZW50LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZhbHVlID0gdGhpcy5fLm9uLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTtcclxuICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5fID8gdGhpcyA6IHZhbHVlO1xyXG4gIH07XHJcblxyXG4gIC8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxyXG4gIGZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoKSB7XHJcbiAgICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmJ1dHRvbjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlZmF1bHRDb250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVmYXVsdFN1YmplY3QoZCkge1xyXG4gICAgcmV0dXJuIGQgPT0gbnVsbCA/IHt4OiBldmVudC54LCB5OiBldmVudC55fSA6IGQ7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xyXG4gICAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRyYWcoKSB7XHJcbiAgICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcclxuICAgICAgICBjb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyLFxyXG4gICAgICAgIHN1YmplY3QgPSBkZWZhdWx0U3ViamVjdCxcclxuICAgICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxyXG4gICAgICAgIGdlc3R1cmVzID0ge30sXHJcbiAgICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImRyYWdcIiwgXCJlbmRcIiksXHJcbiAgICAgICAgYWN0aXZlID0gMCxcclxuICAgICAgICBtb3VzZWRvd254LFxyXG4gICAgICAgIG1vdXNlZG93bnksXHJcbiAgICAgICAgbW91c2Vtb3ZpbmcsXHJcbiAgICAgICAgdG91Y2hlbmRpbmcsXHJcbiAgICAgICAgY2xpY2tEaXN0YW5jZTIgPSAwO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRyYWcoc2VsZWN0aW9uKSB7XHJcbiAgICAgIHNlbGVjdGlvblxyXG4gICAgICAgICAgLm9uKFwibW91c2Vkb3duLmRyYWdcIiwgbW91c2Vkb3duZWQpXHJcbiAgICAgICAgLmZpbHRlcih0b3VjaGFibGUpXHJcbiAgICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIiwgdG91Y2hzdGFydGVkKVxyXG4gICAgICAgICAgLm9uKFwidG91Y2htb3ZlLmRyYWdcIiwgdG91Y2htb3ZlZClcclxuICAgICAgICAgIC5vbihcInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZ1wiLCB0b3VjaGVuZGVkKVxyXG4gICAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxyXG4gICAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtb3VzZWRvd25lZCgpIHtcclxuICAgICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xyXG4gICAgICB2YXIgZ2VzdHVyZSA9IGJlZm9yZXN0YXJ0KFwibW91c2VcIiwgY29udGFpbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIG1vdXNlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICBpZiAoIWdlc3R1cmUpIHJldHVybjtcclxuICAgICAgc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLmRyYWdcIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLmRyYWdcIiwgbW91c2V1cHBlZCwgdHJ1ZSk7XHJcbiAgICAgIG5vZHJhZyhldmVudC52aWV3KTtcclxuICAgICAgbm9wcm9wYWdhdGlvbigpO1xyXG4gICAgICBtb3VzZW1vdmluZyA9IGZhbHNlO1xyXG4gICAgICBtb3VzZWRvd254ID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgbW91c2Vkb3dueSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgIGdlc3R1cmUoXCJzdGFydFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKCkge1xyXG4gICAgICBub2V2ZW50KCk7XHJcbiAgICAgIGlmICghbW91c2Vtb3ZpbmcpIHtcclxuICAgICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0gbW91c2Vkb3dueCwgZHkgPSBldmVudC5jbGllbnRZIC0gbW91c2Vkb3dueTtcclxuICAgICAgICBtb3VzZW1vdmluZyA9IGR4ICogZHggKyBkeSAqIGR5ID4gY2xpY2tEaXN0YW5jZTI7XHJcbiAgICAgIH1cclxuICAgICAgZ2VzdHVyZXMubW91c2UoXCJkcmFnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1vdXNldXBwZWQoKSB7XHJcbiAgICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZ1wiLCBudWxsKTtcclxuICAgICAgeWVzZHJhZyhldmVudC52aWV3LCBtb3VzZW1vdmluZyk7XHJcbiAgICAgIG5vZXZlbnQoKTtcclxuICAgICAgZ2VzdHVyZXMubW91c2UoXCJlbmRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKCkge1xyXG4gICAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XHJcbiAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXHJcbiAgICAgICAgICBjID0gY29udGFpbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXHJcbiAgICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKGdlc3R1cmUgPSBiZWZvcmVzdGFydCh0b3VjaGVzW2ldLmlkZW50aWZpZXIsIGMsIHRvdWNoLCB0aGlzLCBhcmd1bWVudHMpKSB7XHJcbiAgICAgICAgICBub3Byb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICBnZXN0dXJlKFwic3RhcnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG91Y2htb3ZlZCgpIHtcclxuICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcclxuICAgICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcclxuICAgICAgICAgIG5vZXZlbnQoKTtcclxuICAgICAgICAgIGdlc3R1cmUoXCJkcmFnXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvdWNoZW5kZWQoKSB7XHJcbiAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXHJcbiAgICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XHJcblxyXG4gICAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XHJcbiAgICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCA1MDApOyAvLyBHaG9zdCBjbGlja3MgYXJlIGRlbGF5ZWQhXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcclxuICAgICAgICAgIG5vcHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgIGdlc3R1cmUoXCJlbmRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYmVmb3Jlc3RhcnQoaWQsIGNvbnRhaW5lciwgcG9pbnQsIHRoYXQsIGFyZ3MpIHtcclxuICAgICAgdmFyIHAgPSBwb2ludChjb250YWluZXIsIGlkKSwgcywgZHgsIGR5LFxyXG4gICAgICAgICAgc3VibGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvcHkoKTtcclxuXHJcbiAgICAgIGlmICghY3VzdG9tRXZlbnQobmV3IERyYWdFdmVudChkcmFnLCBcImJlZm9yZXN0YXJ0XCIsIHMsIGlkLCBhY3RpdmUsIHBbMF0sIHBbMV0sIDAsIDAsIHN1Ymxpc3RlbmVycyksIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICgoZXZlbnQuc3ViamVjdCA9IHMgPSBzdWJqZWN0LmFwcGx5KHRoYXQsIGFyZ3MpKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZHggPSBzLnggLSBwWzBdIHx8IDA7XHJcbiAgICAgICAgZHkgPSBzLnkgLSBwWzFdIHx8IDA7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pKSByZXR1cm47XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZ2VzdHVyZSh0eXBlKSB7XHJcbiAgICAgICAgdmFyIHAwID0gcCwgbjtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgXCJzdGFydFwiOiBnZXN0dXJlc1tpZF0gPSBnZXN0dXJlLCBuID0gYWN0aXZlKys7IGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcImVuZFwiOiBkZWxldGUgZ2VzdHVyZXNbaWRdLCAtLWFjdGl2ZTsgLy8gbm9icmVha1xyXG4gICAgICAgICAgY2FzZSBcImRyYWdcIjogcCA9IHBvaW50KGNvbnRhaW5lciwgaWQpLCBuID0gYWN0aXZlOyBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VzdG9tRXZlbnQobmV3IERyYWdFdmVudChkcmFnLCB0eXBlLCBzLCBpZCwgbiwgcFswXSArIGR4LCBwWzFdICsgZHksIHBbMF0gLSBwMFswXSwgcFsxXSAtIHAwWzFdLCBzdWJsaXN0ZW5lcnMpLCBzdWJsaXN0ZW5lcnMuYXBwbHksIHN1Ymxpc3RlbmVycywgW3R5cGUsIHRoYXQsIGFyZ3NdKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBkcmFnLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZmlsdGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCQzKCEhXyksIGRyYWcpIDogZmlsdGVyO1xyXG4gICAgfTtcclxuXHJcbiAgICBkcmFnLmNvbnRhaW5lciA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29udGFpbmVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCQzKF8pLCBkcmFnKSA6IGNvbnRhaW5lcjtcclxuICAgIH07XHJcblxyXG4gICAgZHJhZy5zdWJqZWN0ID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdWJqZWN0ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCQzKF8pLCBkcmFnKSA6IHN1YmplY3Q7XHJcbiAgICB9O1xyXG5cclxuICAgIGRyYWcudG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50JDMoISFfKSwgZHJhZykgOiB0b3VjaGFibGU7XHJcbiAgICB9O1xyXG5cclxuICAgIGRyYWcub24gPSBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcclxuICAgICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBkcmFnIDogdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGRyYWcuY2xpY2tEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xpY2tEaXN0YW5jZTIgPSAoXyA9ICtfKSAqIF8sIGRyYWcpIDogTWF0aC5zcXJ0KGNsaWNrRGlzdGFuY2UyKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGRyYWc7XHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkYSA9IFRlbXBsYXRlKCdkLXNsaWRlcicsIGBcclxuPHN0eWxlPlxyXG4gIDpob3N0IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB9XHJcblxyXG4gIDpob3N0KDpmb2N1cykge1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICB9XHJcblxyXG4gIC5iYWNrZ3JvdW5kIHtcclxuICAgIHBhZGRpbmc6IDlweCAwO1xyXG4gICAgY29sb3I6IHdoaXRlO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIH1cclxuXHJcbiAgLnRyYWNrIHtcclxuICAgIGhlaWdodDogM3B4O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2xhKDAsIDAlLCAwJSwgMC4yKTtcclxuICB9XHJcblxyXG4gIC50cmFjay1maWxsIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogOXB4O1xyXG4gICAgaGVpZ2h0OiAzcHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjQsIDEwMCUsIDUwJSk7XHJcbiAgfVxyXG5cclxuICAua25vYi1jb250YWluZXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAxMHB4O1xyXG4gIH1cclxuXHJcbiAgLmtub2Ige1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtNnB4O1xyXG4gICAgbGVmdDogLTZweDtcclxuICAgIHdpZHRoOiAxM3B4O1xyXG4gICAgaGVpZ2h0OiAxM3B4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0LCAxMDAlLCA1MCUpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtO1xyXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7XHJcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcclxuICB9XHJcbiAgLm1vdXNlZG93biAua25vYiB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7XHJcbiAgfVxyXG5cclxuICAua25vYi1oaWdobGlnaHQge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtNnB4O1xyXG4gICAgbGVmdDogLTZweDtcclxuICAgIHdpZHRoOiAxM3B4O1xyXG4gICAgaGVpZ2h0OiAxM3B4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuMSk7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07XHJcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4cztcclxuICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xyXG4gIH1cclxuXHJcbiAgLmZvY3VzIC5rbm9iLWhpZ2hsaWdodCB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDIpO1xyXG4gIH1cclxuXHJcbiAgLnRpY2tzIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMTZweDtcclxuICAgIGhlaWdodDogNHB4O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICB6LWluZGV4OiAtMTtcclxuICB9XHJcblxyXG4gIC50aWNrcyAudGljayB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGhzbGEoMCwgMCUsIDAlLCAwLjIpO1xyXG4gIH1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG4gIDxkaXYgY2xhc3M9J2JhY2tncm91bmQnPlxyXG4gICAgPGRpdiBjbGFzcz0ndHJhY2snPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz0ndHJhY2stZmlsbCc+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPSdrbm9iLWNvbnRhaW5lcic+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2tub2ItaGlnaGxpZ2h0Jz48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz0na25vYic+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9J3RpY2tzJz48L2Rpdj5cclxuICA8L2Rpdj5cclxuYCk7XHJcblxyXG4gIC8vIEFSSUFcclxuICAvLyBJZiB0aGUgc2xpZGVyIGhhcyBhIHZpc2libGUgbGFiZWwsIGl0IGlzIHJlZmVyZW5jZWQgYnkgYXJpYS1sYWJlbGxlZGJ5IG9uIHRoZSBzbGlkZXIgZWxlbWVudC4gT3RoZXJ3aXNlLCB0aGUgc2xpZGVyIGVsZW1lbnQgaGFzIGEgbGFiZWwgcHJvdmlkZWQgYnkgYXJpYS1sYWJlbC5cclxuICAvLyBJZiB0aGUgc2xpZGVyIGlzIHZlcnRpY2FsbHkgb3JpZW50ZWQsIGl0IGhhcyBhcmlhLW9yaWVudGF0aW9uIHNldCB0byB2ZXJ0aWNhbC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYXJpYS1vcmllbnRhdGlvbiBmb3IgYSBzbGlkZXIgaXMgaG9yaXpvbnRhbC5cclxuXHJcbiAgY29uc3Qga2V5Q29kZXMgPSB7XHJcbiAgICBsZWZ0OiAzNyxcclxuICAgIHVwOiAzOCxcclxuICAgIHJpZ2h0OiAzOSxcclxuICAgIGRvd246IDQwLFxyXG4gICAgcGFnZVVwOiAzMyxcclxuICAgIHBhZ2VEb3duOiAzNCxcclxuICAgIGVuZDogMzUsXHJcbiAgICBob21lOiAzNlxyXG4gIH07XHJcblxyXG4gIGNsYXNzIFNsaWRlciBleHRlbmRzIFQkYShIVE1MRWxlbWVudCkge1xyXG5cclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdzbGlkZXInKTtcclxuICAgICAgLy8gTWFrZXMgdGhlIGVsZW1lbnQgdGFiLWFibGUuXHJcbiAgICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgMCk7IH1cclxuXHJcbiAgICAgIC8vIEtlZXBzIHRyYWNrIG9mIGtleWJvYXJkIHZzLiBtb3VzZSBpbnRlcmFjdGlvbnMgZm9yIGZvY3VzIHJpbmdzXHJcbiAgICAgIHRoaXMubW91c2VFdmVudCA9IGZhbHNlO1xyXG5cclxuICAgICAgLy8gSGFuZGxlcyB0byBzaGFkb3cgRE9NIGVsZW1lbnRzXHJcbiAgICAgIHRoaXMua25vYiA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcua25vYi1jb250YWluZXInKTtcclxuICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy5iYWNrZ3JvdW5kJyk7XHJcbiAgICAgIHRoaXMudHJhY2tGaWxsID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy50cmFjay1maWxsJyk7XHJcbiAgICAgIHRoaXMudHJhY2sgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLnRyYWNrJyk7XHJcblxyXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgYXR0cmlidXRlc1xyXG4gICAgICB0aGlzLm1pbiA9IHRoaXMubWluID8gdGhpcy5taW4gOiAwO1xyXG4gICAgICB0aGlzLm1heCA9IHRoaXMubWF4ID8gdGhpcy5tYXggOiAxMDA7XHJcbiAgICAgIHRoaXMuc2NhbGUgPSBsaW5lYXIkMSgpLmRvbWFpbihbdGhpcy5taW4sIHRoaXMubWF4XSkucmFuZ2UoWzAsIDFdKS5jbGFtcCh0cnVlKTtcclxuXHJcbiAgICAgIHRoaXMub3JpZ2luID0gdGhpcy5vcmlnaW4gIT09IHVuZGVmaW5lZCA/IHRoaXMub3JpZ2luIDogdGhpcy5taW47XHJcbiAgICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCA/IHRoaXMuc3RlcCA6IDE7XHJcbiAgICAgIHRoaXMudXBkYXRlKHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogMCk7XHJcblxyXG4gICAgICB0aGlzLnRpY2tzID0gdGhpcy50aWNrcyA/IHRoaXMudGlja3MgOiBmYWxzZTtcclxuICAgICAgdGhpcy5yZW5kZXJUaWNrcygpO1xyXG5cclxuICAgICAgdGhpcy5kcmFnID0gZHJhZygpXHJcbiAgICAgICAgLmNvbnRhaW5lcih0aGlzLmJhY2tncm91bmQpXHJcbiAgICAgICAgLm9uKCdzdGFydCcsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubW91c2VFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJhY2tncm91bmQuY2xhc3NMaXN0LmFkZCgnbW91c2Vkb3duJyk7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIHRoaXMuZHJhZ1VwZGF0ZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdkcmFnJywgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kcmFnVXBkYXRlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ2VuZCcsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubW91c2VFdmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNsYXNzTGlzdC5yZW1vdmUoJ21vdXNlZG93bicpO1xyXG4gICAgICAgICAgdGhpcy5kcmFnVXBkYXRlKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZSAhPT0gdGhpcy52YWx1ZSkgdGhpcy5kaXNwYXRjaENoYW5nZSgpO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZHJhZyhzZWxlY3QodGhpcy5iYWNrZ3JvdW5kKSk7XHJcblxyXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCAoKSA9PiB7XHJcbiAgICAgICAgaWYoIXRoaXMubW91c2VFdmVudCkge1xyXG4gICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmQuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXMnKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7cmV0dXJuIFsnbWluJywgJ21heCcsICd2YWx1ZScsICdzdGVwJywgJ3RpY2tzJywgJ29yaWdpbicsICd0aWNrVmFsdWVzJywgJ3RpY2tMYWJlbHMnXTsgfVxyXG5cclxuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcclxuICAgICAgaWYgKGlzTmFOKG5ld1ZhbHVlKSB8fCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IG5ld1ZhbHVlID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgIGlmIChhdHRyID09ICdtaW4nKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSArbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtaW4nLCB0aGlzLm1pbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF0dHIgPT0gJ21heCcpIHtcclxuICAgICAgICB0aGlzLm1heCA9ICtuZXdWYWx1ZTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIHRoaXMubWF4KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXR0ciA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoK25ld1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXR0ciA9PSAnb3JpZ2luJykge1xyXG4gICAgICAgIHRoaXMub3JpZ2luID0gK25ld1ZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlKHRoaXMudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhdHRyID09ICdzdGVwJykge1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc3RlcCA9ICtuZXdWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF0dHIgPT0gJ3RpY2tzJykge1xyXG4gICAgICAgIHRoaXMudGlja3MgPSAobmV3VmFsdWUgPT09ICcnID8gdHJ1ZSA6IG5ld1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihldmVudCkge1xyXG4gICAgICB0aGlzLmNoYW5nZVZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgbGV0IHN0b3BQcm9wYWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgY2FzZSBrZXlDb2Rlcy5sZWZ0OlxyXG4gICAgICBjYXNlIGtleUNvZGVzLmRvd246XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy52YWx1ZSAtIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBrZXlDb2Rlcy5yaWdodDpcclxuICAgICAgY2FzZSBrZXlDb2Rlcy51cDpcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlICsgdGhpcy5zdGVwKTtcclxuICAgICAgICBzdG9wUHJvcGFnYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIGtleUNvZGVzLnBhZ2VVcDpcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlICsgdGhpcy5zdGVwICogMTApO1xyXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIGtleUNvZGVzLnBhZ2VEb3duOlxyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMudmFsdWUgKyB0aGlzLnN0ZXAgKiAxMCk7XHJcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBrZXlDb2Rlcy5ob21lOlxyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMubWluKTtcclxuICAgICAgICBzdG9wUHJvcGFnYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIGtleUNvZGVzLmVuZDpcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLm1heCk7XHJcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzJyk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZSAhPT0gdGhpcy52YWx1ZSkgdGhpcy5kaXNwYXRjaENoYW5nZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVWYWx1ZVJhbmdlKG1pbiwgbWF4LCB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obWF4LCB2YWx1ZSksIG1pbik7XHJcbiAgICB9XHJcblxyXG4gICAgcXVhbnRpemVWYWx1ZSh2YWx1ZSwgc3RlcCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBkcmFnVXBkYXRlKCkge1xyXG4gICAgICBjb25zdCBiYm94ID0gdGhpcy5iYWNrZ3JvdW5kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBjb25zdCB4ID0gZXZlbnQueDtcclxuICAgICAgY29uc3Qgd2lkdGggPSBiYm94LndpZHRoO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLnNjYWxlLmludmVydCh4IC8gd2lkdGgpKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUodmFsdWUpIHtcclxuICAgICAgbGV0IHYgPSB2YWx1ZTtcclxuICAgICAgaWYgKHRoaXMuc3RlcCAhPT0gJ2FueScpIHtcclxuICAgICAgICB2ID0gdGhpcy5xdWFudGl6ZVZhbHVlKHZhbHVlLCB0aGlzLnN0ZXApO1xyXG4gICAgICB9XHJcbiAgICAgIHYgPSB0aGlzLnZhbGlkYXRlVmFsdWVSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgsIHYpO1xyXG4gICAgICBpZiAodGhpcy5jb25uZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLmtub2Iuc3R5bGUubGVmdCA9IHRoaXMuc2NhbGUodikgKiAxMDAgKyAnJSc7XHJcbiAgICAgICAgdGhpcy50cmFja0ZpbGwuc3R5bGUud2lkdGggPSB0aGlzLnNjYWxlKHRoaXMubWluICsgTWF0aC5hYnModiAtIHRoaXMub3JpZ2luKSkgKiAxMDAgKyAnJSc7XHJcbiAgICAgICAgdGhpcy50cmFja0ZpbGwuc3R5bGUubGVmdCA9IHRoaXMuc2NhbGUoTWF0aC5taW4odiwgdGhpcy5vcmlnaW4pKSAqIDEwMCArICclJztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy52YWx1ZSAhPT0gdikge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2O1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaElucHV0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBEaXNwYXRjaGVzIG9ubHkgb24gYSBjb21taXR0ZWQgY2hhbmdlIChiYXNpY2FsbHkgb25seSBvbiBtb3VzZXVwKS5cclxuICAgIGRpc3BhdGNoQ2hhbmdlKCkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEV2ZW50KCdjaGFuZ2UnKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGUsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEaXNwYXRjaGVzIG9uIGVhY2ggdmFsdWUgY2hhbmdlLlxyXG4gICAgZGlzcGF0Y2hJbnB1dCgpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFdmVudCgnaW5wdXQnKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGUsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJUaWNrcygpIHtcclxuICAgICAgY29uc3QgdGlja3NDb250YWluZXIgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLnRpY2tzJyk7XHJcbiAgICAgIGlmICh0aGlzLnRpY2tzICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGxldCB0aWNrRGF0YSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRpY2tzID4gMCkge1xyXG4gICAgICAgICAgdGlja0RhdGEgPSB0aGlzLnNjYWxlLnRpY2tzKHRoaXMudGlja3MpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGVwID09PSAnYW55Jykge1xyXG4gICAgICAgICAgdGlja0RhdGEgPSB0aGlzLnNjYWxlLnRpY2tzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRpY2tEYXRhID0gcmFuZ2UodGhpcy5taW4sIHRoaXMubWF4ICsgMWUtNiwgdGhpcy5zdGVwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGlja0RhdGEuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRpY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIHRpY2suY2xhc3NMaXN0LmFkZCgndGljaycpO1xyXG4gICAgICAgICAgdGljay5zdHlsZS5sZWZ0ID0gdGhpcy5zY2FsZShkKSAqIDEwMCArICclJztcclxuICAgICAgICAgIHRpY2tzQ29udGFpbmVyLmFwcGVuZENoaWxkKHRpY2spO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRpY2tzQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBsb2dvID0gXCI8c3ZnIHZpZXdCb3g9XFxcIi02MDcgNDE5IDY0IDY0XFxcIj5cXG4gIDxwYXRoIGQ9XFxcIk0tNTczLjQsNDc4LjljLTgsMC0xNC42LTYuNC0xNC42LTE0LjVzMTQuNi0yNS45LDE0LjYtNDAuOGMwLDE0LjksMTQuNiwzMi44LDE0LjYsNDAuOFMtNTY1LjQsNDc4LjktNTczLjQsNDc4Ljl6XFxcIi8+XFxuPC9zdmc+XFxuXCI7XHJcblxyXG4gIGNvbnN0IGhlYWRlclRlbXBsYXRlID0gYFxyXG48c3R5bGU+XHJcbmRpc3RpbGwtaGVhZGVyIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgaGVpZ2h0OiA2MHB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCgyMDAsIDYwJSwgMTUlKTtcclxuICB3aWR0aDogMTAwJTtcclxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIHotaW5kZXg6IDI7XHJcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA4KTtcclxuICBib3gtc2hhZG93OiAwIDFweCA2cHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcclxufVxyXG5kaXN0aWxsLWhlYWRlciAuY29udGVudCB7XHJcbiAgaGVpZ2h0OiA3MHB4O1xyXG4gIGdyaWQtY29sdW1uOiBwYWdlO1xyXG59XHJcbmRpc3RpbGwtaGVhZGVyIGEge1xyXG4gIGZvbnQtc2l6ZTogMTZweDtcclxuICBoZWlnaHQ6IDYwcHg7XHJcbiAgbGluZS1oZWlnaHQ6IDYwcHg7XHJcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XHJcbiAgcGFkZGluZzogMjJweCAwO1xyXG59XHJcbmRpc3RpbGwtaGVhZGVyIGE6aG92ZXIge1xyXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpO1xyXG59XHJcbmRpc3RpbGwtaGVhZGVyIHN2ZyB7XHJcbiAgd2lkdGg6IDI0cHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogNHB4O1xyXG4gIG1hcmdpbi1yaWdodDogMnB4O1xyXG59XHJcbkBtZWRpYShtaW4td2lkdGg6IDEwODBweCkge1xyXG4gIGRpc3RpbGwtaGVhZGVyIHtcclxuICAgIGhlaWdodDogNzBweDtcclxuICB9XHJcbiAgZGlzdGlsbC1oZWFkZXIgYSB7XHJcbiAgICBoZWlnaHQ6IDcwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogNzBweDtcclxuICAgIHBhZGRpbmc6IDI4cHggMDtcclxuICB9XHJcbiAgZGlzdGlsbC1oZWFkZXIgLmxvZ28ge1xyXG4gIH1cclxufVxyXG5kaXN0aWxsLWhlYWRlciBzdmcgcGF0aCB7XHJcbiAgZmlsbDogbm9uZTtcclxuICBzdHJva2U6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcclxuICBzdHJva2Utd2lkdGg6IDNweDtcclxufVxyXG5kaXN0aWxsLWhlYWRlciAubG9nbyB7XHJcbiAgZm9udC1zaXplOiAxN3B4O1xyXG4gIGZvbnQtd2VpZ2h0OiAyMDA7XHJcbn1cclxuZGlzdGlsbC1oZWFkZXIgLm5hdiB7XHJcbiAgZmxvYXQ6IHJpZ2h0O1xyXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XHJcbn1cclxuZGlzdGlsbC1oZWFkZXIgLm5hdiBhIHtcclxuICBmb250LXNpemU6IDEycHg7XHJcbiAgbWFyZ2luLWxlZnQ6IDI0cHg7XHJcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcclxufVxyXG48L3N0eWxlPlxyXG48ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gIDxhIGhyZWY9XCIvXCIgY2xhc3M9XCJsb2dvXCI+XHJcbiAgICAke2xvZ299XHJcbiAgICBEaXN0aWxsXHJcbiAgPC9hPlxyXG4gIDxuYXYgY2xhc3M9XCJuYXZcIj5cclxuICAgIDxhIGhyZWY9XCIvYWJvdXQvXCI+QWJvdXQ8L2E+XHJcbiAgICA8YSBocmVmPVwiL3ByaXplL1wiPlByaXplPC9hPlxyXG4gICAgPGEgaHJlZj1cIi9qb3VybmFsL1wiPlN1Ym1pdDwvYT5cclxuICA8L25hdj5cclxuPC9kaXY+XHJcbmA7XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCRiID0gVGVtcGxhdGUoJ2Rpc3RpbGwtaGVhZGVyJywgaGVhZGVyVGVtcGxhdGUsIGZhbHNlKTtcclxuXHJcbiAgY2xhc3MgRGlzdGlsbEhlYWRlciBleHRlbmRzIFQkYihIVE1MRWxlbWVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3Qgc3R5bGVzJDIgPSBgXHJcbjxzdHlsZT5cclxuICBkaXN0aWxsLWFwcGVuZGl4IHtcclxuICAgIGNvbnRhaW46IGxheW91dCBzdHlsZTtcclxuICB9XHJcblxyXG4gIGRpc3RpbGwtYXBwZW5kaXggLmNpdGF0aW9uIHtcclxuICAgIGZvbnQtc2l6ZTogMTFweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxNXB4O1xyXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7XHJcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xyXG4gICAgcGFkZGluZzogMTBweCAxOHB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgY29sb3I6IHJnYmEoMTUwLCAxNTAsIDE1MCwgMSk7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgbWFyZ2luLXRvcDogLTEycHg7XHJcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XHJcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XHJcbiAgfVxyXG5cclxuICBkaXN0aWxsLWFwcGVuZGl4ID4gKiB7XHJcbiAgICBncmlkLWNvbHVtbjogdGV4dDtcclxuICB9XHJcbjwvc3R5bGU+XHJcbmA7XHJcblxyXG4gIGZ1bmN0aW9uIGFwcGVuZGl4VGVtcGxhdGUoZnJvbnRNYXR0ZXIpIHtcclxuICAgIGxldCBodG1sID0gc3R5bGVzJDI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBmcm9udE1hdHRlci5naXRodWJVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGh0bWwgKz0gYFxyXG4gICAgPGgzIGlkPVwidXBkYXRlcy1hbmQtY29ycmVjdGlvbnNcIj5VcGRhdGVzIGFuZCBDb3JyZWN0aW9uczwvaDM+XHJcbiAgICA8cD5gO1xyXG4gICAgICBpZiAoZnJvbnRNYXR0ZXIuZ2l0aHViQ29tcGFyZVVwZGF0ZXNVcmwpIHtcclxuICAgICAgICBodG1sICs9IGA8YSBocmVmPVwiJHtmcm9udE1hdHRlci5naXRodWJDb21wYXJlVXBkYXRlc1VybH1cIj5WaWV3IGFsbCBjaGFuZ2VzPC9hPiB0byB0aGlzIGFydGljbGUgc2luY2UgaXQgd2FzIGZpcnN0IHB1Ymxpc2hlZC5gO1xyXG4gICAgICB9XHJcbiAgICAgIGh0bWwgKz0gYFxyXG4gICAgSWYgeW91IHNlZSBtaXN0YWtlcyBvciB3YW50IHRvIHN1Z2dlc3QgY2hhbmdlcywgcGxlYXNlIDxhIGhyZWY9XCIke2Zyb250TWF0dGVyLmdpdGh1YlVybCArICcvaXNzdWVzL25ldyd9XCI+Y3JlYXRlIGFuIGlzc3VlIG9uIEdpdEh1YjwvYT4uIDwvcD5cclxuICAgIGA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgam91cm5hbCA9IGZyb250TWF0dGVyLmpvdXJuYWw7XHJcbiAgICBpZiAodHlwZW9mIGpvdXJuYWwgIT09ICd1bmRlZmluZWQnICYmIGpvdXJuYWwudGl0bGUgPT09ICdEaXN0aWxsJykge1xyXG4gICAgICBodG1sICs9IGBcclxuICAgIDxoMyBpZD1cInJldXNlXCI+UmV1c2U8L2gzPlxyXG4gICAgPHA+RGlhZ3JhbXMgYW5kIHRleHQgYXJlIGxpY2Vuc2VkIHVuZGVyIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gPGEgaHJlZj1cImh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvXCI+Q0MtQlkgNC4wPC9hPiB3aXRoIHRoZSA8YSBjbGFzcz1cImdpdGh1YlwiIGhyZWY9XCIke2Zyb250TWF0dGVyLmdpdGh1YlVybH1cIj5zb3VyY2UgYXZhaWxhYmxlIG9uIEdpdEh1YjwvYT4sIHVubGVzcyBub3RlZCBvdGhlcndpc2UuIFRoZSBmaWd1cmVzIHRoYXQgaGF2ZSBiZWVuIHJldXNlZCBmcm9tIG90aGVyIHNvdXJjZXMgZG9u4oCZdCBmYWxsIHVuZGVyIHRoaXMgbGljZW5zZSBhbmQgY2FuIGJlIHJlY29nbml6ZWQgYnkgYSBub3RlIGluIHRoZWlyIGNhcHRpb246IOKAnEZpZ3VyZSBmcm9tIOKApuKAnS48L3A+XHJcbiAgICBgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZnJvbnRNYXR0ZXIucHVibGlzaGVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgaHRtbCArPSBgXHJcbiAgICA8aDMgaWQ9XCJjaXRhdGlvblwiPkNpdGF0aW9uPC9oMz5cclxuICAgIDxwPkZvciBhdHRyaWJ1dGlvbiBpbiBhY2FkZW1pYyBjb250ZXh0cywgcGxlYXNlIGNpdGUgdGhpcyB3b3JrIGFzPC9wPlxyXG4gICAgPHByZSBjbGFzcz1cImNpdGF0aW9uIHNob3J0XCI+JHtmcm9udE1hdHRlci5jb25jYXRlbmF0ZWRBdXRob3JzfSwgXCIke2Zyb250TWF0dGVyLnRpdGxlfVwiLCBEaXN0aWxsLCAke2Zyb250TWF0dGVyLnB1Ymxpc2hlZFllYXJ9LjwvcHJlPlxyXG4gICAgPHA+QmliVGVYIGNpdGF0aW9uPC9wPlxyXG4gICAgPHByZSBjbGFzcz1cImNpdGF0aW9uIGxvbmdcIj4ke3NlcmlhbGl6ZUZyb250bWF0dGVyVG9CaWJ0ZXgoZnJvbnRNYXR0ZXIpfTwvcHJlPlxyXG4gICAgYDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG4gIGNsYXNzIERpc3RpbGxBcHBlbmRpeCBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2Rpc3RpbGwtYXBwZW5kaXgnOyB9XHJcblxyXG4gICAgc2V0IGZyb250TWF0dGVyKGZyb250TWF0dGVyKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gYXBwZW5kaXhUZW1wbGF0ZShmcm9udE1hdHRlcik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY29uc3QgZm9vdGVyVGVtcGxhdGUgPSBgXHJcbjxzdHlsZT5cclxuXHJcbjpob3N0IHtcclxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xyXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XHJcbiAgcGFkZGluZzogMnJlbSAwO1xyXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDE4MCwgNSUsIDE1JSk7IC8qaHNsKDIwMCwgNjAlLCAxNSUpOyovXHJcbiAgdGV4dC1hbGlnbjogbGVmdDtcclxuICBjb250YWluOiBjb250ZW50O1xyXG59XHJcblxyXG4uZm9vdGVyLWNvbnRhaW5lciAubG9nbyBzdmcge1xyXG4gIHdpZHRoOiAyNHB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB0b3A6IDRweDtcclxuICBtYXJnaW4tcmlnaHQ6IDJweDtcclxufVxyXG5cclxuLmZvb3Rlci1jb250YWluZXIgLmxvZ28gc3ZnIHBhdGgge1xyXG4gIGZpbGw6IG5vbmU7XHJcbiAgc3Ryb2tlOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XHJcbiAgc3Ryb2tlLXdpZHRoOiAzcHg7XHJcbn1cclxuXHJcbi5mb290ZXItY29udGFpbmVyIC5sb2dvIHtcclxuICBmb250LXNpemU6IDE3cHg7XHJcbiAgZm9udC13ZWlnaHQ6IDIwMDtcclxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xyXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICBtYXJnaW4tcmlnaHQ6IDZweDtcclxufVxyXG5cclxuLmZvb3Rlci1jb250YWluZXIge1xyXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xyXG59XHJcblxyXG4uZm9vdGVyLWNvbnRhaW5lciAubmF2IHtcclxuICBmb250LXNpemU6IDAuOWVtO1xyXG4gIG1hcmdpbi10b3A6IDEuNWVtO1xyXG59XHJcblxyXG4uZm9vdGVyLWNvbnRhaW5lciAubmF2IGEge1xyXG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XHJcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XHJcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcblxyXG48L3N0eWxlPlxyXG5cclxuPGRpdiBjbGFzcz0nZm9vdGVyLWNvbnRhaW5lcic+XHJcblxyXG4gIDxhIGhyZWY9XCIvXCIgY2xhc3M9XCJsb2dvXCI+XHJcbiAgICAke2xvZ299XHJcbiAgICBEaXN0aWxsXHJcbiAgPC9hPiBpcyBkZWRpY2F0ZWQgdG8gY2xlYXIgZXhwbGFuYXRpb25zIG9mIG1hY2hpbmUgbGVhcm5pbmdcclxuXHJcbiAgPGRpdiBjbGFzcz1cIm5hdlwiPlxyXG4gICAgPGEgaHJlZj1cImh0dHBzOi8vZGlzdGlsbC5wdWIvYWJvdXQvXCI+QWJvdXQ8L2E+XHJcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi9qb3VybmFsL1wiPlN1Ym1pdDwvYT5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL2Rpc3RpbGwucHViL3ByaXplL1wiPlByaXplPC9hPlxyXG4gICAgPGEgaHJlZj1cImh0dHBzOi8vZGlzdGlsbC5wdWIvYXJjaGl2ZS9cIj5BcmNoaXZlPC9hPlxyXG4gICAgPGEgaHJlZj1cImh0dHBzOi8vZGlzdGlsbC5wdWIvcnNzLnhtbFwiPlJTUzwvYT5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vZGlzdGlsbHB1YlwiPkdpdEh1YjwvYT5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL2Rpc3RpbGxwdWJcIj5Ud2l0dGVyPC9hPlxyXG4gICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IElTU04gMjQ3Ni0wNzU3XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbmA7XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCRjID0gVGVtcGxhdGUoJ2Rpc3RpbGwtZm9vdGVyJywgZm9vdGVyVGVtcGxhdGUpO1xyXG5cclxuICBjbGFzcyBEaXN0aWxsRm9vdGVyIGV4dGVuZHMgVCRjKEhUTUxFbGVtZW50KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBsZXQgdGVtcGxhdGVJc0xvYWRpbmcgPSBmYWxzZTtcclxuICBsZXQgcnVubGV2ZWwgPSAwO1xyXG4gIGNvbnN0IGluaXRpYWxpemUgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh3aW5kb3cuZGlzdGlsbC5ydW5sZXZlbCA8IDEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5zdWZmaWNpZW50IFJ1bmxldmVsIGZvciBEaXN0aWxsIFRlbXBsYXRlIVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiAxLiBGbGFnIHRoYXQgd2UncmUgYmVpbmcgbG9hZGVkICovXHJcbiAgICBpZiAoXCJkaXN0aWxsXCIgaW4gd2luZG93ICYmIHdpbmRvdy5kaXN0aWxsLnRlbXBsYXRlSXNMb2FkaW5nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBcIlJ1bmxldmVsIDE6IERpc3RpbGwgVGVtcGxhdGUgaXMgZ2V0dGluZyBsb2FkZWQgbW9yZSB0aGFuIG9uY2UsIGFib3J0aW5nIVwiXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3aW5kb3cuZGlzdGlsbC50ZW1wbGF0ZUlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCAxOiBEaXN0aWxsIFRlbXBsYXRlIGhhcyBzdGFydGVkIGxvYWRpbmcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIDIuIEFkZCBzdHlsZXMgaWYgdGhleSB3ZXJlbid0IGFkZGVkIGR1cmluZyBwcmVyZW5kZXJpbmcgKi9cclxuICAgIG1ha2VTdHlsZVRhZyhkb2N1bWVudCk7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMTogU3RhdGljIERpc3RpbGwgc3R5bGVzIGhhdmUgYmVlbiBhZGRlZC5cIik7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMS0+Mi5cIik7XHJcbiAgICB3aW5kb3cuZGlzdGlsbC5ydW5sZXZlbCArPSAxO1xyXG5cclxuICAgIC8qIDMuIFJlZ2lzdGVyIENvbnRyb2xsZXIgbGlzdGVuZXIgZnVuY3Rpb25zICovXHJcbiAgICAvKiBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIGNvbXBvbmVudHMgdG8gdGhlaXIgY29ubmVjdGVkIGNhbGxiYWNrcyBoYXZlIGEgY29udHJvbGxlciB0byB0YWxrIHRvLiAqL1xyXG4gICAgZm9yIChjb25zdCBbZnVuY3Rpb25OYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoQ29udHJvbGxlci5saXN0ZW5lcnMpKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBjYWxsYmFjayk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlJ1bmxldmVsIDI6IENvbnRyb2xsZXIgbGlzdGVuZXJzIG5lZWQgdG8gYmUgZnVuY3Rpb25zIVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDI6IFdlIGNhbiBub3cgbGlzdGVuIHRvIGNvbnRyb2xsZXIgZXZlbnRzLlwiKTtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCAyLT4zLlwiKTtcclxuICAgIHdpbmRvdy5kaXN0aWxsLnJ1bmxldmVsICs9IDE7XHJcblxyXG4gICAgLyogNC4gUmVnaXN0ZXIgY29tcG9uZW50cyAqL1xyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtcclxuICAgICAgQWJzdHJhY3QsIEFwcGVuZGl4LCBBcnRpY2xlLCBCaWJsaW9ncmFwaHksIEJ5bGluZSwgQ2l0ZSwgQ2l0YXRpb25MaXN0LCBDb2RlLFxyXG4gICAgICBGb290bm90ZSwgRm9vdG5vdGVMaXN0LCBGcm9udE1hdHRlciQxLCBIb3ZlckJveCwgVGl0bGUsIERNYXRoLCBSZWZlcmVuY2VzLCBUT0MsIEZpZ3VyZSxcclxuICAgICAgU2xpZGVyLCBJbnRlcnN0aXRpYWxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgZGlzdGlsbENvbXBvbmVudHMgPSBbRGlzdGlsbEhlYWRlciwgRGlzdGlsbEFwcGVuZGl4LCBEaXN0aWxsRm9vdGVyXTtcclxuXHJcbiAgICBpZiAod2luZG93LmRpc3RpbGwucnVubGV2ZWwgPCAyKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkluc3VmZmljaWVudCBSdW5sZXZlbCBmb3IgYWRkaW5nIGN1c3RvbSBlbGVtZW50cyFcIik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbGxDb21wb25lbnRzID0gY29tcG9uZW50cy5jb25jYXQoZGlzdGlsbENvbXBvbmVudHMpO1xyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgYWxsQ29tcG9uZW50cykge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMjogUmVnaXN0ZXJpbmcgY3VzdG9tIGVsZW1lbnQ6IFwiICsgY29tcG9uZW50LmlzKTtcclxuICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKGNvbXBvbmVudC5pcywgY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFxyXG4gICAgICBcIlJ1bmxldmVsIDM6IERpc3RpbGwgVGVtcGxhdGUgZmluaXNoZWQgcmVnaXN0ZXJpbmcgY3VzdG9tIGVsZW1lbnRzLlwiXHJcbiAgICApO1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDMtPjQuXCIpO1xyXG4gICAgd2luZG93LmRpc3RpbGwucnVubGV2ZWwgKz0gMTtcclxuXHJcbiAgICAvLyBJZiB0ZW1wbGF0ZSB3YXMgYWRkZWQgYWZ0ZXIgRE9NQ29udGVudExvYWRlZCB3ZSBtYXkgaGF2ZSBtaXNzZWQgdGhhdCBldmVudC5cclxuICAgIC8vIENvbnRyb2xsZXIgd2lsbCBjaGVjayBmb3IgdGhhdCBjYXNlLCBzbyB0cmlnZ2VyIHRoZSBldmVudCBleHBsaWNpdGx5OlxyXG4gICAgaWYgKGRvbUNvbnRlbnRMb2FkZWQoKSkge1xyXG4gICAgICBDb250cm9sbGVyLmxpc3RlbmVycy5ET01Db250ZW50TG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDQ6IERpc3RpbGwgVGVtcGxhdGUgaW5pdGlhbGlzYXRpb24gY29tcGxldGUuXCIpO1xyXG4gICAgd2luZG93LmRpc3RpbGwudGVtcGxhdGVJc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHdpbmRvdy5kaXN0aWxsLnRlbXBsYXRlSGFzTG9hZGVkID0gdHJ1ZTtcclxuICB9O1xyXG5cclxuICB3aW5kb3cuZGlzdGlsbCA9IHsgcnVubGV2ZWwsIGluaXRpYWxpemUsIHRlbXBsYXRlSXNMb2FkaW5nIH07XHJcblxyXG4gIC8qIDAuIENoZWNrIGJyb3dzZXIgZmVhdHVyZSBzdXBwb3J0OyBzeW5jaHJvbm91c2x5IHBvbHlmaWxsIGlmIG5lZWRlZCAqL1xyXG4gIGlmIChQb2x5ZmlsbHMuYnJvd3NlclN1cHBvcnRzQWxsRmVhdHVyZXMoKSkge1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDA6IE5vIG5lZWQgZm9yIHBvbHlmaWxscy5cIik7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMC0+MS5cIik7XHJcbiAgICB3aW5kb3cuZGlzdGlsbC5ydW5sZXZlbCArPSAxO1xyXG4gICAgd2luZG93LmRpc3RpbGwuaW5pdGlhbGl6ZSgpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMDogRGlzdGlsbCBUZW1wbGF0ZSBpcyBsb2FkaW5nIHBvbHlmaWxscy5cIik7XHJcbiAgICBQb2x5ZmlsbHMubG9hZCh3aW5kb3cuZGlzdGlsbC5pbml0aWFsaXplKTtcclxuICB9XHJcblxyXG59KSkpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD10ZW1wbGF0ZS52Mi5qcy5tYXBcclxuIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJkZWZpbmUiLCJhbWQiLCJkYXlzIiwibW9udGhzIiwiemVyb1BhZCIsIm4iLCJSRkMiLCJkYXRlIiwiZGF5IiwiZ2V0RGF5Iiwic3Vic3RyaW5nIiwicGFkZGVkRGF0ZSIsImdldERhdGUiLCJtb250aCIsImdldE1vbnRoIiwieWVhciIsImdldEZ1bGxZZWFyIiwidG9TdHJpbmciLCJob3VycyIsImdldFVUQ0hvdXJzIiwibWludXRlcyIsImdldFVUQ01pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsImNvbmNhdCIsIm9iamVjdEZyb21NYXAiLCJtYXAiLCJvYmplY3QiLCJBcnJheSIsImZyb20iLCJyZWR1Y2UiLCJfcmVmIiwiX3JlZjIiLCJfc2xpY2VkVG9BcnJheSIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmluZVByb3BlcnR5IiwibWFwRnJvbU9iamVjdCIsIk1hcCIsInByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJzZXQiLCJBdXRob3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJuYW1lIiwiYXV0aG9yIiwicGVyc29uYWxVUkwiLCJhdXRob3JVUkwiLCJhZmZpbGlhdGlvbiIsImFmZmlsaWF0aW9uVVJMIiwiYWZmaWxpYXRpb25zIiwiX2NyZWF0ZUNsYXNzIiwiZ2V0IiwibmFtZXMiLCJzcGxpdCIsInNsaWNlIiwibGVuZ3RoIiwiam9pbiIsIm1lcmdlRnJvbVlNTEZyb250bWF0dGVyIiwidGFyZ2V0Iiwic291cmNlIiwidGl0bGUiLCJwdWJsaXNoZWQiLCJEYXRlIiwicHVibGlzaGVkRGF0ZSIsImNvbnN0cnVjdG9yIiwiU3RyaW5nIiwiY29uc29sZSIsImVycm9yIiwiZGVzY3JpcHRpb24iLCJhdXRob3JzIiwiYXV0aG9yT2JqZWN0Iiwia2F0ZXgiLCJwYXNzd29yZCIsImRvaSIsIkZyb250TWF0dGVyIiwiYmlibGlvZ3JhcGh5IiwiYmlibGlvZ3JhcGh5UGFyc2VkIiwiY2l0YXRpb25zIiwiY2l0YXRpb25zQ29sbGVjdGVkIiwiam91cm5hbCIsInVuZGVmaW5lZCIsIl91cmwiLCJkaXN0aWxsUGF0aCIsInVybCIsImdpdGh1YlBhdGgiLCJfcHJldmlld1VSTCIsInVwZGF0ZWREYXRlIiwidG9JU09TdHJpbmciLCJ2b2x1bWUiLCJwdWJsaXNoZWRZZWFyIiwiRXJyb3IiLCJsYXN0TmFtZSIsImZpcnN0TmFtZSIsInNsdWciLCJ0b0xvd2VyQ2FzZSIsIl90aGlzIiwiY2l0YXRpb25LZXkiLCJlbnRyeSIsIl9iaWJsaW9ncmFwaHkiLCJfdHlwZW9mIiwiYXNzaWduVG9PYmplY3QiLCJiaWJsaW9ncmFwaHlFbnRyaWVzIiwiZ2l0aHViVXJsIiwicHJldmlld1VSTCIsImlzc3VlIiwicHVibGlzaGVkRGF0ZVJGQyIsInB1Ymxpc2hlZE1vbnRoIiwicHVibGlzaGVkRGF5IiwicHVibGlzaGVkTW9udGhQYWRkZWQiLCJwdWJsaXNoZWREYXlQYWRkZWQiLCJ1cGRhdGVkRGF0ZVJGQyIsImNvbmNhdGVuYXRlZEF1dGhvcnMiLCJiaWJ0ZXhBdXRob3JzIiwiZnJvbU9iamVjdCIsImZyb250TWF0dGVyIiwiTXV0YXRpbmciLCJzdXBlcmNsYXNzIiwiX3N1cGVyY2xhc3MiLCJfY2xhc3MiLCJfdGhpczIiLCJfY2FsbFN1cGVyIiwib3B0aW9ucyIsImNoaWxkTGlzdCIsImNoYXJhY3RlckRhdGEiLCJzdWJ0cmVlIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwiZGlzY29ubmVjdCIsInJlbmRlcklmUG9zc2libGUiLCJvYnNlcnZlIiwiX2luaGVyaXRzIiwiY29ubmVjdGVkQ2FsbGJhY2siLCJfc3VwZXJQcm9wR2V0IiwidGV4dENvbnRlbnQiLCJyb290IiwicmVuZGVyQ29udGVudCIsIlRlbXBsYXRlIiwidGVtcGxhdGVTdHJpbmciLCJ1c2VTaGFkb3ciLCJhcmd1bWVudHMiLCJ0ZW1wbGF0ZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsIndpbmRvdyIsIlNoYWR5Q1NTIiwicHJlcGFyZVRlbXBsYXRlIiwiX3N1cGVyY2xhc3MyIiwiX2NsYXNzMiIsIl90aGlzMyIsImNsb25lIiwiaW1wb3J0Tm9kZSIsImNvbnRlbnQiLCJhdHRhY2hTaGFkb3ciLCJtb2RlIiwic2hhZG93Um9vdCIsImFwcGVuZENoaWxkIiwiaGFzQXR0cmlidXRlIiwic3R5bGVFbGVtZW50IiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsIiQiLCJxdWVyeSIsInF1ZXJ5U2VsZWN0b3IiLCIkJCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtYXRoIiwiZmluZEVuZE9mTWF0aCIsImRlbGltaXRlciIsInRleHQiLCJzdGFydEluZGV4IiwiaW5kZXgiLCJicmFjZUxldmVsIiwiZGVsaW1MZW5ndGgiLCJjaGFyYWN0ZXIiLCJzcGxpdEF0RGVsaW1pdGVycyIsInN0YXJ0RGF0YSIsImxlZnREZWxpbSIsInJpZ2h0RGVsaW0iLCJkaXNwbGF5IiwiZmluYWxEYXRhIiwiaSIsInR5cGUiLCJkYXRhIiwibG9va2luZ0ZvckxlZnQiLCJjdXJySW5kZXgiLCJuZXh0SW5kZXgiLCJpbmRleE9mIiwicHVzaCIsInJhd0RhdGEiLCJzcGxpdFdpdGhEZWxpbWl0ZXJzIiwiZGVsaW1pdGVycyIsImxlZnQiLCJyaWdodCIsInJlbmRlck1hdGhJblRleHQiLCJvcHRpb25zQ29weSIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImNyZWF0ZVRleHROb2RlIiwidGFnIiwiZGlzcGxheU1vZGUiLCJzZXRBdHRyaWJ1dGUiLCJlIiwiUGFyc2VFcnJvciIsImVycm9yQ2FsbGJhY2siLCJyZW5kZXJFbGVtIiwiZWxlbSIsImNoaWxkTm9kZXMiLCJjaGlsZE5vZGUiLCJub2RlVHlwZSIsIm1pZ2h0SGF2ZU1hdGgiLCJmcmFnIiwicmVwbGFjZUNoaWxkIiwic2hvdWxkUmVuZGVyIiwiaWdub3JlZFRhZ3MiLCJub2RlTmFtZSIsImRlZmF1bHRBdXRvUmVuZGVyT3B0aW9ucyIsIm1zZyIsImVyciIsInJlbmRlck1hdGhJbkVsZW1lbnQiLCJkZWxpbWl0ZXJTdHJpbmdzIiwiZmxhdE1hcCIsImQiLCJzb21lIiwia2F0ZXhKU1VSTCIsImthdGV4Q1NTVGFnIiwiVCIsIkRNYXRoIiwiX011dGF0aW5nIiwibG9jYWxPcHRpb25zIiwia2F0ZXhPcHRpb25zIiwia2F0ZXhBZGRlZCIsImFkZEthdGV4IiwiY29udGFpbmVyIiwicmVuZGVyIiwiX2thdGV4T3B0aW9ucyIsImthdGV4TG9hZGVkQ2FsbGJhY2siLCJtYXRoVGFncyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwiZG9uZSIsIm1hdGhUYWciLCJmIiwiYm9keSIsImhlYWQiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJzY3JpcHRUYWciLCJzcmMiLCJhc3luYyIsIm9ubG9hZCIsImNyb3Nzb3JpZ2luIiwiSFRNTEVsZW1lbnQiLCJpbmxpbmVNYXRoUmVuZGVyZWQiLCJjb2xsZWN0X2NpdGF0aW9ucyIsImRvbSIsIlNldCIsImNpdGVUYWdzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImtleVN0cmluZyIsImdldEF0dHJpYnV0ZSIsImtleXMiLCJrIiwidHJpbSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJhZGQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhdXRob3Jfc3RyaW5nIiwiZW50Iiwic2VwIiwiZmluYWxTZXAiLCJuYW1lX3N0cmluZ3MiLCJsYXN0IiwiZmlyc3RzIiwiaW5pdGlhbHMiLCJyZXBsYWNlIiwic3RyIiwidmVudWVfc3RyaW5nIiwiY2l0ZSIsImJvb2t0aXRsZSIsIm51bWJlciIsInBhZ2VzIiwicHVibGlzaGVyIiwibGlua19zdHJpbmciLCJhcnhpdl9tYXRjaCIsImV4ZWMiLCJsYWJlbCIsImRvaV9zdHJpbmciLCJuZXdfbGluZSIsInRpdGxlX3N0cmluZyIsImJpYmxpb2dyYXBoeV9jaXRlIiwiZmFuY3kiLCJob3Zlcl9jaXRlIiwiYV9zdHIiLCJ2X3N0ciIsIk1hdGgiLCJtaW4iLCJkb21Db250ZW50TG9hZGVkIiwicmVhZHlTdGF0ZSIsIl9tb3ZlTGVnYWN5QWZmaWxpYXRpb25Gb3JtYXRJbnRvQXJyYXkiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiaGFzT2xkU3R5bGUiLCJCb29sZWFuIiwiaGFzTmV3U3R5bGUiLCJ3YXJuIiwibmV3QWZmaWxpYXRpb24iLCJwYXJzZUZyb250bWF0dGVyIiwiZWxlbWVudCIsImZpcnN0RWxlbWVudENoaWxkIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwiRnJvbnRNYXR0ZXIkMSIsIl9IVE1MRWxlbWVudCIsIl90aGlzNCIsImVudHJpZXMiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1Iiwibm90aWZ5IiwiZGV0YWlsIiwiYnViYmxlcyIsImV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiX3dyYXBOYXRpdmVTdXBlciIsIm9wdGlvbmFsQ29tcG9uZW50cyIsImFydGljbGUiLCJieWxpbmUiLCJoMSIsImhhc1Bhc3N3b3JkIiwiaW50ZXJzdGl0aWFsIiwiaW5Ccm93c2VyIiwib25Mb2NhbGhvc3QiLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiaW5jbHVkZXMiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRpeCIsImZvb3Rub3RlTGlzdCIsImNpdGF0aW9uTGlzdCIsIkNvbnRyb2xsZXIiLCJ3YWl0aW5nT24iLCJsaXN0ZW5lcnMiLCJvbkNpdGVLZXlDcmVhdGVkIiwiX2V2ZW50JGRldGFpbCIsImNpdGVUYWciLCJudW1iZXJzIiwib25DaXRlS2V5Q2hhbmdlZCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJ3YWl0aW5nQ2FsbGJhY2siLCJjaXRhdGlvbkxpc3RUYWciLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwibG9nIiwib25DaXRlS2V5UmVtb3ZlZCIsIm9uQmlibGlvZ3JhcGh5Q2hhbmdlZCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJkZWJ1ZyIsIm9uRm9vdG5vdGVDaGFuZ2VkIiwiZm9vdG5vdGVzTGlzdCIsImZvb3Rub3RlcyIsIm9uRnJvbnRNYXR0ZXJDaGFuZ2VkIiwicHJlcmVuZGVyZWQiLCJET01Db250ZW50TG9hZGVkIiwibG9hZGVkIiwiZnJvbnRNYXR0ZXJUYWciLCJfaXRlcmF0b3I5IiwiX3N0ZXA5IiwiX2l0ZXJhdG9yMTAiLCJfc3RlcDEwIiwiYmFzZSIsImxheW91dCIsInByaW50Iiwic3R5bGVzIiwibWFrZVN0eWxlVGFnIiwic3R5bGVUYWdJZCIsInByZXJlbmRlcmVkVGFnIiwiZ2V0RWxlbWVudEJ5SWQiLCJzdHlsZVRhZyIsImlkIiwiY3NzVGV4dFRhZyIsImZpcnN0U2NyaXB0VGFnIiwiYWRkUG9seWZpbGwiLCJwb2x5ZmlsbCIsInBvbHlmaWxsTG9hZGVkQ2FsbGJhY2siLCJzY3JpcHQiLCJvbmVycm9yIiwicG9seWZpbGxzIiwic3VwcG9ydCIsIkVsZW1lbnQiLCJwcm90b3R5cGUiLCJQb2x5ZmlsbHMiLCJicm93c2VyU3VwcG9ydHNBbGxGZWF0dXJlcyIsImV2ZXJ5IiwicG9seSIsImxvYWQiLCJjYWxsYmFjayIsInBvbHlmaWxsTG9hZGVkIiwibmVlZGVkUG9seWZpbGxzIiwiZGlzdGlsbFJ1bmxldmVsIiwiX2l0ZXJhdG9yMTEiLCJfc3RlcDExIiwiX25lZWRlZFBvbHlmaWxscyIsImZpbHRlciIsInNlbGVjdG9yIiwiVCQxIiwiQWJzdHJhY3QiLCJfVCQiLCJUJDIiLCJBcHBlbmRpeCIsIl9UJDIiLCJpc09ubHlXaGl0ZXNwYWNlIiwiQXJ0aWNsZSIsIl9IVE1MRWxlbWVudDIiLCJfdGhpczUiLCJtdXRhdGlvbnMiLCJfaXRlcmF0b3IxMiIsIl9zdGVwMTIiLCJtdXRhdGlvbiIsIl9pdGVyYXRvcjEzIiwiYWRkZWROb2RlcyIsIl9zdGVwMTMiLCJhZGRlZE5vZGUiLCJub2RlVmFsdWUiLCJ0ZXN0Iiwid3JhcHBlciIsInBhcmVudE5vZGUiLCJjb21tb25qc0dsb2JhbCIsImdsb2JhbFRoaXMiLCJnbG9iYWwiLCJzZWxmIiwiY3JlYXRlQ29tbW9uanNNb2R1bGUiLCJmbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJiaWJ0ZXhQYXJzZSIsIkJpYnRleFBhcnNlciIsIm5vdEtleSIsInBvcyIsImlucHV0IiwiY3VycmVudEVudHJ5Iiwic2V0SW5wdXQiLCJ0IiwiZ2V0RW50cmllcyIsImlzV2hpdGVzcGFjZSIsIm1hdGNoIiwiY2FuQ29tbWVudE91dCIsInNraXBXaGl0ZXNwYWNlIiwidHJ5TWF0Y2giLCJtYXRjaEF0IiwidmFsdWVfYnJhY2VzIiwiYnJhY2Vjb3VudCIsInN0YXJ0IiwiZXNjYXBlZCIsImVuZCIsInZhbHVlX2NvbW1lbnQiLCJicmNrdENudCIsInZhbHVlX3F1b3RlcyIsInNpbmdsZV92YWx1ZSIsInZhbHVlcyIsImtleV9lcXVhbHNfdmFsdWUiLCJ2YWwiLCJrZXlfdmFsdWVfbGlzdCIsImt2IiwiZW50cnlfYm9keSIsImRpcmVjdGl2ZSIsInByZWFtYmxlIiwiY29tbWVudCIsImJpYnRleCIsInN0cmluZyIsInRvSlNPTiIsImIiLCJ0b0JpYnRleCIsImpzb24iLCJvdXQiLCJlbnRyeVR5cGUiLCJlbnRyeVRhZ3MiLCJ0YWdzIiwiamR4Iiwibm9ybWFsaXplVGFnIiwiZnVsbCIsIngiLCJjaGFyIiwicGFyc2VCaWJ0ZXgiLCJwYXJzZWRFbnRyaWVzIiwiX2l0ZXJhdG9yMTQiLCJfc3RlcDE0IiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJzZXJpYWxpemVGcm9udG1hdHRlclRvQmlidGV4IiwiQmlibGlvZ3JhcGh5IiwiX0hUTUxFbGVtZW50MyIsIl90aGlzNiIsIl9pdGVyYXRvcjE1IiwiX3N0ZXAxNSIsInBhcnNlSWZQb3NzaWJsZSIsIl90aGlzNyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm5ld0JpYnRleCIsInJlY2VpdmVkQmlidGV4IiwicmVzcG9uc2UiLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siLCJvbGRWYWx1ZSIsIm5ld1ZhbHVlIiwiX3RoaXM4Iiwib1JlcSIsIlhNTEh0dHBSZXF1ZXN0IiwicmVzcG9uc2VUeXBlIiwib3BlbiIsInNlbmQiLCJieWxpbmVUZW1wbGF0ZSIsIkJ5bGluZSIsIl9IVE1MRWxlbWVudDQiLCJUJDMiLCJDaXRlIiwiX1QkMyIsIl90aGlzOSIsIl9udW1iZXJzIiwiX2VudHJpZXMiLCJfdGhpczEwIiwib3V0ZXJTcGFuIiwiaW5uZXJTcGFuIiwiaG92ZXJCb3giLCJjdXN0b21FbGVtZW50cyIsIndoZW5EZWZpbmVkIiwidGhlbiIsImxpc3RlbiIsImRpc3BsYXlOdW1iZXJzIiwiZGlzcGxheUVudHJpZXMiLCJldmVudE5hbWUiLCJyZXN1bHQiLCJudW1iZXJTdHJpbmdzIiwiaHRtbCIsInN0eWxlcyQxIiwicmVuZGVyQ2l0YXRpb25MaXN0Iiwic2l6ZSIsInN0eWxlIiwibGlzdCIsInN0eWxlc1RhZyIsImhlYWRpbmciLCJjbGFzc05hbWUiLCJfaXRlcmF0b3IxNiIsIl9zdGVwMTYiLCJfc3RlcDE2JHZhbHVlIiwibGlzdEl0ZW0iLCJDaXRhdGlvbkxpc3QiLCJfSFRNTEVsZW1lbnQ1IiwicHJpc20iLCJfc2VsZiIsIldvcmtlckdsb2JhbFNjb3BlIiwiUHJpc20iLCJsYW5nIiwidW5pcXVlSWQiLCJfIiwibWFudWFsIiwiZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyIiwidXRpbCIsImVuY29kZSIsInRva2VucyIsIlRva2VuIiwiYWxpYXMiLCJpc0FycmF5IiwibyIsImNhbGwiLCJvYmpJZCIsIm9iaiIsImRlZmluZVByb3BlcnR5IiwiZGVlcENsb25lIiwidmlzaXRlZCIsImZvckVhY2giLCJ2IiwiZ2V0TGFuZ3VhZ2UiLCJjdXJyZW50U2NyaXB0Iiwic3RhY2siLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsYW5ndWFnZXMiLCJleHRlbmQiLCJyZWRlZiIsImluc2lkZSIsImJlZm9yZSIsImluc2VydCIsImdyYW1tYXIiLCJyZXQiLCJ0b2tlbiIsIm5ld1Rva2VuIiwib2xkIiwiREZTIiwicHJvcGVydHlUeXBlIiwicGx1Z2lucyIsImhpZ2hsaWdodEFsbCIsImhpZ2hsaWdodEFsbFVuZGVyIiwiZW52IiwiaG9va3MiLCJydW4iLCJlbGVtZW50cyIsImFwcGx5IiwiaGlnaGxpZ2h0RWxlbWVudCIsImxhbmd1YWdlIiwicGFyZW50IiwiY29kZSIsImluc2VydEhpZ2hsaWdodGVkQ29kZSIsImhpZ2hsaWdodGVkQ29kZSIsIldvcmtlciIsIndvcmtlciIsImZpbGVuYW1lIiwib25tZXNzYWdlIiwiZXZ0IiwicG9zdE1lc3NhZ2UiLCJzdHJpbmdpZnkiLCJpbW1lZGlhdGVDbG9zZSIsImhpZ2hsaWdodCIsInRva2VuaXplIiwicmVzdCIsInRva2VuTGlzdCIsIkxpbmtlZExpc3QiLCJhZGRBZnRlciIsIm1hdGNoR3JhbW1hciIsInRvQXJyYXkiLCJhbGwiLCJjYWxsYmFja3MiLCJtYXRjaGVkU3RyIiwiZ3JlZWR5IiwiY2xhc3NlcyIsImF0dHJpYnV0ZXMiLCJhbGlhc2VzIiwic3RhcnROb2RlIiwic3RhcnRQb3MiLCJvbmVzaG90IiwicGF0dGVybnMiLCJqIiwicGF0dGVybiIsImxvb2tiZWhpbmQiLCJsb29rYmVoaW5kTGVuZ3RoIiwiZmxhZ3MiLCJSZWdFeHAiLCJjdXJyZW50Tm9kZSIsIm5leHQiLCJ0YWlsIiwicmVtb3ZlQ291bnQiLCJwcmV2IiwibGFzdEluZGV4IiwidG8iLCJwIiwiYWZ0ZXIiLCJyZW1vdmVGcm9tIiwicmVtb3ZlUmFuZ2UiLCJ3cmFwcGVkIiwibm9kZSIsIm5ld05vZGUiLCJjb3VudCIsImFycmF5IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm1lc3NhZ2UiLCJjbG9zZSIsImhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjayIsImRlZmVyIiwic2V0VGltZW91dCIsIm1hcmt1cCIsImFkZElubGluZWQiLCJ0YWdOYW1lIiwiaW5jbHVkZWRDZGF0YUluc2lkZSIsImRlZiIsInhtbCIsIm1hdGhtbCIsInN2ZyIsImNzcyIsImNsaWtlIiwiamF2YXNjcmlwdCIsImpzIiwiZmlsZUhpZ2hsaWdodCIsIkV4dGVuc2lvbnMiLCJwcmUiLCJleHRlbnNpb24iLCJ4aHIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJzdGF0dXMiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0IiwicHl0aG9uIiwicHkiLCJsdWEiLCJlbnZWYXJzIiwiaW5zaWRlU3RyaW5nIiwiYmFzaCIsInZhcmlhYmxlIiwidG9CZUNvcGllZCIsInNoZWxsIiwiZ28iLCJpbm5lciIsImNyZWF0ZUlubGluZSIsInN0YXJBbHRlcm5hdGl2ZSIsInRhYmxlQ2VsbCIsInRhYmxlUm93IiwidGFibGVMaW5lIiwibWFya2Rvd24iLCJwdW5jdHVhdGlvbiIsIndhbGtUb2tlbnMiLCJsIiwiY29kZUxhbmciLCJjb2RlQmxvY2siLCJjbHMiLCJhdXRvbG9hZGVyIiwidmFsdWVPZiIsImZsb29yIiwicmFuZG9tIiwibG9hZExhbmd1YWdlcyIsImVsZSIsIm1kIiwianVsaWEiLCJUJDQiLCJDb2RlIiwiX011dGF0aW5nMiIsImxhbmd1YWdlTmFtZSIsImNvZGVUYWciLCJ0YWJzIiwiU2hhZG93Um9vdCIsInByZVRhZyIsIlQkNSIsIkZvb3Rub3RlIiwiX1QkNCIsIl90aGlzMTEiLCJfdGhpczEyIiwiY3VycmVudEZvb3Rub3RlSWQiLCJJZFN0cmluZyIsImhvc3QiLCJzcGFuIiwiVCQ2IiwiRm9vdG5vdGVMaXN0IiwiX1QkNSIsIl9pdGVyYXRvcjE3IiwiX3N0ZXAxNyIsImZvb3Rub3RlIiwiYmFja2xpbmsiLCJocmVmIiwiVCQ3IiwiSG92ZXJCb3giLCJfVCQ2IiwiYmluZERpdkV2ZW50cyIsImJpbmRUcmlnZ2VyRXZlbnRzIiwiX3RoaXMxMyIsInZpc2libGUiLCJzaG93QXROb2RlIiwic3RvcFRpbWVvdXQiLCJleHRlbmRUaW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwicGFzc2l2ZSIsImhpZGUiLCJfdGhpczE0Iiwic2hvdyIsInBvc2l0aW9uIiwidG9wIiwicm91bmQiLCJiYm94IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwib2Zmc2V0TGVmdCIsIndpZHRoIiwib2Zmc2V0VG9wIiwiaGVpZ2h0IiwidGltZW91dCIsImNsZWFyVGltZW91dCIsInRpbWUiLCJfdGhpczE1IiwiVGl0bGUiLCJfSFRNTEVsZW1lbnQ2IiwiVCQ4IiwiUmVmZXJlbmNlcyIsIl9UJDciLCJUT0MiLCJfSFRNTEVsZW1lbnQ3IiwiX3RoaXMxNiIsImhlYWRpbmdzIiwicmVuZGVyVE9DIiwiVG9DIiwiX2l0ZXJhdG9yMTgiLCJfc3RlcDE4IiwiZWwiLCJpc0luVGl0bGUiLCJpc0V4Y2VwdGlvbiIsImxpbmsiLCJuZXdMaW5lIiwiRmlndXJlIiwiX0hUTUxFbGVtZW50OCIsIl90aGlzMTciLCJfcmVhZHkiLCJfb25zY3JlZW4iLCJfb2Zmc2NyZWVuIiwibG9hZHNXaGlsZVNjcm9sbGluZyIsIm1hcmdpbk9ic2VydmVyIiwiZGlyZWN0T2JzZXJ2ZXIiLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsInVub2JzZXJ2ZSIsInJlYWR5UXVldWUiLCJydW5SZWFkeVF1ZXVlIiwib25zY3JlZW4iLCJyZWFkeSIsIm9mZnNjcmVlbiIsIl9yZWFkeVF1ZXVlIiwiYWRkVG9SZWFkeVF1ZXVlIiwiZmlndXJlIiwic29ydCIsImEiLCJfc2Vlbk9uU2NyZWVuIiwicG9wIiwiX21hcmdpbk9ic2VydmVyIiwidmlld3BvcnRIZWlnaHQiLCJpbm5lckhlaWdodCIsIm1hcmdpbiIsInJvb3RNYXJnaW4iLCJ0aHJlc2hvbGQiLCJkaWRPYnNlcnZlTWFyZ2luSW50ZXJzZWN0aW9uIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfaXRlcmF0b3IxOSIsIl9zdGVwMTkiLCJpc0ludGVyc2VjdGluZyIsIl9kaXJlY3RPYnNlcnZlciIsImRpZE9ic2VydmVEaXJlY3RJbnRlcnNlY3Rpb24iLCJfaXRlcmF0b3IyMCIsIl9zdGVwMjAiLCJpc1Njcm9sbGluZyIsInJlc2V0VGltZXIiLCJwcm9kdWN0aW9uSG9zdG5hbWUiLCJUJDkiLCJJbnRlcnN0aXRpYWwiLCJfVCQ4IiwiX3RoaXMxOCIsInNob3VsZFJlbW92ZVNlbGYiLCJwYXNzd29yZElucHV0Iiwib25pbnB1dCIsInBhc3N3b3JkQ2hhbmdlZCIsImVudGVyZWQiLCJTdG9yYWdlIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImxvY2FsU3RvcmFnZUlkZW50aWZpZXIiLCJnZXRJdGVtIiwicHJlZml4Iiwic3VmZml4IiwicGF0aG5hbWUiLCJhc2NlbmRpbmciLCJOYU4iLCJiaXNlY3RvciIsImNvbXBhcmUiLCJhc2NlbmRpbmdDb21wYXJhdG9yIiwibG8iLCJoaSIsIm1pZCIsImFzY2VuZGluZ0Jpc2VjdCIsImJpc2VjdFJpZ2h0IiwicmFuZ2UiLCJzdG9wIiwic3RlcCIsIm1heCIsImNlaWwiLCJlMTAiLCJzcXJ0IiwiZTUiLCJlMiIsInRpY2tzIiwicmV2ZXJzZSIsInRpY2tJbmNyZW1lbnQiLCJpc0Zpbml0ZSIsInBvd2VyIiwiTE4xMCIsInBvdyIsInRpY2tTdGVwIiwic3RlcDAiLCJhYnMiLCJzdGVwMSIsImluaXRSYW5nZSIsImRvbWFpbiIsImRlZmluaXRpb24iLCJjcmVhdGUiLCJDb2xvciIsImRhcmtlciIsImJyaWdodGVyIiwicmVJIiwicmVOIiwicmVQIiwicmVIZXgiLCJyZVJnYkludGVnZXIiLCJyZVJnYlBlcmNlbnQiLCJyZVJnYmFJbnRlZ2VyIiwicmVSZ2JhUGVyY2VudCIsInJlSHNsUGVyY2VudCIsInJlSHNsYVBlcmNlbnQiLCJuYW1lZCIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVlIiwiYmx1ZXZpb2xldCIsImJyb3duIiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVuIiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGluayIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicmViZWNjYXB1cnBsZSIsInJlZCIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic2xhdGVncmV5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ3aGVhdCIsIndoaXRlIiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiY29sb3IiLCJjb3B5IiwiY2hhbm5lbHMiLCJkaXNwbGF5YWJsZSIsInJnYiIsImhleCIsImNvbG9yX2Zvcm1hdEhleCIsImZvcm1hdEhleCIsImZvcm1hdEhzbCIsImNvbG9yX2Zvcm1hdEhzbCIsImZvcm1hdFJnYiIsImNvbG9yX2Zvcm1hdFJnYiIsImhzbENvbnZlcnQiLCJmb3JtYXQiLCJtIiwicGFyc2VJbnQiLCJyZ2JuIiwiUmdiIiwicmdiYSIsImhzbGEiLCJyIiwiZyIsInJnYkNvbnZlcnQiLCJvcGFjaXR5IiwicmdiX2Zvcm1hdEhleCIsInJnYl9mb3JtYXRSZ2IiLCJpc05hTiIsImgiLCJIc2wiLCJoc2wiLCJtMiIsIm0xIiwiaHNsMnJnYiIsImRlZzJyYWQiLCJQSSIsInJhZDJkZWciLCJLIiwiWG4iLCJZbiIsIlpuIiwidDAiLCJ0MSIsInQyIiwidDMiLCJsYWJDb252ZXJ0IiwiTGFiIiwiSGNsIiwiaGNsMmxhYiIsInJnYjJscmdiIiwieSIsInh5ejJsYWIiLCJ6IiwibGFiIiwibGFiMnh5eiIsImxyZ2IycmdiIiwiaGNsQ29udmVydCIsImMiLCJhdGFuMiIsImhjbCIsImNvcyIsInNpbiIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRUQiLCJFQiIsIkJDX0RBIiwiY3ViZWhlbGl4Q29udmVydCIsIkN1YmVoZWxpeCIsImJsIiwiY3ViZWhlbGl4IiwiY29zaCIsInNpbmgiLCJjb25zdGFudCIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiZ2FtbWEiLCJub2dhbW1hIiwicmdiJDEiLCJyZ2JHYW1tYSIsIm51bWJlckFycmF5IiwiaXNOdW1iZXJBcnJheSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiRGF0YVZpZXciLCJnZW5lcmljQXJyYXkiLCJuYiIsIm5hIiwiaW50ZXJwb2xhdGUiLCJzZXRUaW1lIiwiaW50ZXJwb2xhdGVOdW1iZXIiLCJyZUEiLCJyZUIiLCJ6ZXJvIiwib25lIiwiYmkiLCJhbSIsImJtIiwiYnMiLCJxIiwiaW50ZXJwb2xhdGVSb3VuZCIsImNvbnN0YW50JDEiLCJ1bml0IiwiaWRlbnRpdHkiLCJub3JtYWxpemUiLCJjbGFtcGVyIiwiYmltYXAiLCJkMCIsImQxIiwicjAiLCJyMSIsInBvbHltYXAiLCJjbGFtcCIsInVua25vd24iLCJ0cmFuc2Zvcm1lciIsImludGVycG9sYXRlJDEiLCJ0cmFuc2Zvcm0iLCJ1bnRyYW5zZm9ybSIsInBpZWNld2lzZSIsIm91dHB1dCIsInJlc2NhbGUiLCJzY2FsZSIsImludmVydCIsInJhbmdlUm91bmQiLCJ1IiwiY29udGludW91cyIsImZvcm1hdERlY2ltYWwiLCJ0b0V4cG9uZW50aWFsIiwiY29lZmZpY2llbnQiLCJleHBvbmVudCIsImZvcm1hdEdyb3VwIiwiZ3JvdXBpbmciLCJ0aG91c2FuZHMiLCJmb3JtYXROdW1lcmFscyIsIm51bWVyYWxzIiwicmUiLCJmb3JtYXRTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJGb3JtYXRTcGVjaWZpZXIiLCJmaWxsIiwiYWxpZ24iLCJzaWduIiwic3ltYm9sIiwiY29tbWEiLCJwcmVjaXNpb24iLCJmb3JtYXRUcmltIiwiaTAiLCJpMSIsInByZWZpeEV4cG9uZW50IiwiZm9ybWF0UHJlZml4QXV0byIsImZvcm1hdFJvdW5kZWQiLCJmb3JtYXRUeXBlcyIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiIsIlgiLCJ0b1VwcGVyQ2FzZSIsImlkZW50aXR5JDEiLCJwcmVmaXhlcyIsImZvcm1hdExvY2FsZSIsImxvY2FsZSIsImdyb3VwIiwiTnVtYmVyIiwiY3VycmVuY3lQcmVmaXgiLCJjdXJyZW5jeSIsImN1cnJlbmN5U3VmZml4IiwiZGVjaW1hbCIsInBlcmNlbnQiLCJtaW51cyIsIm5hbiIsIm5ld0Zvcm1hdCIsImZvcm1hdFR5cGUiLCJtYXliZVN1ZmZpeCIsInZhbHVlUHJlZml4IiwidmFsdWVTdWZmaXgiLCJ2YWx1ZU5lZ2F0aXZlIiwiY2hhckNvZGVBdCIsIkluZmluaXR5IiwicGFkZGluZyIsImZvcm1hdFByZWZpeCIsImRlZmF1bHRMb2NhbGUiLCJwcmVjaXNpb25GaXhlZCIsInByZWNpc2lvblByZWZpeCIsInByZWNpc2lvblJvdW5kIiwidGlja0Zvcm1hdCIsImxpbmVhcmlzaCIsIm5pY2UiLCJsaW5lYXIkMSIsInQwJDEiLCJ0MSQxIiwibmV3SW50ZXJ2YWwiLCJmbG9vcmkiLCJvZmZzZXRpIiwiZmllbGQiLCJpbnRlcnZhbCIsIm9mZnNldCIsInByZXZpb3VzIiwibWlsbGlzZWNvbmQiLCJkdXJhdGlvblNlY29uZCIsImR1cmF0aW9uTWludXRlIiwiZHVyYXRpb25Ib3VyIiwiZHVyYXRpb25EYXkiLCJkdXJhdGlvbldlZWsiLCJzZWNvbmQiLCJnZXRNaWxsaXNlY29uZHMiLCJtaW51dGUiLCJnZXRTZWNvbmRzIiwiZ2V0TWludXRlcyIsImhvdXIiLCJnZXRIb3VycyIsInNldEhvdXJzIiwic2V0RGF0ZSIsImdldFRpbWV6b25lT2Zmc2V0Iiwid2Vla2RheSIsInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Iiwic2V0TW9udGgiLCJzZXRGdWxsWWVhciIsInV0Y01pbnV0ZSIsInNldFVUQ1NlY29uZHMiLCJ1dGNIb3VyIiwic2V0VVRDTWludXRlcyIsInV0Y0RheSIsInNldFVUQ0hvdXJzIiwic2V0VVRDRGF0ZSIsImdldFVUQ0RhdGUiLCJ1dGNXZWVrZGF5IiwiZ2V0VVRDRGF5IiwidXRjU3VuZGF5IiwidXRjTW9uZGF5IiwidXRjVHVlc2RheSIsInV0Y1dlZG5lc2RheSIsInV0Y1RodXJzZGF5IiwidXRjRnJpZGF5IiwidXRjU2F0dXJkYXkiLCJ1dGNNb250aCIsInNldFVUQ01vbnRoIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENGdWxsWWVhciIsInV0Y1llYXIiLCJzZXRVVENGdWxsWWVhciIsImxvY2FsRGF0ZSIsIkgiLCJNIiwiUyIsIkwiLCJ1dGNEYXRlIiwiVVRDIiwibmV3RGF0ZSIsImZvcm1hdExvY2FsZSQxIiwibG9jYWxlX2RhdGVUaW1lIiwiZGF0ZVRpbWUiLCJsb2NhbGVfZGF0ZSIsImxvY2FsZV90aW1lIiwibG9jYWxlX3BlcmlvZHMiLCJwZXJpb2RzIiwibG9jYWxlX3dlZWtkYXlzIiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJzaG9ydERheXMiLCJsb2NhbGVfbW9udGhzIiwibG9jYWxlX3Nob3J0TW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RSZSIsImZvcm1hdFJlIiwicGVyaW9kTG9va3VwIiwiZm9ybWF0TG9va3VwIiwid2Vla2RheVJlIiwid2Vla2RheUxvb2t1cCIsInNob3J0V2Vla2RheVJlIiwic2hvcnRXZWVrZGF5TG9va3VwIiwibW9udGhSZSIsIm1vbnRoTG9va3VwIiwic2hvcnRNb250aFJlIiwic2hvcnRNb250aExvb2t1cCIsImZvcm1hdHMiLCJmb3JtYXRTaG9ydFdlZWtkYXkiLCJmb3JtYXRXZWVrZGF5IiwiZm9ybWF0U2hvcnRNb250aCIsImZvcm1hdE1vbnRoIiwiZm9ybWF0RGF5T2ZNb250aCIsImZvcm1hdE1pY3Jvc2Vjb25kcyIsImZvcm1hdEhvdXIyNCIsImZvcm1hdEhvdXIxMiIsImZvcm1hdERheU9mWWVhciIsImZvcm1hdE1pbGxpc2Vjb25kcyIsImZvcm1hdE1vbnRoTnVtYmVyIiwiZm9ybWF0TWludXRlcyIsImZvcm1hdFBlcmlvZCIsImZvcm1hdFF1YXJ0ZXIiLCJmb3JtYXRVbml4VGltZXN0YW1wIiwiZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMiLCJmb3JtYXRTZWNvbmRzIiwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVySVNPIiwiZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSIsImZvcm1hdFdlZWtOdW1iZXJNb25kYXkiLCJmb3JtYXRZZWFyIiwiZm9ybWF0RnVsbFllYXIiLCJmb3JtYXRab25lIiwiZm9ybWF0TGl0ZXJhbFBlcmNlbnQiLCJ1dGNGb3JtYXRzIiwiZm9ybWF0VVRDU2hvcnRXZWVrZGF5IiwiZm9ybWF0VVRDV2Vla2RheSIsImZvcm1hdFVUQ1Nob3J0TW9udGgiLCJmb3JtYXRVVENNb250aCIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENQZXJpb2QiLCJmb3JtYXRVVENRdWFydGVyIiwiZm9ybWF0VVRDU2Vjb25kcyIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlcklTTyIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDWWVhciIsImZvcm1hdFVUQ0Z1bGxZZWFyIiwiZm9ybWF0VVRDWm9uZSIsInBhcnNlcyIsInBhcnNlU2hvcnRXZWVrZGF5IiwicGFyc2VXZWVrZGF5IiwicGFyc2VTaG9ydE1vbnRoIiwicGFyc2VNb250aCIsInBhcnNlTG9jYWxlRGF0ZVRpbWUiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZU1pY3Jvc2Vjb25kcyIsInBhcnNlSG91cjI0IiwicGFyc2VEYXlPZlllYXIiLCJwYXJzZU1pbGxpc2Vjb25kcyIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZU1pbnV0ZXMiLCJwYXJzZVBlcmlvZCIsInBhcnNlUXVhcnRlciIsInBhcnNlVW5peFRpbWVzdGFtcCIsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiLCJwYXJzZVNlY29uZHMiLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtOdW1iZXJJU08iLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtOdW1iZXJNb25kYXkiLCJwYXJzZUxvY2FsZURhdGUiLCJwYXJzZUxvY2FsZVRpbWUiLCJwYXJzZVllYXIiLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2Vab25lIiwicGFyc2VMaXRlcmFsUGVyY2VudCIsInBhZCIsInBhZHMiLCJjaGFyQXQiLCJuZXdQYXJzZSIsIloiLCJwYXJzZVNwZWNpZmllciIsIndlZWsiLCJkYXkkMSIsIlEiLCJWIiwidyIsIlciLCJVIiwidXRjRm9ybWF0IiwidXRjUGFyc2UiLCJudW1iZXJSZSIsInBlcmNlbnRSZSIsInJlcXVvdGVSZSIsInJlcXVvdGUiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJkb3ciLCJsb2NhbGUkMSIsInRpbWVGb3JtYXQiLCJ0aW1lUGFyc2UiLCJkZWZhdWx0TG9jYWxlJDEiLCJpc29TcGVjaWZpZXIiLCJmb3JtYXRJc29OYXRpdmUiLCJmb3JtYXRJc28iLCJwYXJzZUlzb05hdGl2ZSIsInBhcnNlSXNvIiwibm9vcCIsImRpc3BhdGNoIiwiRGlzcGF0Y2giLCJwYXJzZVR5cGVuYW1lcyIsInR5cGVuYW1lcyIsInR5cGVzIiwib24iLCJ0eXBlbmFtZSIsInRoYXQiLCJhcmdzIiwieGh0bWwiLCJuYW1lc3BhY2VzIiwieGxpbmsiLCJ4bWxucyIsIm5hbWVzcGFjZSIsInNwYWNlIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsIm93bmVyRG9jdW1lbnQiLCJ1cmkiLCJuYW1lc3BhY2VVUkkiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsImNyZWF0b3IiLCJub25lIiwic2VsZWN0aW9uX3NlbGVjdCIsInNlbGVjdCIsImdyb3VwcyIsIl9ncm91cHMiLCJzdWJncm91cHMiLCJzdWJncm91cCIsInN1Ym5vZGUiLCJfX2RhdGFfXyIsIlNlbGVjdGlvbiIsIl9wYXJlbnRzIiwiZW1wdHkiLCJzZWxlY3RvckFsbCIsInNlbGVjdGlvbl9zZWxlY3RBbGwiLCJwYXJlbnRzIiwibWF0Y2hlciIsIm1hdGNoZXMiLCJzZWxlY3Rpb25fZmlsdGVyIiwic3BhcnNlIiwidXBkYXRlIiwic2VsZWN0aW9uX2VudGVyIiwiX2VudGVyIiwiRW50ZXJOb2RlIiwiZGF0dW0iLCJfbmV4dCIsIl9wYXJlbnQiLCJjaGlsZCIsImNvbnN0YW50JDIiLCJrZXlQcmVmaXgiLCJiaW5kSW5kZXgiLCJlbnRlciIsImV4aXQiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwibm9kZUJ5S2V5VmFsdWUiLCJrZXlWYWx1ZXMiLCJrZXlWYWx1ZSIsInNlbGVjdGlvbl9kYXRhIiwiZWFjaCIsImJpbmQiLCJlbnRlckdyb3VwIiwidXBkYXRlR3JvdXAiLCJleGl0R3JvdXAiLCJfZXhpdCIsInNlbGVjdGlvbl9leGl0Iiwic2VsZWN0aW9uX2pvaW4iLCJvbmVudGVyIiwib251cGRhdGUiLCJvbmV4aXQiLCJhcHBlbmQiLCJyZW1vdmUiLCJtZXJnZSIsIm9yZGVyIiwic2VsZWN0aW9uX21lcmdlIiwic2VsZWN0aW9uIiwiZ3JvdXBzMCIsImdyb3VwczEiLCJtMCIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsInNlbGVjdGlvbl9vcmRlciIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwic2VsZWN0aW9uX3NvcnQiLCJhc2NlbmRpbmckMSIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsInNlbGVjdGlvbl9jYWxsIiwic2VsZWN0aW9uX25vZGVzIiwibm9kZXMiLCJzZWxlY3Rpb25fbm9kZSIsInNlbGVjdGlvbl9zaXplIiwic2VsZWN0aW9uX2VtcHR5Iiwic2VsZWN0aW9uX2VhY2giLCJhdHRyUmVtb3ZlIiwicmVtb3ZlQXR0cmlidXRlIiwiYXR0clJlbW92ZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJhdHRyQ29uc3RhbnQiLCJhdHRyQ29uc3RhbnROUyIsInNldEF0dHJpYnV0ZU5TIiwiYXR0ckZ1bmN0aW9uIiwiYXR0ckZ1bmN0aW9uTlMiLCJzZWxlY3Rpb25fYXR0ciIsImdldEF0dHJpYnV0ZU5TIiwiZGVmYXVsdFZpZXciLCJzdHlsZVJlbW92ZSIsInJlbW92ZVByb3BlcnR5Iiwic3R5bGVDb25zdGFudCIsInByaW9yaXR5Iiwic2V0UHJvcGVydHkiLCJzdHlsZUZ1bmN0aW9uIiwic2VsZWN0aW9uX3N0eWxlIiwic3R5bGVWYWx1ZSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRDb21wdXRlZFN0eWxlIiwicHJvcGVydHlSZW1vdmUiLCJwcm9wZXJ0eUNvbnN0YW50IiwicHJvcGVydHlGdW5jdGlvbiIsInNlbGVjdGlvbl9wcm9wZXJ0eSIsImNsYXNzQXJyYXkiLCJjbGFzc0xpc3QiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsInNwbGljZSIsImNvbnRhaW5zIiwiY2xhc3NlZEFkZCIsImNsYXNzZWRSZW1vdmUiLCJjbGFzc2VkVHJ1ZSIsImNsYXNzZWRGYWxzZSIsImNsYXNzZWRGdW5jdGlvbiIsInNlbGVjdGlvbl9jbGFzc2VkIiwidGV4dFJlbW92ZSIsInRleHRDb25zdGFudCIsInRleHRGdW5jdGlvbiIsInNlbGVjdGlvbl90ZXh0IiwiaHRtbFJlbW92ZSIsImh0bWxDb25zdGFudCIsImh0bWxGdW5jdGlvbiIsInNlbGVjdGlvbl9odG1sIiwicmFpc2UiLCJuZXh0U2libGluZyIsInNlbGVjdGlvbl9yYWlzZSIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwic2VsZWN0aW9uX2xvd2VyIiwic2VsZWN0aW9uX2FwcGVuZCIsImNvbnN0YW50TnVsbCIsInNlbGVjdGlvbl9pbnNlcnQiLCJzZWxlY3Rpb25fcmVtb3ZlIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lTm9kZSIsInNlbGVjdGlvbl9jbG9uZURlZXAiLCJzZWxlY3Rpb25fY2xvbmUiLCJkZWVwIiwic2VsZWN0aW9uX2RhdHVtIiwiZmlsdGVyRXZlbnRzIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJmaWx0ZXJDb250ZXh0TGlzdGVuZXIiLCJsaXN0ZW5lciIsImNvbnRleHRMaXN0ZW5lciIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwiZXZlbnQxIiwiZXZlbnQwIiwicGFyc2VUeXBlbmFtZXMkMSIsIm9uUmVtb3ZlIiwiX19vbiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwib25BZGQiLCJ3cmFwIiwic2VsZWN0aW9uX29uIiwiY3VzdG9tRXZlbnQiLCJzb3VyY2VFdmVudCIsInBhcmFtcyIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiY2FuY2VsYWJsZSIsImRpc3BhdGNoQ29uc3RhbnQiLCJkaXNwYXRjaEZ1bmN0aW9uIiwic2VsZWN0aW9uX2Rpc3BhdGNoIiwic2VsZWN0QWxsIiwiYXR0ciIsImNsYXNzZWQiLCJjdXJyZW50IiwicG9pbnQiLCJvd25lclNWR0VsZW1lbnQiLCJjcmVhdGVTVkdQb2ludCIsImNsaWVudFgiLCJjbGllbnRZIiwibWF0cml4VHJhbnNmb3JtIiwiZ2V0U2NyZWVuQ1RNIiwiaW52ZXJzZSIsInJlY3QiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwibW91c2UiLCJjaGFuZ2VkVG91Y2hlcyIsInRvdWNoIiwidG91Y2hlcyIsImlkZW50aWZpZXIiLCJub3Byb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibm9ldmVudCIsInByZXZlbnREZWZhdWx0Iiwibm9kcmFnIiwidmlldyIsIl9fbm9zZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwieWVzZHJhZyIsIm5vY2xpY2siLCJjb25zdGFudCQzIiwiRHJhZ0V2ZW50Iiwic3ViamVjdCIsImFjdGl2ZSIsImR4IiwiZHkiLCJkZWZhdWx0RmlsdGVyIiwiY3RybEtleSIsImJ1dHRvbiIsImRlZmF1bHRDb250YWluZXIiLCJkZWZhdWx0U3ViamVjdCIsImRlZmF1bHRUb3VjaGFibGUiLCJuYXZpZ2F0b3IiLCJtYXhUb3VjaFBvaW50cyIsImRyYWciLCJ0b3VjaGFibGUiLCJnZXN0dXJlcyIsIm1vdXNlZG93bngiLCJtb3VzZWRvd255IiwibW91c2Vtb3ZpbmciLCJ0b3VjaGVuZGluZyIsImNsaWNrRGlzdGFuY2UyIiwibW91c2Vkb3duZWQiLCJ0b3VjaHN0YXJ0ZWQiLCJ0b3VjaG1vdmVkIiwidG91Y2hlbmRlZCIsImdlc3R1cmUiLCJiZWZvcmVzdGFydCIsIm1vdXNlbW92ZWQiLCJtb3VzZXVwcGVkIiwic3VibGlzdGVuZXJzIiwicDAiLCJjbGlja0Rpc3RhbmNlIiwiVCRhIiwia2V5Q29kZXMiLCJ1cCIsImRvd24iLCJwYWdlVXAiLCJwYWdlRG93biIsImhvbWUiLCJTbGlkZXIiLCJfVCRhIiwiX3RoaXMxOSIsImNvbm5lY3RlZCIsIm1vdXNlRXZlbnQiLCJrbm9iIiwiYmFja2dyb3VuZCIsInRyYWNrRmlsbCIsInRyYWNrIiwib3JpZ2luIiwicmVuZGVyVGlja3MiLCJjaGFuZ2VWYWx1ZSIsImRyYWdVcGRhdGUiLCJkaXNwYXRjaENoYW5nZSIsIm9uS2V5RG93biIsImtleUNvZGUiLCJ2YWxpZGF0ZVZhbHVlUmFuZ2UiLCJxdWFudGl6ZVZhbHVlIiwiZGlzcGF0Y2hJbnB1dCIsIkV2ZW50IiwiX3RoaXMyMCIsInRpY2tzQ29udGFpbmVyIiwidGlja0RhdGEiLCJ0aWNrIiwibG9nbyIsImhlYWRlclRlbXBsYXRlIiwiVCRiIiwiRGlzdGlsbEhlYWRlciIsIl9UJGIiLCJzdHlsZXMkMiIsImFwcGVuZGl4VGVtcGxhdGUiLCJnaXRodWJDb21wYXJlVXBkYXRlc1VybCIsIkRpc3RpbGxBcHBlbmRpeCIsIl9IVE1MRWxlbWVudDkiLCJmb290ZXJUZW1wbGF0ZSIsIlQkYyIsIkRpc3RpbGxGb290ZXIiLCJfVCRjIiwidGVtcGxhdGVJc0xvYWRpbmciLCJydW5sZXZlbCIsImluaXRpYWxpemUiLCJkaXN0aWxsIiwiX2kyIiwiX09iamVjdCRlbnRyaWVzMiIsIl9PYmplY3QkZW50cmllczIkX2kiLCJmdW5jdGlvbk5hbWUiLCJjb21wb25lbnRzIiwiZGlzdGlsbENvbXBvbmVudHMiLCJhbGxDb21wb25lbnRzIiwiX2l0ZXJhdG9yMjEiLCJfc3RlcDIxIiwiY29tcG9uZW50IiwiaXMiLCJ0ZW1wbGF0ZUhhc0xvYWRlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/distill.js\n"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/global */ /******/ (() => { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./src/distill.js"); /******/ /******/ })() ;