diff --git "a/dist/distill.bundle.js" "b/dist/distill.bundle.js" new file mode 100644--- /dev/null +++ "b/dist/distill.bundle.js" @@ -0,0 +1,69 @@ +/* + * 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
Feb 19, 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+PGEgaHJlZj1cImhmLmNvXCI+VW5pdmVyc2l0eSBvZiBCb2xvZ25hPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ID5cclxuICAgICAgICAgIDxoMz5QdWJsaXNoZWQ8L2gzPlxyXG4gICAgICAgICAgPGRpdj5GZWIgMTksIDIwMjU8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaWRlIHBkZi1kb3dubG9hZFwiPlxyXG4gICAgICA8aDM+RG93bmxvYWQ8L2gzPlxyXG4gICAgICA8YSBocmVmPVwiaGYuY29cIj5cclxuICAgICAgPGltZyBzdHlsZT1cIndpZHRoOiAzMnB4O1wiIHNyYz1cIi4uL2Fzc2V0cy9pbWFnZXMvMjU2cHgtUERGLnBuZ1wiIGFsdD1cIlBERlwiPjwvYT5cclxuICAgIDwvZGl2PlxyXG5gO1xyXG4gIH1cclxuXHJcbiAgY2xhc3MgQnlsaW5lIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC1ieWxpbmUnOyB9XHJcblxyXG4gICAgc2V0IGZyb250TWF0dGVyKGZyb250TWF0dGVyKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gYnlsaW5lVGVtcGxhdGUoZnJvbnRNYXR0ZXIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgY29uc3QgVCQzID0gVGVtcGxhdGUoXHJcbiAgICBcImQtY2l0ZVwiLFxyXG4gICAgYFxyXG48c3R5bGU+XHJcblxyXG46aG9zdCB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4uY2l0YXRpb24ge1xyXG4gIGNvbG9yOiBoc2xhKDIwNiwgOTAlLCAyMCUsIDAuNyk7XHJcbn1cclxuXHJcbi5jaXRhdGlvbi1udW1iZXIge1xyXG4gIGN1cnNvcjogZGVmYXVsdDtcclxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiUm9ib3RvXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcclxuICBmb250LXNpemU6IDc1JTtcclxuICBjb2xvcjogaHNsYSgyMDYsIDkwJSwgMjAlLCAwLjcpO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICBsaW5lLWhlaWdodDogMS4xZW07XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB0b3A6IC0ycHg7XHJcbiAgbWFyZ2luOiAwIDJweDtcclxufVxyXG5cclxuZmlnY2FwdGlvbiAuY2l0YXRpb24tbnVtYmVyIHtcclxuICBmb250LXNpemU6IDExcHg7XHJcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICB0b3A6IC0ycHg7XHJcbiAgbGluZS1oZWlnaHQ6IDFlbTtcclxufVxyXG5cclxudWwge1xyXG4gIG1hcmdpbjogMDtcclxuICBwYWRkaW5nOiAwO1xyXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcclxufVxyXG5cclxudWwgbGkge1xyXG4gIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDEwcHg7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xKVxyXG59XHJcblxyXG51bCBsaTpsYXN0LW9mLXR5cGUge1xyXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XHJcbn1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG48ZC1ob3Zlci1ib3ggaWQ9XCJob3Zlci1ib3hcIj48L2QtaG92ZXItYm94PlxyXG5cclxuPGRpdiBpZD1cImNpdGF0aW9uLVwiIGNsYXNzPVwiY2l0YXRpb25cIj5cclxuICA8c3BhbiBjbGFzcz1cImNpdGF0aW9uLW51bWJlclwiPjwvc3Bhbj5cclxuPC9kaXY+XHJcbmBcclxuICApO1xyXG5cclxuICBjbGFzcyBDaXRlIGV4dGVuZHMgVCQzKEhUTUxFbGVtZW50KSB7XHJcbiAgICAvKiBMaWZlY3ljbGUgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG4gICAgICB0aGlzLl9udW1iZXJzID0gW107XHJcbiAgICAgIHRoaXMuX2VudHJpZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgdGhpcy5vdXRlclNwYW4gPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihcIiNjaXRhdGlvbi1cIik7XHJcbiAgICAgIHRoaXMuaW5uZXJTcGFuID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2l0YXRpb24tbnVtYmVyXCIpO1xyXG4gICAgICB0aGlzLmhvdmVyQm94ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoXCJkLWhvdmVyLWJveFwiKTtcclxuICAgICAgd2luZG93LmN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKFwiZC1ob3Zlci1ib3hcIikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ob3ZlckJveC5saXN0ZW4odGhpcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpbiBjYXNlIHRoaXMgY29tcG9uZW50IGdvdCBjb25uZWN0ZWQgYWZ0ZXIgdmFsdWVzIHdlcmUgc2V0XHJcbiAgICAgIGlmICh0aGlzLm51bWJlcnMpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlOdW1iZXJzKHRoaXMubnVtYmVycyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZW50cmllcykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUVudHJpZXModGhpcy5lbnRyaWVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vVE9ETyBUaGlzIGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wIG9uIGZpcmVmb3ggd2l0aCBwb2x5ZmlsbHMuXHJcbiAgICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciBpbnRlcmFjdGl2ZSBlZGl0aW5nIHNvIG5vIHByaW9yaXR5LlxyXG4gICAgLy8gZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAvLyBjb25zdCBvcHRpb25zID0geyBkZXRhaWw6IFt0aGlzLCB0aGlzLmtleXNdLCBidWJibGVzOiB0cnVlIH07XHJcbiAgICAvLyBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25DaXRlS2V5UmVtb3ZlZCcsIG9wdGlvbnMpO1xyXG4gICAgLy8gZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLyogb2JzZXJ2ZSAna2V5JyBhdHRyaWJ1dGUgKi9cclxuXHJcbiAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcclxuICAgICAgcmV0dXJuIFtcImtleVwiLCBcImJpYnRleC1rZXlcIl07XHJcbiAgICB9XHJcblxyXG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xyXG4gICAgICBjb25zdCBldmVudE5hbWUgPSBvbGRWYWx1ZSA/IFwib25DaXRlS2V5Q2hhbmdlZFwiIDogXCJvbkNpdGVLZXlDcmVhdGVkXCI7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBuZXdWYWx1ZS5zcGxpdChcIixcIikubWFwKGsgPT4gay50cmltKCkpO1xyXG4gICAgICBjb25zdCBvcHRpb25zID0geyBkZXRhaWw6IFt0aGlzLCBrZXlzXSwgYnViYmxlczogdHJ1ZSB9O1xyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQga2V5KHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwia2V5XCIsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQga2V5KCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJrZXlcIikgfHwgdGhpcy5nZXRBdHRyaWJ1dGUoXCJiaWJ0ZXgta2V5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBrZXlzKCkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmtleS5zcGxpdChcIixcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU2V0dGVycyAmIFJlbmRlcmluZyAqL1xyXG5cclxuICAgIHNldCBudW1iZXJzKG51bWJlcnMpIHtcclxuICAgICAgdGhpcy5fbnVtYmVycyA9IG51bWJlcnM7XHJcbiAgICAgIHRoaXMuZGlzcGxheU51bWJlcnMobnVtYmVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG51bWJlcnMoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9udW1iZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlOdW1iZXJzKG51bWJlcnMpIHtcclxuICAgICAgaWYgKCF0aGlzLmlubmVyU3BhbikgcmV0dXJuO1xyXG4gICAgICBjb25zdCBudW1iZXJTdHJpbmdzID0gbnVtYmVycy5tYXAoaW5kZXggPT4ge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PSAtMSA/IFwiP1wiIDogaW5kZXggKyAxICsgXCJcIjtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gXCJbXCIgKyBudW1iZXJTdHJpbmdzLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xyXG4gICAgICB0aGlzLmlubmVyU3Bhbi50ZXh0Q29udGVudCA9IHRleHRDb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBlbnRyaWVzKGVudHJpZXMpIHtcclxuICAgICAgdGhpcy5fZW50cmllcyA9IGVudHJpZXM7XHJcbiAgICAgIHRoaXMuZGlzcGxheUVudHJpZXMoZW50cmllcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVudHJpZXMoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlFbnRyaWVzKGVudHJpZXMpIHtcclxuICAgICAgaWYgKCF0aGlzLmhvdmVyQm94KSByZXR1cm47XHJcbiAgICAgIHRoaXMuaG92ZXJCb3guaW5uZXJIVE1MID0gYDx1bD5cclxuICAgICAgJHtlbnRyaWVzXHJcbiAgICAgICAgLm1hcChob3Zlcl9jaXRlKVxyXG4gICAgICAgIC5tYXAoaHRtbCA9PiBgPGxpPiR7aHRtbH08L2xpPmApXHJcbiAgICAgICAgLmpvaW4oXCJcXG5cIil9XHJcbiAgICA8L3VsPmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IHN0eWxlcyQxID0gYFxyXG5kLWNpdGF0aW9uLWxpc3Qge1xyXG4gIGNvbnRhaW46IHN0eWxlO1xyXG59XHJcblxyXG5kLWNpdGF0aW9uLWxpc3QgLnJlZmVyZW5jZXMge1xyXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xyXG59XHJcblxyXG5kLWNpdGF0aW9uLWxpc3QgLnJlZmVyZW5jZXMgLnRpdGxlIHtcclxuICBmb250LXdlaWdodDogNTAwO1xyXG59XHJcbmA7XHJcblxyXG4gIGZ1bmN0aW9uIHJlbmRlckNpdGF0aW9uTGlzdChlbGVtZW50LCBlbnRyaWVzLCBkb209ZG9jdW1lbnQpIHtcclxuICAgIGlmIChlbnRyaWVzLnNpemUgPiAwKSB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICBsZXQgbGlzdCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLnJlZmVyZW5jZXMnKTtcclxuICAgICAgaWYgKGxpc3QpIHtcclxuICAgICAgICBsaXN0LmlubmVySFRNTCA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlc1RhZyA9IGRvbS5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICAgIHN0eWxlc1RhZy5pbm5lckhUTUwgPSBzdHlsZXMkMTtcclxuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlc1RhZyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhlYWRpbmcgPSBkb20uY3JlYXRlRWxlbWVudCgnaDMnKTtcclxuICAgICAgICBoZWFkaW5nLmlkID0gJ3JlZmVyZW5jZXMnO1xyXG4gICAgICAgIGhlYWRpbmcudGV4dENvbnRlbnQgPSAnUmVmZXJlbmNlcyc7XHJcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChoZWFkaW5nKTtcclxuXHJcbiAgICAgICAgbGlzdCA9IGRvbS5jcmVhdGVFbGVtZW50KCdvbCcpO1xyXG4gICAgICAgIGxpc3QuaWQgPSAncmVmZXJlbmNlcy1saXN0JztcclxuICAgICAgICBsaXN0LmNsYXNzTmFtZSA9ICdyZWZlcmVuY2VzJztcclxuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxpc3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBlbnRyaWVzKSB7XHJcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBkb20uY3JlYXRlRWxlbWVudCgnbGknKTtcclxuICAgICAgICBsaXN0SXRlbS5pZCA9IGtleTtcclxuICAgICAgICBsaXN0SXRlbS5pbm5lckhUTUwgPSBiaWJsaW9ncmFwaHlfY2l0ZShlbnRyeSk7XHJcbiAgICAgICAgbGlzdC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsYXNzIENpdGF0aW9uTGlzdCBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2QtY2l0YXRpb24tbGlzdCc7IH1cclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzdGlsbC1wcmVyZW5kZXJlZCcpKSB7XHJcbiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNpdGF0aW9ucyhjaXRhdGlvbnMpIHtcclxuICAgICAgcmVuZGVyQ2l0YXRpb25MaXN0KHRoaXMsIGNpdGF0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFyIHByaXNtID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSkge1xyXG4gIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgIEJlZ2luIHByaXNtLWNvcmUuanNcclxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gIHZhciBfc2VsZiA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcclxuICBcdD8gd2luZG93ICAgLy8gaWYgaW4gYnJvd3NlclxyXG4gIFx0OiAoXHJcbiAgXHRcdCh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSlcclxuICBcdFx0PyBzZWxmIC8vIGlmIGluIHdvcmtlclxyXG4gIFx0XHQ6IHt9ICAgLy8gaWYgaW4gbm9kZSBqc1xyXG4gIFx0KTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJpc206IExpZ2h0d2VpZ2h0LCByb2J1c3QsIGVsZWdhbnQgc3ludGF4IGhpZ2hsaWdodGluZ1xyXG4gICAqIE1JVCBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwL1xyXG4gICAqIEBhdXRob3IgTGVhIFZlcm91IGh0dHA6Ly9sZWEudmVyb3UubWVcclxuICAgKi9cclxuXHJcbiAgdmFyIFByaXNtID0gKGZ1bmN0aW9uIChfc2VsZil7XHJcblxyXG4gIC8vIFByaXZhdGUgaGVscGVyIHZhcnNcclxuICB2YXIgbGFuZyA9IC9cXGJsYW5nKD86dWFnZSk/LShbXFx3LV0rKVxcYi9pO1xyXG4gIHZhciB1bmlxdWVJZCA9IDA7XHJcblxyXG5cclxuICB2YXIgXyA9IHtcclxuICBcdG1hbnVhbDogX3NlbGYuUHJpc20gJiYgX3NlbGYuUHJpc20ubWFudWFsLFxyXG4gIFx0ZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyOiBfc2VsZi5QcmlzbSAmJiBfc2VsZi5QcmlzbS5kaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXIsXHJcbiAgXHR1dGlsOiB7XHJcbiAgXHRcdGVuY29kZTogZnVuY3Rpb24gZW5jb2RlKHRva2Vucykge1xyXG4gIFx0XHRcdGlmICh0b2tlbnMgaW5zdGFuY2VvZiBUb2tlbikge1xyXG4gIFx0XHRcdFx0cmV0dXJuIG5ldyBUb2tlbih0b2tlbnMudHlwZSwgZW5jb2RlKHRva2Vucy5jb250ZW50KSwgdG9rZW5zLmFsaWFzKTtcclxuICBcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodG9rZW5zKSkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRva2Vucy5tYXAoZW5jb2RlKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRva2Vucy5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC9cXHUwMGEwL2csICcgJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LFxyXG5cclxuICBcdFx0dHlwZTogZnVuY3Rpb24gKG8pIHtcclxuICBcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdG9iaklkOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdFx0aWYgKCFvYmpbJ19faWQnXSkge1xyXG4gIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19faWQnLCB7IHZhbHVlOiArK3VuaXF1ZUlkIH0pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRyZXR1cm4gb2JqWydfX2lkJ107XHJcbiAgXHRcdH0sXHJcblxyXG4gIFx0XHQvLyBEZWVwIGNsb25lIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiAoZS5nLiB0byBleHRlbmQgaXQpXHJcbiAgXHRcdGNsb25lOiBmdW5jdGlvbiBkZWVwQ2xvbmUobywgdmlzaXRlZCkge1xyXG4gIFx0XHRcdHZhciBjbG9uZSwgaWQsIHR5cGUgPSBfLnV0aWwudHlwZShvKTtcclxuICBcdFx0XHR2aXNpdGVkID0gdmlzaXRlZCB8fCB7fTtcclxuXHJcbiAgXHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcbiAgXHRcdFx0XHRjYXNlICdPYmplY3QnOlxyXG4gIFx0XHRcdFx0XHRpZCA9IF8udXRpbC5vYmpJZChvKTtcclxuICBcdFx0XHRcdFx0aWYgKHZpc2l0ZWRbaWRdKSB7XHJcbiAgXHRcdFx0XHRcdFx0cmV0dXJuIHZpc2l0ZWRbaWRdO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdGNsb25lID0ge307XHJcbiAgXHRcdFx0XHRcdHZpc2l0ZWRbaWRdID0gY2xvbmU7XHJcblxyXG4gIFx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gbykge1xyXG4gIFx0XHRcdFx0XHRcdGlmIChvLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICBcdFx0XHRcdFx0XHRcdGNsb25lW2tleV0gPSBkZWVwQ2xvbmUob1trZXldLCB2aXNpdGVkKTtcclxuICBcdFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHRcdHJldHVybiBjbG9uZTtcclxuXHJcbiAgXHRcdFx0XHRjYXNlICdBcnJheSc6XHJcbiAgXHRcdFx0XHRcdGlkID0gXy51dGlsLm9iaklkKG8pO1xyXG4gIFx0XHRcdFx0XHRpZiAodmlzaXRlZFtpZF0pIHtcclxuICBcdFx0XHRcdFx0XHRyZXR1cm4gdmlzaXRlZFtpZF07XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcclxuICBcdFx0XHRcdFx0dmlzaXRlZFtpZF0gPSBjbG9uZTtcclxuXHJcbiAgXHRcdFx0XHRcdG8uZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xyXG4gIFx0XHRcdFx0XHRcdGNsb25lW2ldID0gZGVlcENsb25lKHYsIHZpc2l0ZWQpO1xyXG4gIFx0XHRcdFx0XHR9KTtcclxuXHJcbiAgXHRcdFx0XHRcdHJldHVybiBjbG9uZTtcclxuXHJcbiAgXHRcdFx0XHRkZWZhdWx0OlxyXG4gIFx0XHRcdFx0XHRyZXR1cm4gbztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcblxyXG4gIFx0XHQvKipcclxuICBcdFx0ICogUmV0dXJucyB0aGUgUHJpc20gbGFuZ3VhZ2Ugb2YgdGhlIGdpdmVuIGVsZW1lbnQgc2V0IGJ5IGEgYGxhbmd1YWdlLXh4eHhgIG9yIGBsYW5nLXh4eHhgIGNsYXNzLlxyXG4gIFx0XHQgKlxyXG4gIFx0XHQgKiBJZiBubyBsYW5ndWFnZSBpcyBzZXQgZm9yIHRoZSBlbGVtZW50IG9yIHRoZSBlbGVtZW50IGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgYG5vbmVgIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgXHRcdCAqXHJcbiAgXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxyXG4gIFx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gIFx0XHQgKi9cclxuICBcdFx0Z2V0TGFuZ3VhZ2U6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgXHRcdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWxhbmcudGVzdChlbGVtZW50LmNsYXNzTmFtZSkpIHtcclxuICBcdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGlmIChlbGVtZW50KSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gKGVsZW1lbnQuY2xhc3NOYW1lLm1hdGNoKGxhbmcpIHx8IFssICdub25lJ10pWzFdLnRvTG93ZXJDYXNlKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybiAnbm9uZSc7XHJcbiAgXHRcdH0sXHJcblxyXG4gIFx0XHQvKipcclxuICBcdFx0ICogUmV0dXJucyB0aGUgc2NyaXB0IGVsZW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLlxyXG4gIFx0XHQgKlxyXG4gIFx0XHQgKiBUaGlzIGRvZXMgX19ub3RfXyB3b3JrIGZvciBsaW5lIHNjcmlwdCBlbGVtZW50LlxyXG4gIFx0XHQgKlxyXG4gIFx0XHQgKiBAcmV0dXJucyB7SFRNTFNjcmlwdEVsZW1lbnQgfCBudWxsfVxyXG4gIFx0XHQgKi9cclxuICBcdFx0Y3VycmVudFNjcmlwdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0aWYgKCdjdXJyZW50U2NyaXB0JyBpbiBkb2N1bWVudCkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQ7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHQvLyBJRTExIHdvcmthcm91bmRcclxuICBcdFx0XHQvLyB3ZSdsbCBnZXQgdGhlIHNyYyBvZiB0aGUgY3VycmVudCBzY3JpcHQgYnkgcGFyc2luZyBJRTExJ3MgZXJyb3Igc3RhY2sgdHJhY2VcclxuICBcdFx0XHQvLyB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGlubGluZSBzY3JpcHRzXHJcblxyXG4gIFx0XHRcdHRyeSB7XHJcbiAgXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKTtcclxuICBcdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuICBcdFx0XHRcdC8vIEdldCBmaWxlIHNyYyB1cmwgZnJvbSBzdGFjay4gU3BlY2lmaWNhbGx5IHdvcmtzIHdpdGggdGhlIGZvcm1hdCBvZiBzdGFjayB0cmFjZXMgaW4gSUUuXHJcbiAgXHRcdFx0XHQvLyBBIHN0YWNrIHdpbGwgbG9vayBsaWtlIHRoaXM6XHJcbiAgXHRcdFx0XHQvL1xyXG4gIFx0XHRcdFx0Ly8gRXJyb3JcclxuICBcdFx0XHRcdC8vICAgIGF0IF8udXRpbC5jdXJyZW50U2NyaXB0IChodHRwOi8vbG9jYWxob3N0L2NvbXBvbmVudHMvcHJpc20tY29yZS5qczoxMTk6NSlcclxuICBcdFx0XHRcdC8vICAgIGF0IEdsb2JhbCBjb2RlIChodHRwOi8vbG9jYWxob3N0L2NvbXBvbmVudHMvcHJpc20tY29yZS5qczo2MDY6MSlcclxuXHJcbiAgXHRcdFx0XHR2YXIgc3JjID0gKC9hdCBbXihcXHJcXG5dKlxcKCguKik6Lis6LitcXCkkL2kuZXhlYyhlcnIuc3RhY2spIHx8IFtdKVsxXTtcclxuICBcdFx0XHRcdGlmIChzcmMpIHtcclxuICBcdFx0XHRcdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XHJcbiAgXHRcdFx0XHRcdGZvciAodmFyIGkgaW4gc2NyaXB0cykge1xyXG4gIFx0XHRcdFx0XHRcdGlmIChzY3JpcHRzW2ldLnNyYyA9PSBzcmMpIHtcclxuICBcdFx0XHRcdFx0XHRcdHJldHVybiBzY3JpcHRzW2ldO1xyXG4gIFx0XHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdGxhbmd1YWdlczoge1xyXG4gIFx0XHRleHRlbmQ6IGZ1bmN0aW9uIChpZCwgcmVkZWYpIHtcclxuICBcdFx0XHR2YXIgbGFuZyA9IF8udXRpbC5jbG9uZShfLmxhbmd1YWdlc1tpZF0pO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBrZXkgaW4gcmVkZWYpIHtcclxuICBcdFx0XHRcdGxhbmdba2V5XSA9IHJlZGVmW2tleV07XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRyZXR1cm4gbGFuZztcclxuICBcdFx0fSxcclxuXHJcbiAgXHRcdC8qKlxyXG4gIFx0XHQgKiBJbnNlcnQgYSB0b2tlbiBiZWZvcmUgYW5vdGhlciB0b2tlbiBpbiBhIGxhbmd1YWdlIGxpdGVyYWxcclxuICBcdFx0ICogQXMgdGhpcyBuZWVkcyB0byByZWNyZWF0ZSB0aGUgb2JqZWN0ICh3ZSBjYW5ub3QgYWN0dWFsbHkgaW5zZXJ0IGJlZm9yZSBrZXlzIGluIG9iamVjdCBsaXRlcmFscyksXHJcbiAgXHRcdCAqIHdlIGNhbm5vdCBqdXN0IHByb3ZpZGUgYW4gb2JqZWN0LCB3ZSBuZWVkIGFuIG9iamVjdCBhbmQgYSBrZXkuXHJcbiAgXHRcdCAqIEBwYXJhbSBpbnNpZGUgVGhlIGtleSAob3IgbGFuZ3VhZ2UgaWQpIG9mIHRoZSBwYXJlbnRcclxuICBcdFx0ICogQHBhcmFtIGJlZm9yZSBUaGUga2V5IHRvIGluc2VydCBiZWZvcmUuXHJcbiAgXHRcdCAqIEBwYXJhbSBpbnNlcnQgT2JqZWN0IHdpdGggdGhlIGtleS92YWx1ZSBwYWlycyB0byBpbnNlcnRcclxuICBcdFx0ICogQHBhcmFtIHJvb3QgVGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIGBpbnNpZGVgLiBJZiBlcXVhbCB0byBQcmlzbS5sYW5ndWFnZXMsIGl0IGNhbiBiZSBvbWl0dGVkLlxyXG4gIFx0XHQgKi9cclxuICBcdFx0aW5zZXJ0QmVmb3JlOiBmdW5jdGlvbiAoaW5zaWRlLCBiZWZvcmUsIGluc2VydCwgcm9vdCkge1xyXG4gIFx0XHRcdHJvb3QgPSByb290IHx8IF8ubGFuZ3VhZ2VzO1xyXG4gIFx0XHRcdHZhciBncmFtbWFyID0gcm9vdFtpbnNpZGVdO1xyXG4gIFx0XHRcdHZhciByZXQgPSB7fTtcclxuXHJcbiAgXHRcdFx0Zm9yICh2YXIgdG9rZW4gaW4gZ3JhbW1hcikge1xyXG4gIFx0XHRcdFx0aWYgKGdyYW1tYXIuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XHJcblxyXG4gIFx0XHRcdFx0XHRpZiAodG9rZW4gPT0gYmVmb3JlKSB7XHJcbiAgXHRcdFx0XHRcdFx0Zm9yICh2YXIgbmV3VG9rZW4gaW4gaW5zZXJ0KSB7XHJcbiAgXHRcdFx0XHRcdFx0XHRpZiAoaW5zZXJ0Lmhhc093blByb3BlcnR5KG5ld1Rva2VuKSkge1xyXG4gIFx0XHRcdFx0XHRcdFx0XHRyZXRbbmV3VG9rZW5dID0gaW5zZXJ0W25ld1Rva2VuXTtcclxuICBcdFx0XHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHRcdC8vIERvIG5vdCBpbnNlcnQgdG9rZW4gd2hpY2ggYWxzbyBvY2N1ciBpbiBpbnNlcnQuIFNlZSAjMTUyNVxyXG4gIFx0XHRcdFx0XHRpZiAoIWluc2VydC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcclxuICBcdFx0XHRcdFx0XHRyZXRbdG9rZW5dID0gZ3JhbW1hclt0b2tlbl07XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHZhciBvbGQgPSByb290W2luc2lkZV07XHJcbiAgXHRcdFx0cm9vdFtpbnNpZGVdID0gcmV0O1xyXG5cclxuICBcdFx0XHQvLyBVcGRhdGUgcmVmZXJlbmNlcyBpbiBvdGhlciBsYW5ndWFnZSBkZWZpbml0aW9uc1xyXG4gIFx0XHRcdF8ubGFuZ3VhZ2VzLkRGUyhfLmxhbmd1YWdlcywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gIFx0XHRcdFx0aWYgKHZhbHVlID09PSBvbGQgJiYga2V5ICE9IGluc2lkZSkge1xyXG4gIFx0XHRcdFx0XHR0aGlzW2tleV0gPSByZXQ7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSk7XHJcblxyXG4gIFx0XHRcdHJldHVybiByZXQ7XHJcbiAgXHRcdH0sXHJcblxyXG4gIFx0XHQvLyBUcmF2ZXJzZSBhIGxhbmd1YWdlIGRlZmluaXRpb24gd2l0aCBEZXB0aCBGaXJzdCBTZWFyY2hcclxuICBcdFx0REZTOiBmdW5jdGlvbiBERlMobywgY2FsbGJhY2ssIHR5cGUsIHZpc2l0ZWQpIHtcclxuICBcdFx0XHR2aXNpdGVkID0gdmlzaXRlZCB8fCB7fTtcclxuXHJcbiAgXHRcdFx0dmFyIG9iaklkID0gXy51dGlsLm9iaklkO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpIGluIG8pIHtcclxuICBcdFx0XHRcdGlmIChvLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwobywgaSwgb1tpXSwgdHlwZSB8fCBpKTtcclxuXHJcbiAgXHRcdFx0XHRcdHZhciBwcm9wZXJ0eSA9IG9baV0sXHJcbiAgXHRcdFx0XHRcdCAgICBwcm9wZXJ0eVR5cGUgPSBfLnV0aWwudHlwZShwcm9wZXJ0eSk7XHJcblxyXG4gIFx0XHRcdFx0XHRpZiAocHJvcGVydHlUeXBlID09PSAnT2JqZWN0JyAmJiAhdmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldKSB7XHJcbiAgXHRcdFx0XHRcdFx0dmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldID0gdHJ1ZTtcclxuICBcdFx0XHRcdFx0XHRERlMocHJvcGVydHksIGNhbGxiYWNrLCBudWxsLCB2aXNpdGVkKTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHRlbHNlIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdBcnJheScgJiYgIXZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSkge1xyXG4gIFx0XHRcdFx0XHRcdHZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSA9IHRydWU7XHJcbiAgXHRcdFx0XHRcdFx0REZTKHByb3BlcnR5LCBjYWxsYmFjaywgaSwgdmlzaXRlZCk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcbiAgXHRwbHVnaW5zOiB7fSxcclxuXHJcbiAgXHRoaWdobGlnaHRBbGw6IGZ1bmN0aW9uKGFzeW5jLCBjYWxsYmFjaykge1xyXG4gIFx0XHRfLmhpZ2hsaWdodEFsbFVuZGVyKGRvY3VtZW50LCBhc3luYywgY2FsbGJhY2spO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRoaWdobGlnaHRBbGxVbmRlcjogZnVuY3Rpb24oY29udGFpbmVyLCBhc3luYywgY2FsbGJhY2spIHtcclxuICBcdFx0dmFyIGVudiA9IHtcclxuICBcdFx0XHRjYWxsYmFjazogY2FsbGJhY2ssXHJcbiAgXHRcdFx0Y29udGFpbmVyOiBjb250YWluZXIsXHJcbiAgXHRcdFx0c2VsZWN0b3I6ICdjb2RlW2NsYXNzKj1cImxhbmd1YWdlLVwiXSwgW2NsYXNzKj1cImxhbmd1YWdlLVwiXSBjb2RlLCBjb2RlW2NsYXNzKj1cImxhbmctXCJdLCBbY2xhc3MqPVwibGFuZy1cIl0gY29kZSdcclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0YWxsJywgZW52KTtcclxuXHJcbiAgXHRcdGVudi5lbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlbnYuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoZW52LnNlbGVjdG9yKSk7XHJcblxyXG4gIFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLWFsbC1lbGVtZW50cy1oaWdobGlnaHQnLCBlbnYpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGVsZW1lbnQ7IGVsZW1lbnQgPSBlbnYuZWxlbWVudHNbaSsrXTspIHtcclxuICBcdFx0XHRfLmhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudCwgYXN5bmMgPT09IHRydWUsIGVudi5jYWxsYmFjayk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0aGlnaGxpZ2h0RWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgYXN5bmMsIGNhbGxiYWNrKSB7XHJcbiAgXHRcdC8vIEZpbmQgbGFuZ3VhZ2VcclxuICBcdFx0dmFyIGxhbmd1YWdlID0gXy51dGlsLmdldExhbmd1YWdlKGVsZW1lbnQpO1xyXG4gIFx0XHR2YXIgZ3JhbW1hciA9IF8ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcclxuXHJcbiAgXHRcdC8vIFNldCBsYW5ndWFnZSBvbiB0aGUgZWxlbWVudCwgaWYgbm90IHByZXNlbnRcclxuICBcdFx0ZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKGxhbmcsICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykgKyAnIGxhbmd1YWdlLScgKyBsYW5ndWFnZTtcclxuXHJcbiAgXHRcdC8vIFNldCBsYW5ndWFnZSBvbiB0aGUgcGFyZW50LCBmb3Igc3R5bGluZ1xyXG4gIFx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gIFx0XHRpZiAocGFyZW50ICYmIHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAncHJlJykge1xyXG4gIFx0XHRcdHBhcmVudC5jbGFzc05hbWUgPSBwYXJlbnQuY2xhc3NOYW1lLnJlcGxhY2UobGFuZywgJycpLnJlcGxhY2UoL1xccysvZywgJyAnKSArICcgbGFuZ3VhZ2UtJyArIGxhbmd1YWdlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgY29kZSA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XHJcblxyXG4gIFx0XHR2YXIgZW52ID0ge1xyXG4gIFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlLFxyXG4gIFx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXHJcbiAgXHRcdFx0Y29kZTogY29kZVxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0ZnVuY3Rpb24gaW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKGhpZ2hsaWdodGVkQ29kZSkge1xyXG4gIFx0XHRcdGVudi5oaWdobGlnaHRlZENvZGUgPSBoaWdobGlnaHRlZENvZGU7XHJcblxyXG4gIFx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaW5zZXJ0JywgZW52KTtcclxuXHJcbiAgXHRcdFx0ZW52LmVsZW1lbnQuaW5uZXJIVE1MID0gZW52LmhpZ2hsaWdodGVkQ29kZTtcclxuXHJcbiAgXHRcdFx0Xy5ob29rcy5ydW4oJ2FmdGVyLWhpZ2hsaWdodCcsIGVudik7XHJcbiAgXHRcdFx0Xy5ob29rcy5ydW4oJ2NvbXBsZXRlJywgZW52KTtcclxuICBcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjay5jYWxsKGVudi5lbGVtZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1zYW5pdHktY2hlY2snLCBlbnYpO1xyXG5cclxuICBcdFx0aWYgKCFlbnYuY29kZSkge1xyXG4gIFx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XHJcbiAgXHRcdFx0Y2FsbGJhY2sgJiYgY2FsbGJhY2suY2FsbChlbnYuZWxlbWVudCk7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLWhpZ2hsaWdodCcsIGVudik7XHJcblxyXG4gIFx0XHRpZiAoIWVudi5ncmFtbWFyKSB7XHJcbiAgXHRcdFx0aW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKF8udXRpbC5lbmNvZGUoZW52LmNvZGUpKTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChhc3luYyAmJiBfc2VsZi5Xb3JrZXIpIHtcclxuICBcdFx0XHR2YXIgd29ya2VyID0gbmV3IFdvcmtlcihfLmZpbGVuYW1lKTtcclxuXHJcbiAgXHRcdFx0d29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkge1xyXG4gIFx0XHRcdFx0aW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKGV2dC5kYXRhKTtcclxuICBcdFx0XHR9O1xyXG5cclxuICBcdFx0XHR3b3JrZXIucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xyXG4gIFx0XHRcdFx0bGFuZ3VhZ2U6IGVudi5sYW5ndWFnZSxcclxuICBcdFx0XHRcdGNvZGU6IGVudi5jb2RlLFxyXG4gIFx0XHRcdFx0aW1tZWRpYXRlQ2xvc2U6IHRydWVcclxuICBcdFx0XHR9KSk7XHJcbiAgXHRcdH1cclxuICBcdFx0ZWxzZSB7XHJcbiAgXHRcdFx0aW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKF8uaGlnaGxpZ2h0KGVudi5jb2RlLCBlbnYuZ3JhbW1hciwgZW52Lmxhbmd1YWdlKSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0aGlnaGxpZ2h0OiBmdW5jdGlvbiAodGV4dCwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcclxuICBcdFx0dmFyIGVudiA9IHtcclxuICBcdFx0XHRjb2RlOiB0ZXh0LFxyXG4gIFx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXHJcbiAgXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlXHJcbiAgXHRcdH07XHJcbiAgXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtdG9rZW5pemUnLCBlbnYpO1xyXG4gIFx0XHRlbnYudG9rZW5zID0gXy50b2tlbml6ZShlbnYuY29kZSwgZW52LmdyYW1tYXIpO1xyXG4gIFx0XHRfLmhvb2tzLnJ1bignYWZ0ZXItdG9rZW5pemUnLCBlbnYpO1xyXG4gIFx0XHRyZXR1cm4gVG9rZW4uc3RyaW5naWZ5KF8udXRpbC5lbmNvZGUoZW52LnRva2VucyksIGVudi5sYW5ndWFnZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdHRva2VuaXplOiBmdW5jdGlvbih0ZXh0LCBncmFtbWFyKSB7XHJcbiAgXHRcdHZhciByZXN0ID0gZ3JhbW1hci5yZXN0O1xyXG4gIFx0XHRpZiAocmVzdCkge1xyXG4gIFx0XHRcdGZvciAodmFyIHRva2VuIGluIHJlc3QpIHtcclxuICBcdFx0XHRcdGdyYW1tYXJbdG9rZW5dID0gcmVzdFt0b2tlbl07XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRkZWxldGUgZ3JhbW1hci5yZXN0O1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgdG9rZW5MaXN0ID0gbmV3IExpbmtlZExpc3QoKTtcclxuICBcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCB0b2tlbkxpc3QuaGVhZCwgdGV4dCk7XHJcblxyXG4gIFx0XHRtYXRjaEdyYW1tYXIodGV4dCwgdG9rZW5MaXN0LCBncmFtbWFyLCB0b2tlbkxpc3QuaGVhZCwgMCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdG9BcnJheSh0b2tlbkxpc3QpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRob29rczoge1xyXG4gIFx0XHRhbGw6IHt9LFxyXG5cclxuICBcdFx0YWRkOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spIHtcclxuICBcdFx0XHR2YXIgaG9va3MgPSBfLmhvb2tzLmFsbDtcclxuXHJcbiAgXHRcdFx0aG9va3NbbmFtZV0gPSBob29rc1tuYW1lXSB8fCBbXTtcclxuXHJcbiAgXHRcdFx0aG9va3NbbmFtZV0ucHVzaChjYWxsYmFjayk7XHJcbiAgXHRcdH0sXHJcblxyXG4gIFx0XHRydW46IGZ1bmN0aW9uIChuYW1lLCBlbnYpIHtcclxuICBcdFx0XHR2YXIgY2FsbGJhY2tzID0gXy5ob29rcy5hbGxbbmFtZV07XHJcblxyXG4gIFx0XHRcdGlmICghY2FsbGJhY2tzIHx8ICFjYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm47XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpPTAsIGNhbGxiYWNrOyBjYWxsYmFjayA9IGNhbGxiYWNrc1tpKytdOykge1xyXG4gIFx0XHRcdFx0Y2FsbGJhY2soZW52KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0VG9rZW46IFRva2VuXHJcbiAgfTtcclxuXHJcbiAgX3NlbGYuUHJpc20gPSBfO1xyXG5cclxuICBmdW5jdGlvbiBUb2tlbih0eXBlLCBjb250ZW50LCBhbGlhcywgbWF0Y2hlZFN0ciwgZ3JlZWR5KSB7XHJcbiAgXHR0aGlzLnR5cGUgPSB0eXBlO1xyXG4gIFx0dGhpcy5jb250ZW50ID0gY29udGVudDtcclxuICBcdHRoaXMuYWxpYXMgPSBhbGlhcztcclxuICBcdC8vIENvcHkgb2YgdGhlIGZ1bGwgc3RyaW5nIHRoaXMgdG9rZW4gd2FzIGNyZWF0ZWQgZnJvbVxyXG4gIFx0dGhpcy5sZW5ndGggPSAobWF0Y2hlZFN0ciB8fCAnJykubGVuZ3RofDA7XHJcbiAgXHR0aGlzLmdyZWVkeSA9ICEhZ3JlZWR5O1xyXG4gIH1cclxuXHJcbiAgVG9rZW4uc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KG8sIGxhbmd1YWdlKSB7XHJcbiAgXHRpZiAodHlwZW9mIG8gPT0gJ3N0cmluZycpIHtcclxuICBcdFx0cmV0dXJuIG87XHJcbiAgXHR9XHJcbiAgXHRpZiAoQXJyYXkuaXNBcnJheShvKSkge1xyXG4gIFx0XHR2YXIgcyA9ICcnO1xyXG4gIFx0XHRvLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0XHRzICs9IHN0cmluZ2lmeShlLCBsYW5ndWFnZSk7XHJcbiAgXHRcdH0pO1xyXG4gIFx0XHRyZXR1cm4gcztcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgZW52ID0ge1xyXG4gIFx0XHR0eXBlOiBvLnR5cGUsXHJcbiAgXHRcdGNvbnRlbnQ6IHN0cmluZ2lmeShvLmNvbnRlbnQsIGxhbmd1YWdlKSxcclxuICBcdFx0dGFnOiAnc3BhbicsXHJcbiAgXHRcdGNsYXNzZXM6IFsndG9rZW4nLCBvLnR5cGVdLFxyXG4gIFx0XHRhdHRyaWJ1dGVzOiB7fSxcclxuICBcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlXHJcbiAgXHR9O1xyXG5cclxuICBcdHZhciBhbGlhc2VzID0gby5hbGlhcztcclxuICBcdGlmIChhbGlhc2VzKSB7XHJcbiAgXHRcdGlmIChBcnJheS5pc0FycmF5KGFsaWFzZXMpKSB7XHJcbiAgXHRcdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW52LmNsYXNzZXMsIGFsaWFzZXMpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGVudi5jbGFzc2VzLnB1c2goYWxpYXNlcyk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRfLmhvb2tzLnJ1bignd3JhcCcsIGVudik7XHJcblxyXG4gIFx0dmFyIGF0dHJpYnV0ZXMgPSAnJztcclxuICBcdGZvciAodmFyIG5hbWUgaW4gZW52LmF0dHJpYnV0ZXMpIHtcclxuICBcdFx0YXR0cmlidXRlcyArPSAnICcgKyBuYW1lICsgJz1cIicgKyAoZW52LmF0dHJpYnV0ZXNbbmFtZV0gfHwgJycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKSArICdcIic7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuICc8JyArIGVudi50YWcgKyAnIGNsYXNzPVwiJyArIGVudi5jbGFzc2VzLmpvaW4oJyAnKSArICdcIicgKyBhdHRyaWJ1dGVzICsgJz4nICsgZW52LmNvbnRlbnQgKyAnPC8nICsgZW52LnRhZyArICc+JztcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdDxzdHJpbmcgfCBUb2tlbj59IHRva2VuTGlzdFxyXG4gICAqIEBwYXJhbSB7YW55fSBncmFtbWFyXHJcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0Tm9kZTxzdHJpbmcgfCBUb2tlbj59IHN0YXJ0Tm9kZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFBvc1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29uZXNob3Q9ZmFsc2VdXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF0Y2hHcmFtbWFyKHRleHQsIHRva2VuTGlzdCwgZ3JhbW1hciwgc3RhcnROb2RlLCBzdGFydFBvcywgb25lc2hvdCwgdGFyZ2V0KSB7XHJcbiAgXHRmb3IgKHZhciB0b2tlbiBpbiBncmFtbWFyKSB7XHJcbiAgXHRcdGlmICghZ3JhbW1hci5oYXNPd25Qcm9wZXJ0eSh0b2tlbikgfHwgIWdyYW1tYXJbdG9rZW5dKSB7XHJcbiAgXHRcdFx0Y29udGludWU7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBwYXR0ZXJucyA9IGdyYW1tYXJbdG9rZW5dO1xyXG4gIFx0XHRwYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkocGF0dGVybnMpID8gcGF0dGVybnMgOiBbcGF0dGVybnNdO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwYXR0ZXJucy5sZW5ndGg7ICsraikge1xyXG4gIFx0XHRcdGlmICh0YXJnZXQgJiYgdGFyZ2V0ID09IHRva2VuICsgJywnICsgaikge1xyXG4gIFx0XHRcdFx0cmV0dXJuO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dmFyIHBhdHRlcm4gPSBwYXR0ZXJuc1tqXSxcclxuICBcdFx0XHRcdGluc2lkZSA9IHBhdHRlcm4uaW5zaWRlLFxyXG4gIFx0XHRcdFx0bG9va2JlaGluZCA9ICEhcGF0dGVybi5sb29rYmVoaW5kLFxyXG4gIFx0XHRcdFx0Z3JlZWR5ID0gISFwYXR0ZXJuLmdyZWVkeSxcclxuICBcdFx0XHRcdGxvb2tiZWhpbmRMZW5ndGggPSAwLFxyXG4gIFx0XHRcdFx0YWxpYXMgPSBwYXR0ZXJuLmFsaWFzO1xyXG5cclxuICBcdFx0XHRpZiAoZ3JlZWR5ICYmICFwYXR0ZXJuLnBhdHRlcm4uZ2xvYmFsKSB7XHJcbiAgXHRcdFx0XHQvLyBXaXRob3V0IHRoZSBnbG9iYWwgZmxhZywgbGFzdEluZGV4IHdvbid0IHdvcmtcclxuICBcdFx0XHRcdHZhciBmbGFncyA9IHBhdHRlcm4ucGF0dGVybi50b1N0cmluZygpLm1hdGNoKC9baW1zdXldKiQvKVswXTtcclxuICBcdFx0XHRcdHBhdHRlcm4ucGF0dGVybiA9IFJlZ0V4cChwYXR0ZXJuLnBhdHRlcm4uc291cmNlLCBmbGFncyArICdnJyk7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRwYXR0ZXJuID0gcGF0dGVybi5wYXR0ZXJuIHx8IHBhdHRlcm47XHJcblxyXG4gIFx0XHRcdGZvciAoIC8vIGl0ZXJhdGUgdGhlIHRva2VuIGxpc3QgYW5kIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgdG9rZW4vc3RyaW5nIHBvc2l0aW9uXHJcbiAgXHRcdFx0XHR2YXIgY3VycmVudE5vZGUgPSBzdGFydE5vZGUubmV4dCwgcG9zID0gc3RhcnRQb3M7XHJcbiAgXHRcdFx0XHRjdXJyZW50Tm9kZSAhPT0gdG9rZW5MaXN0LnRhaWw7XHJcbiAgXHRcdFx0XHRwb3MgKz0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoLCBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm5leHRcclxuICBcdFx0XHQpIHtcclxuXHJcbiAgXHRcdFx0XHR2YXIgc3RyID0gY3VycmVudE5vZGUudmFsdWU7XHJcblxyXG4gIFx0XHRcdFx0aWYgKHRva2VuTGlzdC5sZW5ndGggPiB0ZXh0Lmxlbmd0aCkge1xyXG4gIFx0XHRcdFx0XHQvLyBTb21ldGhpbmcgd2VudCB0ZXJyaWJseSB3cm9uZywgQUJPUlQsIEFCT1JUIVxyXG4gIFx0XHRcdFx0XHRyZXR1cm47XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0aWYgKHN0ciBpbnN0YW5jZW9mIFRva2VuKSB7XHJcbiAgXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG4gIFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdHZhciByZW1vdmVDb3VudCA9IDE7IC8vIHRoaXMgaXMgdGhlIHRvIHBhcmFtZXRlciBvZiByZW1vdmVCZXR3ZWVuXHJcblxyXG4gIFx0XHRcdFx0aWYgKGdyZWVkeSAmJiBjdXJyZW50Tm9kZSAhPSB0b2tlbkxpc3QudGFpbC5wcmV2KSB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm4ubGFzdEluZGV4ID0gcG9zO1xyXG4gIFx0XHRcdFx0XHR2YXIgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModGV4dCk7XHJcbiAgXHRcdFx0XHRcdGlmICghbWF0Y2gpIHtcclxuICBcdFx0XHRcdFx0XHRicmVhaztcclxuICBcdFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdFx0dmFyIGZyb20gPSBtYXRjaC5pbmRleCArIChsb29rYmVoaW5kICYmIG1hdGNoWzFdID8gbWF0Y2hbMV0ubGVuZ3RoIDogMCk7XHJcbiAgXHRcdFx0XHRcdHZhciB0byA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gIFx0XHRcdFx0XHR2YXIgcCA9IHBvcztcclxuXHJcbiAgXHRcdFx0XHRcdC8vIGZpbmQgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgbWF0Y2hcclxuICBcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XHJcbiAgXHRcdFx0XHRcdHdoaWxlIChmcm9tID49IHApIHtcclxuICBcdFx0XHRcdFx0XHRjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm5leHQ7XHJcbiAgXHRcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0Ly8gYWRqdXN0IHBvcyAoYW5kIHApXHJcbiAgXHRcdFx0XHRcdHAgLT0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoO1xyXG4gIFx0XHRcdFx0XHRwb3MgPSBwO1xyXG5cclxuICBcdFx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFRva2VuLCB0aGVuIHRoZSBtYXRjaCBzdGFydHMgaW5zaWRlIGFub3RoZXIgVG9rZW4sIHdoaWNoIGlzIGludmFsaWRcclxuICBcdFx0XHRcdFx0aWYgKGN1cnJlbnROb2RlLnZhbHVlIGluc3RhbmNlb2YgVG9rZW4pIHtcclxuICBcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuICBcdFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdFx0Ly8gZmluZCB0aGUgbGFzdCBub2RlIHdoaWNoIGlzIGFmZmVjdGVkIGJ5IHRoaXMgbWF0Y2hcclxuICBcdFx0XHRcdFx0Zm9yIChcclxuICBcdFx0XHRcdFx0XHR2YXIgayA9IGN1cnJlbnROb2RlO1xyXG4gIFx0XHRcdFx0XHRcdGsgIT09IHRva2VuTGlzdC50YWlsICYmIChwIDwgdG8gfHwgKHR5cGVvZiBrLnZhbHVlID09PSAnc3RyaW5nJyAmJiAhay5wcmV2LnZhbHVlLmdyZWVkeSkpO1xyXG4gIFx0XHRcdFx0XHRcdGsgPSBrLm5leHRcclxuICBcdFx0XHRcdFx0KSB7XHJcbiAgXHRcdFx0XHRcdFx0cmVtb3ZlQ291bnQrKztcclxuICBcdFx0XHRcdFx0XHRwICs9IGsudmFsdWUubGVuZ3RoO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdHJlbW92ZUNvdW50LS07XHJcblxyXG4gIFx0XHRcdFx0XHQvLyByZXBsYWNlIHdpdGggdGhlIG5ldyBtYXRjaFxyXG4gIFx0XHRcdFx0XHRzdHIgPSB0ZXh0LnNsaWNlKHBvcywgcCk7XHJcbiAgXHRcdFx0XHRcdG1hdGNoLmluZGV4IC09IHBvcztcclxuICBcdFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcclxuXHJcbiAgXHRcdFx0XHRcdHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyhzdHIpO1xyXG4gIFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdGlmICghbWF0Y2gpIHtcclxuICBcdFx0XHRcdFx0aWYgKG9uZXNob3QpIHtcclxuICBcdFx0XHRcdFx0XHRicmVhaztcclxuICBcdFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdFx0Y29udGludWU7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0aWYgKGxvb2tiZWhpbmQpIHtcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZExlbmd0aCA9IG1hdGNoWzFdID8gbWF0Y2hbMV0ubGVuZ3RoIDogMDtcclxuICBcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4ICsgbG9va2JlaGluZExlbmd0aCxcclxuICBcdFx0XHRcdFx0bWF0Y2ggPSBtYXRjaFswXS5zbGljZShsb29rYmVoaW5kTGVuZ3RoKSxcclxuICBcdFx0XHRcdFx0dG8gPSBmcm9tICsgbWF0Y2gubGVuZ3RoLFxyXG4gIFx0XHRcdFx0XHRiZWZvcmUgPSBzdHIuc2xpY2UoMCwgZnJvbSksXHJcbiAgXHRcdFx0XHRcdGFmdGVyID0gc3RyLnNsaWNlKHRvKTtcclxuXHJcbiAgXHRcdFx0XHR2YXIgcmVtb3ZlRnJvbSA9IGN1cnJlbnROb2RlLnByZXY7XHJcblxyXG4gIFx0XHRcdFx0aWYgKGJlZm9yZSkge1xyXG4gIFx0XHRcdFx0XHRyZW1vdmVGcm9tID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCBiZWZvcmUpO1xyXG4gIFx0XHRcdFx0XHRwb3MgKz0gYmVmb3JlLmxlbmd0aDtcclxuICBcdFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0XHRyZW1vdmVSYW5nZSh0b2tlbkxpc3QsIHJlbW92ZUZyb20sIHJlbW92ZUNvdW50KTtcclxuXHJcbiAgXHRcdFx0XHR2YXIgd3JhcHBlZCA9IG5ldyBUb2tlbih0b2tlbiwgaW5zaWRlID8gXy50b2tlbml6ZShtYXRjaCwgaW5zaWRlKSA6IG1hdGNoLCBhbGlhcywgbWF0Y2gsIGdyZWVkeSk7XHJcbiAgXHRcdFx0XHRjdXJyZW50Tm9kZSA9IGFkZEFmdGVyKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgd3JhcHBlZCk7XHJcblxyXG4gIFx0XHRcdFx0aWYgKGFmdGVyKSB7XHJcbiAgXHRcdFx0XHRcdGFkZEFmdGVyKHRva2VuTGlzdCwgY3VycmVudE5vZGUsIGFmdGVyKTtcclxuICBcdFx0XHRcdH1cclxuXHJcblxyXG4gIFx0XHRcdFx0aWYgKHJlbW92ZUNvdW50ID4gMSlcclxuICBcdFx0XHRcdFx0bWF0Y2hHcmFtbWFyKHRleHQsIHRva2VuTGlzdCwgZ3JhbW1hciwgY3VycmVudE5vZGUucHJldiwgcG9zLCB0cnVlLCB0b2tlbiArICcsJyArIGopO1xyXG5cclxuICBcdFx0XHRcdGlmIChvbmVzaG90KVxyXG4gIFx0XHRcdFx0XHRicmVhaztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlZGVmIExpbmtlZExpc3ROb2RlXHJcbiAgICogQHByb3BlcnR5IHtUfSB2YWx1ZVxyXG4gICAqIEBwcm9wZXJ0eSB7TGlua2VkTGlzdE5vZGU8VD4gfCBudWxsfSBwcmV2IFRoZSBwcmV2aW91cyBub2RlLlxyXG4gICAqIEBwcm9wZXJ0eSB7TGlua2VkTGlzdE5vZGU8VD4gfCBudWxsfSBuZXh0IFRoZSBuZXh0IG5vZGUuXHJcbiAgICogQHRlbXBsYXRlIFRcclxuICAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogQHRlbXBsYXRlIFRcclxuICAgKi9cclxuICBmdW5jdGlvbiBMaW5rZWRMaXN0KCkge1xyXG4gIFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cclxuICBcdHZhciBoZWFkID0geyB2YWx1ZTogbnVsbCwgcHJldjogbnVsbCwgbmV4dDogbnVsbCB9O1xyXG4gIFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cclxuICBcdHZhciB0YWlsID0geyB2YWx1ZTogbnVsbCwgcHJldjogaGVhZCwgbmV4dDogbnVsbCB9O1xyXG4gIFx0aGVhZC5uZXh0ID0gdGFpbDtcclxuXHJcbiAgXHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xyXG4gIFx0dGhpcy5oZWFkID0gaGVhZDtcclxuICBcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXHJcbiAgXHR0aGlzLnRhaWwgPSB0YWlsO1xyXG4gIFx0dGhpcy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5ldyBub2RlIHdpdGggdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBsaXN0LlxyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdE5vZGU8VD59IG5vZGVcclxuICAgKiBAcGFyYW0ge1R9IHZhbHVlXHJcbiAgICogQHJldHVybnMge0xpbmtlZExpc3ROb2RlPFQ+fSBUaGUgYWRkZWQgbm9kZS5cclxuICAgKiBAdGVtcGxhdGUgVFxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFkZEFmdGVyKGxpc3QsIG5vZGUsIHZhbHVlKSB7XHJcbiAgXHQvLyBhc3N1bWVzIHRoYXQgbm9kZSAhPSBsaXN0LnRhaWwgJiYgdmFsdWVzLmxlbmd0aCA+PSAwXHJcbiAgXHR2YXIgbmV4dCA9IG5vZGUubmV4dDtcclxuXHJcbiAgXHR2YXIgbmV3Tm9kZSA9IHsgdmFsdWU6IHZhbHVlLCBwcmV2OiBub2RlLCBuZXh0OiBuZXh0IH07XHJcbiAgXHRub2RlLm5leHQgPSBuZXdOb2RlO1xyXG4gIFx0bmV4dC5wcmV2ID0gbmV3Tm9kZTtcclxuICBcdGxpc3QubGVuZ3RoKys7XHJcblxyXG4gIFx0cmV0dXJuIG5ld05vZGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYGNvdW50YCBub2RlcyBhZnRlciB0aGUgZ2l2ZW4gbm9kZS4gVGhlIGdpdmVuIG5vZGUgd2lsbCBub3QgYmUgcmVtb3ZlZC5cclxuICAgKiBAcGFyYW0ge0xpbmtlZExpc3Q8VD59IGxpc3RcclxuICAgKiBAcGFyYW0ge0xpbmtlZExpc3ROb2RlPFQ+fSBub2RlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XHJcbiAgICogQHRlbXBsYXRlIFRcclxuICAgKi9cclxuICBmdW5jdGlvbiByZW1vdmVSYW5nZShsaXN0LCBub2RlLCBjb3VudCkge1xyXG4gIFx0dmFyIG5leHQgPSBub2RlLm5leHQ7XHJcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50ICYmIG5leHQgIT09IGxpc3QudGFpbDsgaSsrKSB7XHJcbiAgXHRcdG5leHQgPSBuZXh0Lm5leHQ7XHJcbiAgXHR9XHJcbiAgXHRub2RlLm5leHQgPSBuZXh0O1xyXG4gIFx0bmV4dC5wcmV2ID0gbm9kZTtcclxuICBcdGxpc3QubGVuZ3RoIC09IGk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxyXG4gICAqIEByZXR1cm5zIHtUW119XHJcbiAgICogQHRlbXBsYXRlIFRcclxuICAgKi9cclxuICBmdW5jdGlvbiB0b0FycmF5KGxpc3QpIHtcclxuICBcdHZhciBhcnJheSA9IFtdO1xyXG4gIFx0dmFyIG5vZGUgPSBsaXN0LmhlYWQubmV4dDtcclxuICBcdHdoaWxlIChub2RlICE9PSBsaXN0LnRhaWwpIHtcclxuICBcdFx0YXJyYXkucHVzaChub2RlLnZhbHVlKTtcclxuICBcdFx0bm9kZSA9IG5vZGUubmV4dDtcclxuICBcdH1cclxuICBcdHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG5cclxuICBpZiAoIV9zZWxmLmRvY3VtZW50KSB7XHJcbiAgXHRpZiAoIV9zZWxmLmFkZEV2ZW50TGlzdGVuZXIpIHtcclxuICBcdFx0Ly8gaW4gTm9kZS5qc1xyXG4gIFx0XHRyZXR1cm4gXztcclxuICBcdH1cclxuXHJcbiAgXHRpZiAoIV8uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XHJcbiAgXHRcdC8vIEluIHdvcmtlclxyXG4gIFx0XHRfc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2dCkge1xyXG4gIFx0XHRcdHZhciBtZXNzYWdlID0gSlNPTi5wYXJzZShldnQuZGF0YSksXHJcbiAgXHRcdFx0XHRsYW5nID0gbWVzc2FnZS5sYW5ndWFnZSxcclxuICBcdFx0XHRcdGNvZGUgPSBtZXNzYWdlLmNvZGUsXHJcbiAgXHRcdFx0XHRpbW1lZGlhdGVDbG9zZSA9IG1lc3NhZ2UuaW1tZWRpYXRlQ2xvc2U7XHJcblxyXG4gIFx0XHRcdF9zZWxmLnBvc3RNZXNzYWdlKF8uaGlnaGxpZ2h0KGNvZGUsIF8ubGFuZ3VhZ2VzW2xhbmddLCBsYW5nKSk7XHJcbiAgXHRcdFx0aWYgKGltbWVkaWF0ZUNsb3NlKSB7XHJcbiAgXHRcdFx0XHRfc2VsZi5jbG9zZSgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSwgZmFsc2UpO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBfO1xyXG4gIH1cclxuXHJcbiAgLy9HZXQgY3VycmVudCBzY3JpcHQgYW5kIGhpZ2hsaWdodFxyXG4gIHZhciBzY3JpcHQgPSBfLnV0aWwuY3VycmVudFNjcmlwdCgpO1xyXG5cclxuICBpZiAoc2NyaXB0KSB7XHJcbiAgXHRfLmZpbGVuYW1lID0gc2NyaXB0LnNyYztcclxuXHJcbiAgXHRpZiAoc2NyaXB0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1tYW51YWwnKSkge1xyXG4gIFx0XHRfLm1hbnVhbCA9IHRydWU7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2soKSB7XHJcbiAgXHRpZiAoIV8ubWFudWFsKSB7XHJcbiAgXHRcdF8uaGlnaGxpZ2h0QWxsKCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBpZiAoIV8ubWFudWFsKSB7XHJcbiAgXHQvLyBJZiB0aGUgZG9jdW1lbnQgc3RhdGUgaXMgXCJsb2FkaW5nXCIsIHRoZW4gd2UnbGwgdXNlIERPTUNvbnRlbnRMb2FkZWQuXHJcbiAgXHQvLyBJZiB0aGUgZG9jdW1lbnQgc3RhdGUgaXMgXCJpbnRlcmFjdGl2ZVwiIGFuZCB0aGUgcHJpc20uanMgc2NyaXB0IGlzIGRlZmVycmVkLCB0aGVuIHdlJ2xsIGFsc28gdXNlIHRoZVxyXG4gIFx0Ly8gRE9NQ29udGVudExvYWRlZCBldmVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgcGx1Z2lucyBvciBsYW5ndWFnZXMgd2hpY2ggaGF2ZSBhbHNvIGJlZW4gZGVmZXJyZWQgYW5kIHRoZXlcclxuICBcdC8vIG1pZ2h0IHRha2UgbG9uZ2VyIG9uZSBhbmltYXRpb24gZnJhbWUgdG8gZXhlY3V0ZSB3aGljaCBjYW4gY3JlYXRlIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgb25seSBzb21lIHBsdWdpbnMgaGF2ZVxyXG4gIFx0Ly8gYmVlbiBsb2FkZWQgd2hlbiBQcmlzbS5oaWdobGlnaHRBbGwoKSBpcyBleGVjdXRlZCwgZGVwZW5kaW5nIG9uIGhvdyBmYXN0IHJlc291cmNlcyBhcmUgbG9hZGVkLlxyXG4gIFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yMTAyXHJcbiAgXHR2YXIgcmVhZHlTdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XHJcbiAgXHRpZiAocmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IHJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScgJiYgc2NyaXB0ICYmIHNjcmlwdC5kZWZlcikge1xyXG4gIFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XHJcbiAgXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2spO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjaywgMTYpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gXztcclxuXHJcbiAgfSkoX3NlbGYpO1xyXG5cclxuICBpZiAoIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgXHRtb2R1bGUuZXhwb3J0cyA9IFByaXNtO1xyXG4gIH1cclxuXHJcbiAgLy8gaGFjayBmb3IgY29tcG9uZW50cyB0byB3b3JrIGNvcnJlY3RseSBpbiBub2RlLmpzXHJcbiAgaWYgKHR5cGVvZiBjb21tb25qc0dsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBcdGNvbW1vbmpzR2xvYmFsLlByaXNtID0gUHJpc207XHJcbiAgfVxyXG5cclxuXHJcbiAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgQmVnaW4gcHJpc20tbWFya3VwLmpzXHJcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMubWFya3VwID0ge1xyXG4gIFx0J2NvbW1lbnQnOiAvPCEtLVtcXHNcXFNdKj8tLT4vLFxyXG4gIFx0J3Byb2xvZyc6IC88XFw/W1xcc1xcU10rP1xcPz4vLFxyXG4gIFx0J2RvY3R5cGUnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC88IURPQ1RZUEUoPzpbXj5cIidbXFxdXXxcIlteXCJdKlwifCdbXiddKicpKyg/OlxcWyg/Oig/ITwhLS0pW15cIidcXF1dfFwiW15cIl0qXCJ8J1teJ10qJ3w8IS0tW1xcc1xcU10qPy0tPikqXFxdXFxzKik/Pi9pLFxyXG4gIFx0XHRncmVlZHk6IHRydWVcclxuICBcdH0sXHJcbiAgXHQnY2RhdGEnOiAvPCFcXFtDREFUQVxcW1tcXHNcXFNdKj9dXT4vaSxcclxuICBcdCd0YWcnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC88XFwvPyg/IVxcZClbXlxccz5cXC89JDwlXSsoPzpcXHMoPzpcXHMqW15cXHM+XFwvPV0rKD86XFxzKj1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiPj1dKyg/PVtcXHM+XSkpfCg/PVtcXHMvPl0pKSkrKT9cXHMqXFwvPz4vaSxcclxuICBcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHQndGFnJzoge1xyXG4gIFx0XHRcdFx0cGF0dGVybjogL148XFwvP1teXFxzPlxcL10rL2ksXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148XFwvPy8sXHJcbiAgXHRcdFx0XHRcdCduYW1lc3BhY2UnOiAvXlteXFxzPlxcLzpdKzovXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQnYXR0ci12YWx1ZSc6IHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC89XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSspL2ksXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogW1xyXG4gIFx0XHRcdFx0XHRcdC9ePS8sXHJcbiAgXHRcdFx0XHRcdFx0e1xyXG4gIFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbXCInXXxbXCInXSQvLFxyXG4gIFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0XVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLz8+LyxcclxuICBcdFx0XHQnYXR0ci1uYW1lJzoge1xyXG4gIFx0XHRcdFx0cGF0dGVybjogL1teXFxzPlxcL10rLyxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHQnbmFtZXNwYWNlJzogL15bXlxccz5cXC86XSs6L1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdH1cclxuICBcdH0sXHJcbiAgXHQnZW50aXR5JzogLyYjP1tcXGRhLXpdezEsOH07L2lcclxuICB9O1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMubWFya3VwWyd0YWcnXS5pbnNpZGVbJ2F0dHItdmFsdWUnXS5pbnNpZGVbJ2VudGl0eSddID1cclxuICBcdFByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ2VudGl0eSddO1xyXG5cclxuICAvLyBQbHVnaW4gdG8gbWFrZSBlbnRpdHkgdGl0bGUgc2hvdyB0aGUgcmVhbCBlbnRpdHksIGlkZWEgYnkgUm9tYW4gS29tYXJvdlxyXG4gIFByaXNtLmhvb2tzLmFkZCgnd3JhcCcsIGZ1bmN0aW9uKGVudikge1xyXG5cclxuICBcdGlmIChlbnYudHlwZSA9PT0gJ2VudGl0eScpIHtcclxuICBcdFx0ZW52LmF0dHJpYnV0ZXNbJ3RpdGxlJ10gPSBlbnYuY29udGVudC5yZXBsYWNlKC8mYW1wOy8sICcmJyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZywgJ2FkZElubGluZWQnLCB7XHJcbiAgXHQvKipcclxuICBcdCAqIEFkZHMgYW4gaW5saW5lZCBsYW5ndWFnZSB0byBtYXJrdXAuXHJcbiAgXHQgKlxyXG4gIFx0ICogQW4gZXhhbXBsZSBvZiBhbiBpbmxpbmVkIGxhbmd1YWdlIGlzIENTUyB3aXRoIGA8c3R5bGU+YCB0YWdzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcgdGhhdCBjb250YWlucyB0aGUgaW5saW5lZCBsYW5ndWFnZS4gVGhpcyBuYW1lIHdpbGwgYmUgdHJlYXRlZCBhc1xyXG4gIFx0ICogY2FzZSBpbnNlbnNpdGl2ZS5cclxuICBcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIFRoZSBsYW5ndWFnZSBrZXkuXHJcbiAgXHQgKiBAZXhhbXBsZVxyXG4gIFx0ICogYWRkSW5saW5lZCgnc3R5bGUnLCAnY3NzJyk7XHJcbiAgXHQgKi9cclxuICBcdHZhbHVlOiBmdW5jdGlvbiBhZGRJbmxpbmVkKHRhZ05hbWUsIGxhbmcpIHtcclxuICBcdFx0dmFyIGluY2x1ZGVkQ2RhdGFJbnNpZGUgPSB7fTtcclxuICBcdFx0aW5jbHVkZWRDZGF0YUluc2lkZVsnbGFuZ3VhZ2UtJyArIGxhbmddID0ge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXjwhXFxbQ0RBVEFcXFspW1xcc1xcU10rPyg/PVxcXVxcXT4kKS9pLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cclxuICBcdFx0fTtcclxuICBcdFx0aW5jbHVkZWRDZGF0YUluc2lkZVsnY2RhdGEnXSA9IC9ePCFcXFtDREFUQVxcW3xcXF1cXF0+JC9pO1xyXG5cclxuICBcdFx0dmFyIGluc2lkZSA9IHtcclxuICBcdFx0XHQnaW5jbHVkZWQtY2RhdGEnOiB7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvPCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+L2ksXHJcbiAgXHRcdFx0XHRpbnNpZGU6IGluY2x1ZGVkQ2RhdGFJbnNpZGVcclxuICBcdFx0XHR9XHJcbiAgXHRcdH07XHJcbiAgXHRcdGluc2lkZVsnbGFuZ3VhZ2UtJyArIGxhbmddID0ge1xyXG4gIFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxyXG4gIFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzW2xhbmddXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHR2YXIgZGVmID0ge307XHJcbiAgXHRcdGRlZlt0YWdOYW1lXSA9IHtcclxuICBcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyg8X19bXFxzXFxTXSo/PikoPzo8IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT5cXHMqfFtcXHNcXFNdKSo/KD89PFxcL19fPikvLnNvdXJjZS5yZXBsYWNlKC9fXy9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0YWdOYW1lOyB9KSwgJ2knKSxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IGluc2lkZVxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya3VwJywgJ2NkYXRhJywgZGVmKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLnhtbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcclxuICBQcmlzbS5sYW5ndWFnZXMuaHRtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XHJcbiAgUHJpc20ubGFuZ3VhZ2VzLm1hdGhtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XHJcbiAgUHJpc20ubGFuZ3VhZ2VzLnN2ZyA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XHJcblxyXG5cclxuICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICBCZWdpbiBwcmlzbS1jc3MuanNcclxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gIChmdW5jdGlvbiAoUHJpc20pIHtcclxuXHJcbiAgXHR2YXIgc3RyaW5nID0gLyhcInwnKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvO1xyXG5cclxuICBcdFByaXNtLmxhbmd1YWdlcy5jc3MgPSB7XHJcbiAgXHRcdCdjb21tZW50JzogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxyXG4gIFx0XHQnYXRydWxlJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC9AW1xcdy1dK1tcXHNcXFNdKj8oPzo7fCg/PVxccypcXHspKS8sXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQncnVsZSc6IC9eQFtcXHctXSsvLFxyXG4gIFx0XHRcdFx0J3NlbGVjdG9yLWZ1bmN0aW9uLWFyZ3VtZW50Jzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcYnNlbGVjdG9yXFxzKlxcKCg/IVxccypcXCkpXFxzKikoPzpbXigpXXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkrPyg/PVxccypcXCkpLyxcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdFx0YWxpYXM6ICdzZWxlY3RvcidcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQndXJsJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgndXJsXFxcXCgoPzonICsgc3RyaW5nLnNvdXJjZSArICd8W15cXG5cXHIoKV0qKVxcXFwpJywgJ2knKSxcclxuICBcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQnZnVuY3Rpb24nOiAvXnVybC9pLFxyXG4gIFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCh8XFwpJC9cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdzZWxlY3Rvcic6IFJlZ0V4cCgnW157fVxcXFxzXSg/Oltee307XCJcXCddfCcgKyBzdHJpbmcuc291cmNlICsgJykqPyg/PVxcXFxzKlxcXFx7KScpLFxyXG4gIFx0XHQnc3RyaW5nJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IHN0cmluZyxcclxuICBcdFx0XHRncmVlZHk6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0J3Byb3BlcnR5JzogL1stX2EtelxceEEwLVxcdUZGRkZdWy1cXHdcXHhBMC1cXHVGRkZGXSooPz1cXHMqOikvaSxcclxuICBcdFx0J2ltcG9ydGFudCc6IC8haW1wb3J0YW50XFxiL2ksXHJcbiAgXHRcdCdmdW5jdGlvbic6IC9bLWEtejAtOV0rKD89XFwoKS9pLFxyXG4gIFx0XHQncHVuY3R1YXRpb24nOiAvWygpe307OixdL1xyXG4gIFx0fTtcclxuXHJcbiAgXHRQcmlzbS5sYW5ndWFnZXMuY3NzWydhdHJ1bGUnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5jc3M7XHJcblxyXG4gIFx0dmFyIG1hcmt1cCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XHJcbiAgXHRpZiAobWFya3VwKSB7XHJcbiAgXHRcdG1hcmt1cC50YWcuYWRkSW5saW5lZCgnc3R5bGUnLCAnY3NzJyk7XHJcblxyXG4gIFx0XHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpbnNpZGUnLCAnYXR0ci12YWx1ZScsIHtcclxuICBcdFx0XHQnc3R5bGUtYXR0cic6IHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC9cXHMqc3R5bGU9KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDEvaSxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHQnYXR0ci1uYW1lJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFxzKnN0eWxlL2ksXHJcbiAgXHRcdFx0XHRcdFx0aW5zaWRlOiBtYXJrdXAudGFnLmluc2lkZVxyXG4gIFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxccyo9XFxzKlsnXCJdfFsnXCJdXFxzKiQvLFxyXG4gIFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcclxuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvLisvaSxcclxuICBcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc3NcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtY3NzJ1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSwgbWFya3VwLnRhZyk7XHJcbiAgXHR9XHJcblxyXG4gIH0oUHJpc20pKTtcclxuXHJcblxyXG4gIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgIEJlZ2luIHByaXNtLWNsaWtlLmpzXHJcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMuY2xpa2UgPSB7XHJcbiAgXHQnY29tbWVudCc6IFtcclxuICBcdFx0e1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0e1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRncmVlZHk6IHRydWVcclxuICBcdFx0fVxyXG4gIFx0XSxcclxuICBcdCdzdHJpbmcnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0fSxcclxuICBcdCdjbGFzcy1uYW1lJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGludGVyZmFjZXxleHRlbmRzfGltcGxlbWVudHN8dHJhaXR8aW5zdGFuY2VvZnxuZXcpXFxzK3xcXGJjYXRjaFxccytcXCgpW1xcdy5cXFxcXSsvaSxcclxuICBcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0J3B1bmN0dWF0aW9uJzogL1suXFxcXF0vXHJcbiAgXHRcdH1cclxuICBcdH0sXHJcbiAgXHQna2V5d29yZCc6IC9cXGIoPzppZnxlbHNlfHdoaWxlfGRvfGZvcnxyZXR1cm58aW58aW5zdGFuY2VvZnxmdW5jdGlvbnxuZXd8dHJ5fHRocm93fGNhdGNofGZpbmFsbHl8bnVsbHxicmVha3xjb250aW51ZSlcXGIvLFxyXG4gIFx0J2Jvb2xlYW4nOiAvXFxiKD86dHJ1ZXxmYWxzZSlcXGIvLFxyXG4gIFx0J2Z1bmN0aW9uJzogL1xcdysoPz1cXCgpLyxcclxuICBcdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkK1xcLj9cXGQqfFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/L2ksXHJcbiAgXHQnb3BlcmF0b3InOiAvWzw+XT0/fFshPV09Pz0/fC0tP3xcXCtcXCs/fCYmP3xcXHxcXHw/fFs/Ki9+XiVdLyxcclxuICBcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS9cclxuICB9O1xyXG5cclxuXHJcbiAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgQmVnaW4gcHJpc20tamF2YXNjcmlwdC5qc1xyXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcclxuICBcdCdjbGFzcy1uYW1lJzogW1xyXG4gIFx0XHRQcmlzbS5sYW5ndWFnZXMuY2xpa2VbJ2NsYXNzLW5hbWUnXSxcclxuICBcdFx0e1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXHdcXHhBMC1cXHVGRkZGXSlbXyRBLVpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKD89XFwuKD86cHJvdG90eXBlfGNvbnN0cnVjdG9yKSkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fVxyXG4gIFx0XSxcclxuICBcdCdrZXl3b3JkJzogW1xyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLygoPzpefH0pXFxzKikoPzpjYXRjaHxmaW5hbGx5KVxcYi8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteLl18XFwuXFwuXFwuXFxzKilcXGIoPzphc3xhc3luYyg/PVxccyooPzpmdW5jdGlvblxcYnxcXCh8WyRcXHdcXHhBMC1cXHVGRkZGXXwkKSl8YXdhaXR8YnJlYWt8Y2FzZXxjbGFzc3xjb25zdHxjb250aW51ZXxkZWJ1Z2dlcnxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHVuZGVmaW5lZHx2YXJ8dm9pZHx3aGlsZXx3aXRofHlpZWxkKVxcYi8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XSxcclxuICBcdCdudW1iZXInOiAvXFxiKD86KD86MFt4WF0oPzpbXFxkQS1GYS1mXSg/Ol9bXFxkQS1GYS1mXSk/KSt8MFtiQl0oPzpbMDFdKD86X1swMV0pPykrfDBbb09dKD86WzAtN10oPzpfWzAtN10pPykrKW4/fCg/OlxcZCg/Ol9cXGQpPykrbnxOYU58SW5maW5pdHkpXFxifCg/OlxcYig/OlxcZCg/Ol9cXGQpPykrXFwuPyg/OlxcZCg/Ol9cXGQpPykqfFxcQlxcLig/OlxcZCg/Ol9cXGQpPykrKSg/OltFZV1bKy1dPyg/OlxcZCg/Ol9cXGQpPykrKT8vLFxyXG4gIFx0Ly8gQWxsb3cgZm9yIGFsbCBub24tQVNDSUkgY2hhcmFjdGVycyAoU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIwMDg0NDQpXHJcbiAgXHQnZnVuY3Rpb24nOiAvIz9bXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKD89XFxzKig/OlxcLlxccyooPzphcHBseXxiaW5kfGNhbGwpXFxzKik/XFwoKS8sXHJcbiAgXHQnb3BlcmF0b3InOiAvLS18XFwrXFwrfFxcKlxcKj0/fD0+fCYmfFxcfFxcfHxbIT1dPT18PDw9P3w+Pj4/PT98Wy0rKi8lJnxeIT08Pl09P3xcXC57M318XFw/Wy4/XT98W346XS9cclxuICB9KTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ2NsYXNzLW5hbWUnXVswXS5wYXR0ZXJuID0gLyhcXGIoPzpjbGFzc3xpbnRlcmZhY2V8ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8bmV3KVxccyspW1xcdy5cXFxcXSsvO1xyXG5cclxuICBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2tleXdvcmQnLCB7XHJcbiAgXHQncmVnZXgnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oKD86XnxbXiRcXHdcXHhBMC1cXHVGRkZGLlwiJ1xcXSlcXHNdKVxccyopXFwvKD86XFxbKD86W15cXF1cXFxcXFxyXFxuXXxcXFxcLikqXXxcXFxcLnxbXi9cXFxcXFxbXFxyXFxuXSkrXFwvW2dpbXl1c117MCw2fSg/PSg/Olxcc3xcXC9cXCpbXFxzXFxTXSo/XFwqXFwvKSooPzokfFtcXHJcXG4sLjs6fSlcXF1dfFxcL1xcLykpLyxcclxuICBcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0Z3JlZWR5OiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0Ly8gVGhpcyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBrZXl3b3JkIGJlY2F1c2Ugd2UgdXNlIFwiZnVuY3Rpb25cIiBpbnNpZGUgdGhlIGxvb2stZm9yd2FyZFxyXG4gIFx0J2Z1bmN0aW9uLXZhcmlhYmxlJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvIz9bXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKD89XFxzKls9Ol1cXHMqKD86YXN5bmNcXHMqKT8oPzpcXGJmdW5jdGlvblxcYnwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKVxccyo9PikpLyxcclxuICBcdFx0YWxpYXM6ICdmdW5jdGlvbidcclxuICBcdH0sXHJcbiAgXHQncGFyYW1ldGVyJzogW1xyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhmdW5jdGlvbig/OlxccytbXyRBLVphLXpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKT9cXHMqXFwoXFxzKikoPyFcXHMpKD86W14oKV18XFwoW14oKV0qXFwpKSs/KD89XFxzKlxcKSkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxyXG4gIFx0XHR9LFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogL1tfJGEtelxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSooPz1cXHMqPT4pL2ksXHJcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxyXG4gIFx0XHR9LFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhcXChcXHMqKSg/IVxccykoPzpbXigpXXxcXChbXigpXSpcXCkpKz8oPz1cXHMqXFwpXFxzKj0+KS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XHJcbiAgXHRcdH0sXHJcbiAgXHRcdHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKCg/OlxcYnxcXHN8XikoPyEoPzphc3xhc3luY3xhd2FpdHxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlYnVnZ2VyfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZW51bXxleHBvcnR8ZXh0ZW5kc3xmaW5hbGx5fGZvcnxmcm9tfGZ1bmN0aW9ufGdldHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbnN0YW5jZW9mfGludGVyZmFjZXxsZXR8bmV3fG51bGx8b2Z8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmV0dXJufHNldHxzdGF0aWN8c3VwZXJ8c3dpdGNofHRoaXN8dGhyb3d8dHJ5fHR5cGVvZnx1bmRlZmluZWR8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZCkoPyFbJFxcd1xceEEwLVxcdUZGRkZdKSkoPzpbXyRBLVphLXpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qXFxzKilcXChcXHMqKSg/IVxccykoPzpbXigpXXxcXChbXigpXSpcXCkpKz8oPz1cXHMqXFwpXFxzKlxceykvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxyXG4gIFx0XHR9XHJcbiAgXHRdLFxyXG4gIFx0J2NvbnN0YW50JzogL1xcYltBLVpdKD86W0EtWl9dfFxcZHg/KSpcXGIvXHJcbiAgfSk7XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnc3RyaW5nJywge1xyXG4gIFx0J3RlbXBsYXRlLXN0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118XFwkeyg/Oltee31dfHsoPzpbXnt9XXx7W159XSp9KSp9KSt9fCg/IVxcJHspW15cXFxcYF0pKmAvLFxyXG4gIFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdGluc2lkZToge1xyXG4gIFx0XHRcdCd0ZW1wbGF0ZS1wdW5jdHVhdGlvbic6IHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC9eYHxgJC8sXHJcbiAgXHRcdFx0XHRhbGlhczogJ3N0cmluZydcclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xyXG4gIFx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJHsoPzpbXnt9XXx7KD86W157fV18e1tefV0qfSkqfSkrfS8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwke3x9JC8sXHJcbiAgXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcclxuICBcdFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIGlmIChQcmlzbS5sYW5ndWFnZXMubWFya3VwKSB7XHJcbiAgXHRQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5hZGRJbmxpbmVkKCdzY3JpcHQnLCAnamF2YXNjcmlwdCcpO1xyXG4gIH1cclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLmpzID0gUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQ7XHJcblxyXG5cclxuICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICBCZWdpbiBwcmlzbS1maWxlLWhpZ2hsaWdodC5qc1xyXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgKGZ1bmN0aW9uICgpIHtcclxuICBcdGlmICh0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgfHwgIXNlbGYuUHJpc20gfHwgIXNlbGYuZG9jdW1lbnQgfHwgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpIHtcclxuICBcdFx0cmV0dXJuO1xyXG4gIFx0fVxyXG5cclxuICBcdC8qKlxyXG4gIFx0ICogQHBhcmFtIHtFbGVtZW50fSBbY29udGFpbmVyPWRvY3VtZW50XVxyXG4gIFx0ICovXHJcbiAgXHRzZWxmLlByaXNtLmZpbGVIaWdobGlnaHQgPSBmdW5jdGlvbihjb250YWluZXIpIHtcclxuICBcdFx0Y29udGFpbmVyID0gY29udGFpbmVyIHx8IGRvY3VtZW50O1xyXG5cclxuICBcdFx0dmFyIEV4dGVuc2lvbnMgPSB7XHJcbiAgXHRcdFx0J2pzJzogJ2phdmFzY3JpcHQnLFxyXG4gIFx0XHRcdCdweSc6ICdweXRob24nLFxyXG4gIFx0XHRcdCdyYic6ICdydWJ5JyxcclxuICBcdFx0XHQncHMxJzogJ3Bvd2Vyc2hlbGwnLFxyXG4gIFx0XHRcdCdwc20xJzogJ3Bvd2Vyc2hlbGwnLFxyXG4gIFx0XHRcdCdzaCc6ICdiYXNoJyxcclxuICBcdFx0XHQnYmF0JzogJ2JhdGNoJyxcclxuICBcdFx0XHQnaCc6ICdjJyxcclxuICBcdFx0XHQndGV4JzogJ2xhdGV4J1xyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZVtkYXRhLXNyY10nKSkuZm9yRWFjaChmdW5jdGlvbiAocHJlKSB7XHJcbiAgXHRcdFx0Ly8gaWdub3JlIGlmIGFscmVhZHkgbG9hZGVkXHJcbiAgXHRcdFx0aWYgKHByZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc3JjLWxvYWRlZCcpKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm47XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHQvLyBsb2FkIGN1cnJlbnRcclxuICBcdFx0XHR2YXIgc3JjID0gcHJlLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKTtcclxuXHJcbiAgXHRcdFx0dmFyIGxhbmd1YWdlLCBwYXJlbnQgPSBwcmU7XHJcbiAgXHRcdFx0dmFyIGxhbmcgPSAvXFxibGFuZyg/OnVhZ2UpPy0oW1xcdy1dKylcXGIvaTtcclxuICBcdFx0XHR3aGlsZSAocGFyZW50ICYmICFsYW5nLnRlc3QocGFyZW50LmNsYXNzTmFtZSkpIHtcclxuICBcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0aWYgKHBhcmVudCkge1xyXG4gIFx0XHRcdFx0bGFuZ3VhZ2UgPSAocHJlLmNsYXNzTmFtZS5tYXRjaChsYW5nKSB8fCBbLCAnJ10pWzFdO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0aWYgKCFsYW5ndWFnZSkge1xyXG4gIFx0XHRcdFx0dmFyIGV4dGVuc2lvbiA9IChzcmMubWF0Y2goL1xcLihcXHcrKSQvKSB8fCBbLCAnJ10pWzFdO1xyXG4gIFx0XHRcdFx0bGFuZ3VhZ2UgPSBFeHRlbnNpb25zW2V4dGVuc2lvbl0gfHwgZXh0ZW5zaW9uO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dmFyIGNvZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjb2RlJyk7XHJcbiAgXHRcdFx0Y29kZS5jbGFzc05hbWUgPSAnbGFuZ3VhZ2UtJyArIGxhbmd1YWdlO1xyXG5cclxuICBcdFx0XHRwcmUudGV4dENvbnRlbnQgPSAnJztcclxuXHJcbiAgXHRcdFx0Y29kZS50ZXh0Q29udGVudCA9ICdMb2FkaW5n4oCmJztcclxuXHJcbiAgXHRcdFx0cHJlLmFwcGVuZENoaWxkKGNvZGUpO1xyXG5cclxuICBcdFx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gIFx0XHRcdHhoci5vcGVuKCdHRVQnLCBzcmMsIHRydWUpO1xyXG5cclxuICBcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcclxuXHJcbiAgXHRcdFx0XHRcdGlmICh4aHIuc3RhdHVzIDwgNDAwICYmIHhoci5yZXNwb25zZVRleHQpIHtcclxuICBcdFx0XHRcdFx0XHRjb2RlLnRleHRDb250ZW50ID0geGhyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgXHRcdFx0XHRcdFx0UHJpc20uaGlnaGxpZ2h0RWxlbWVudChjb2RlKTtcclxuICBcdFx0XHRcdFx0XHQvLyBtYXJrIGFzIGxvYWRlZFxyXG4gIFx0XHRcdFx0XHRcdHByZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjLWxvYWRlZCcsICcnKTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0XHRlbHNlIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xyXG4gIFx0XHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSAn4pyWIEVycm9yICcgKyB4aHIuc3RhdHVzICsgJyB3aGlsZSBmZXRjaGluZyBmaWxlOiAnICsgeGhyLnN0YXR1c1RleHQ7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0ZWxzZSB7XHJcbiAgXHRcdFx0XHRcdFx0Y29kZS50ZXh0Q29udGVudCA9ICfinJYgRXJyb3I6IEZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgZW1wdHknO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fTtcclxuXHJcbiAgXHRcdFx0eGhyLnNlbmQobnVsbCk7XHJcbiAgXHRcdH0pO1xyXG4gIFx0fTtcclxuXHJcbiAgXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xyXG4gIFx0XHQvLyBleGVjdXRlIGluc2lkZSBoYW5kbGVyLCBmb3IgZHJvcHBpbmcgRXZlbnQgYXMgYXJndW1lbnRcclxuICBcdFx0c2VsZi5QcmlzbS5maWxlSGlnaGxpZ2h0KCk7XHJcbiAgXHR9KTtcclxuXHJcbiAgfSkoKTtcclxuICB9KTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbiA9IHtcclxuICBcdCdjb21tZW50Jzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjLiovLFxyXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0J3N0cmluZy1pbnRlcnBvbGF0aW9uJzoge1xyXG4gIFx0XHRwYXR0ZXJuOiAvKD86ZnxyZnxmcikoPzooXCJcIlwifCcnJylbXFxzXFxTXSs/XFwxfChcInwnKSg/OlxcXFwufCg/IVxcMilbXlxcXFxcXHJcXG5dKSpcXDIpL2ksXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XHJcbiAgXHRcdFx0XHQvLyBcIntcIiA8ZXhwcmVzc2lvbj4gPG9wdGlvbmFsIFwiIXNcIiwgXCIhclwiLCBvciBcIiFhXCI+IDxvcHRpb25hbCBcIjpcIiBmb3JtYXQgc3BlY2lmaWVyPiBcIn1cIlxyXG4gIFx0XHRcdFx0cGF0dGVybjogLygoPzpefFtee10pKD86e3spKil7KD8heykoPzpbXnt9XXx7KD8heykoPzpbXnt9XXx7KD8heykoPzpbXnt9XSkrfSkrfSkrfS8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdCdmb3JtYXQtc3BlYyc6IHtcclxuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKDopW146KCl7fV0rKD89fSQpLyxcclxuICBcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHRcdCdjb252ZXJzaW9uLW9wdGlvbic6IHtcclxuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvIVtzcmFdKD89Wzp9XSQpLyxcclxuICBcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xyXG4gIFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHRyZXN0OiBudWxsXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuICBcdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogLyg/OltydWJdfHJifGJyKT8oXCJcIlwifCcnJylbXFxzXFxTXSs/XFwxL2ksXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0YWxpYXM6ICdzdHJpbmcnXHJcbiAgXHR9LFxyXG4gIFx0J3N0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogLyg/OltydWJdfHJifGJyKT8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxL2ksXHJcbiAgXHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0fSxcclxuICBcdCdmdW5jdGlvbic6IHtcclxuICBcdFx0cGF0dGVybjogLygoPzpefFxccylkZWZbIFxcdF0rKVthLXpBLVpfXVxcdyooPz1cXHMqXFwoKS9nLFxyXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0J2NsYXNzLW5hbWUnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oXFxiY2xhc3NcXHMrKVxcdysvaSxcclxuICBcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0fSxcclxuICBcdCdkZWNvcmF0b3InOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oXlxccyopQFxcdysoPzpcXC5cXHcrKSovaW0sXHJcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdGFsaWFzOiBbJ2Fubm90YXRpb24nLCAncHVuY3R1YXRpb24nXSxcclxuICBcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuICBcdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xhc3NlcnR8YXN5bmN8YXdhaXR8YnJlYWt8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8ZmluYWxseXxmb3J8ZnJvbXxnbG9iYWx8aWZ8aW1wb3J0fGlufGlzfGxhbWJkYXxub25sb2NhbHxub3R8b3J8cGFzc3xwcmludHxyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcclxuICBcdCdidWlsdGluJzogL1xcYig/Ol9faW1wb3J0X198YWJzfGFsbHxhbnl8YXBwbHl8YXNjaWl8YmFzZXN0cmluZ3xiaW58Ym9vbHxidWZmZXJ8Ynl0ZWFycmF5fGJ5dGVzfGNhbGxhYmxlfGNocnxjbGFzc21ldGhvZHxjbXB8Y29lcmNlfGNvbXBpbGV8Y29tcGxleHxkZWxhdHRyfGRpY3R8ZGlyfGRpdm1vZHxlbnVtZXJhdGV8ZXZhbHxleGVjZmlsZXxmaWxlfGZpbHRlcnxmbG9hdHxmb3JtYXR8ZnJvemVuc2V0fGdldGF0dHJ8Z2xvYmFsc3xoYXNhdHRyfGhhc2h8aGVscHxoZXh8aWR8aW5wdXR8aW50fGludGVybnxpc2luc3RhbmNlfGlzc3ViY2xhc3N8aXRlcnxsZW58bGlzdHxsb2NhbHN8bG9uZ3xtYXB8bWF4fG1lbW9yeXZpZXd8bWlufG5leHR8b2JqZWN0fG9jdHxvcGVufG9yZHxwb3d8cHJvcGVydHl8cmFuZ2V8cmF3X2lucHV0fHJlZHVjZXxyZWxvYWR8cmVwcnxyZXZlcnNlZHxyb3VuZHxzZXR8c2V0YXR0cnxzbGljZXxzb3J0ZWR8c3RhdGljbWV0aG9kfHN0cnxzdW18c3VwZXJ8dHVwbGV8dHlwZXx1bmljaHJ8dW5pY29kZXx2YXJzfHhyYW5nZXx6aXApXFxiLyxcclxuICBcdCdib29sZWFuJzogL1xcYig/OlRydWV8RmFsc2V8Tm9uZSlcXGIvLFxyXG4gIFx0J251bWJlcic6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib10pPyg/Oig/OlxcZHwweFtcXGRhLWZdKVtcXGRhLWZdKlxcLj9cXGQqfFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/aj9cXGIvaSxcclxuICBcdCdvcGVyYXRvcic6IC9bLSslPV09P3whPXxcXCpcXCo/PT98XFwvXFwvPz0/fDxbPD0+XT98Pls9Pl0/fFsmfF5+XS8sXHJcbiAgXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXHJcbiAgfTtcclxuXHJcbiAgUHJpc20ubGFuZ3VhZ2VzLnB5dGhvblsnc3RyaW5nLWludGVycG9sYXRpb24nXS5pbnNpZGVbJ2ludGVycG9sYXRpb24nXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5weXRob247XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5weSA9IFByaXNtLmxhbmd1YWdlcy5weXRob247XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5jbGlrZSA9IHtcclxuICBcdCdjb21tZW50JzogW1xyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHR7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0XHR9XHJcbiAgXHRdLFxyXG4gIFx0J3N0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcclxuICBcdFx0Z3JlZWR5OiB0cnVlXHJcbiAgXHR9LFxyXG4gIFx0J2NsYXNzLW5hbWUnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8aW50ZXJmYWNlfGV4dGVuZHN8aW1wbGVtZW50c3x0cmFpdHxpbnN0YW5jZW9mfG5ldylcXHMrfFxcYmNhdGNoXFxzK1xcKClbXFx3LlxcXFxdKy9pLFxyXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHQncHVuY3R1YXRpb24nOiAvWy5cXFxcXS9cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuICBcdCdrZXl3b3JkJzogL1xcYig/OmlmfGVsc2V8d2hpbGV8ZG98Zm9yfHJldHVybnxpbnxpbnN0YW5jZW9mfGZ1bmN0aW9ufG5ld3x0cnl8dGhyb3d8Y2F0Y2h8ZmluYWxseXxudWxsfGJyZWFrfGNvbnRpbnVlKVxcYi8sXHJcbiAgXHQnYm9vbGVhbic6IC9cXGIoPzp0cnVlfGZhbHNlKVxcYi8sXHJcbiAgXHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxcKCkvLFxyXG4gIFx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrXFwuP1xcZCp8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcclxuICBcdCdvcGVyYXRvcic6IC9bPD5dPT98WyE9XT0/PT98LS0/fFxcK1xcKz98JiY/fFxcfFxcfD98Wz8qL35eJV0vLFxyXG4gIFx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xyXG4gIH07XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5sdWEgPSB7XHJcbiAgXHQnY29tbWVudCc6IC9eIyEuK3wtLSg/OlxcWyg9KilcXFtbXFxzXFxTXSo/XFxdXFwxXFxdfC4qKS9tLFxyXG4gIFx0Ly8gXFx6IG1heSBiZSB1c2VkIHRvIHNraXAgdGhlIGZvbGxvd2luZyBzcGFjZVxyXG4gIFx0J3N0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogLyhbXCInXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxceig/OlxcclxcbnxcXHMpfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcXDF8XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDJcXF0vLFxyXG4gIFx0XHRncmVlZHk6IHRydWVcclxuICBcdH0sXHJcbiAgXHQnbnVtYmVyJzogL1xcYjB4W2EtZlxcZF0rXFwuP1thLWZcXGRdKig/OnBbKy1dP1xcZCspP1xcYnxcXGJcXGQrKD86XFwuXFxCfFxcLj9cXGQqKD86ZVsrLV0/XFxkKyk/XFxiKXxcXEJcXC5cXGQrKD86ZVsrLV0/XFxkKyk/XFxiL2ksXHJcbiAgXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YnJlYWt8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGZhbHNlfGZvcnxmdW5jdGlvbnxnb3RvfGlmfGlufGxvY2FsfG5pbHxub3R8b3J8cmVwZWF0fHJldHVybnx0aGVufHRydWV8dW50aWx8d2hpbGUpXFxiLyxcclxuICBcdCdmdW5jdGlvbic6IC8oPyFcXGQpXFx3Kyg/PVxccyooPzpbKHtdKSkvLFxyXG4gIFx0J29wZXJhdG9yJzogW1xyXG4gIFx0XHQvWy0rKiVeJnwjXXxcXC9cXC8/fDxbPD1dP3w+Wz49XT98Wz1+XT0/LyxcclxuICBcdFx0e1xyXG4gIFx0XHRcdC8vIE1hdGNoIFwiLi5cIiBidXQgZG9uJ3QgYnJlYWsgXCIuLi5cIlxyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKVxcLlxcLig/IVxcLikvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fVxyXG4gIFx0XSxcclxuICBcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fSw7XXxcXC4rfDorL1xyXG4gIH07XHJcblxyXG4gIChmdW5jdGlvbihQcmlzbSkge1xyXG4gIFx0Ly8gJCBzZXQgfCBncmVwICdeW0EtWl1bXls6c3BhY2U6XV0qPScgfCBjdXQgLWQ9IC1mMSB8IHRyICdcXG4nICd8J1xyXG4gIFx0Ly8gKyBMQ19BTEwsIFJBTkRPTSwgUkVQTFksIFNFQ09ORFMuXHJcbiAgXHQvLyArIG1ha2Ugc3VyZSBQUzEuLjQgYXJlIGhlcmUgYXMgdGhleSBhcmUgbm90IGFsd2F5cyBzZXQsXHJcbiAgXHQvLyAtIHNvbWUgdXNlbGVzcyB0aGluZ3MuXHJcbiAgXHR2YXIgZW52VmFycyA9ICdcXFxcYig/OkJBU0h8QkFTSE9QVFN8QkFTSF9BTElBU0VTfEJBU0hfQVJHQ3xCQVNIX0FSR1Z8QkFTSF9DTURTfEJBU0hfQ09NUExFVElPTl9DT01QQVRfRElSfEJBU0hfTElORU5PfEJBU0hfUkVNQVRDSHxCQVNIX1NPVVJDRXxCQVNIX1ZFUlNJTkZPfEJBU0hfVkVSU0lPTnxDT0xPUlRFUk18Q09MVU1OU3xDT01QX1dPUkRCUkVBS1N8REJVU19TRVNTSU9OX0JVU19BRERSRVNTfERFRkFVTFRTX1BBVEh8REVTS1RPUF9TRVNTSU9OfERJUlNUQUNLfERJU1BMQVl8RVVJRHxHRE1TRVNTSU9OfEdETV9MQU5HfEdOT01FX0tFWVJJTkdfQ09OVFJPTHxHTk9NRV9LRVlSSU5HX1BJRHxHUEdfQUdFTlRfSU5GT3xHUk9VUFN8SElTVENPTlRST0x8SElTVEZJTEV8SElTVEZJTEVTSVpFfEhJU1RTSVpFfEhPTUV8SE9TVE5BTUV8SE9TVFRZUEV8SUZTfElOU1RBTkNFfEpPQnxMQU5HfExBTkdVQUdFfExDX0FERFJFU1N8TENfQUxMfExDX0lERU5USUZJQ0FUSU9OfExDX01FQVNVUkVNRU5UfExDX01PTkVUQVJZfExDX05BTUV8TENfTlVNRVJJQ3xMQ19QQVBFUnxMQ19URUxFUEhPTkV8TENfVElNRXxMRVNTQ0xPU0V8TEVTU09QRU58TElORVN8TE9HTkFNRXxMU19DT0xPUlN8TUFDSFRZUEV8TUFJTENIRUNLfE1BTkRBVE9SWV9QQVRIfE5PX0FUX0JSSURHRXxPTERQV0R8T1BURVJSfE9QVElORHxPUkJJVF9TT0NLRVRESVJ8T1NUWVBFfFBBUEVSU0laRXxQQVRIfFBJUEVTVEFUVVN8UFBJRHxQUzF8UFMyfFBTM3xQUzR8UFdEfFJBTkRPTXxSRVBMWXxTRUNPTkRTfFNFTElOVVhfSU5JVHxTRVNTSU9OfFNFU1NJT05UWVBFfFNFU1NJT05fTUFOQUdFUnxTSEVMTHxTSEVMTE9QVFN8U0hMVkx8U1NIX0FVVEhfU09DS3xURVJNfFVJRHxVUFNUQVJUX0VWRU5UU3xVUFNUQVJUX0lOU1RBTkNFfFVQU1RBUlRfSk9CfFVQU1RBUlRfU0VTU0lPTnxVU0VSfFdJTkRPV0lEfFhBVVRIT1JJVFl8WERHX0NPTkZJR19ESVJTfFhER19DVVJSRU5UX0RFU0tUT1B8WERHX0RBVEFfRElSU3xYREdfR1JFRVRFUl9EQVRBX0RJUnxYREdfTUVOVV9QUkVGSVh8WERHX1JVTlRJTUVfRElSfFhER19TRUFUfFhER19TRUFUX1BBVEh8WERHX1NFU1NJT05fREVTS1RPUHxYREdfU0VTU0lPTl9JRHxYREdfU0VTU0lPTl9QQVRIfFhER19TRVNTSU9OX1RZUEV8WERHX1ZUTlJ8WE1PRElGSUVSUylcXFxcYic7XHJcbiAgXHR2YXIgaW5zaWRlU3RyaW5nID0ge1xyXG4gIFx0XHQnZW52aXJvbm1lbnQnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogUmVnRXhwKFwiXFxcXCRcIiArIGVudlZhcnMpLFxyXG4gIFx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCd2YXJpYWJsZSc6IFtcclxuICBcdFx0XHQvLyBbMF06IEFyaXRobWV0aWMgRW52aXJvbm1lbnRcclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXFwkP1xcKFxcKFtcXHNcXFNdKz9cXClcXCkvLFxyXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgJCBzaWduIGF0IHRoZSBiZWdpbm5pbmcgaGlnaGxpZ2h0ICQoKCBhbmQgKSkgYXMgdmFyaWFibGVcclxuICBcdFx0XHRcdFx0J3ZhcmlhYmxlJzogW1xyXG4gIFx0XHRcdFx0XHRcdHtcclxuICBcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcJFxcKFxcKFtcXHNcXFNdKylcXClcXCkvLFxyXG4gIFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHRcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHRcdFx0L15cXCRcXChcXCgvXHJcbiAgXHRcdFx0XHRcdF0sXHJcbiAgXHRcdFx0XHRcdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXStcXGJ8KD86XFxiXFxkK1xcLj9cXGQqfFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/LyxcclxuICBcdFx0XHRcdFx0Ly8gT3BlcmF0b3JzIGFjY29yZGluZyB0byBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jhc2gvbWFudWFsL2Jhc2hyZWYuaHRtbCNTaGVsbC1Bcml0aG1ldGljXHJcbiAgXHRcdFx0XHRcdCdvcGVyYXRvcic6IC8tLT98LT18XFwrXFwrP3xcXCs9fCE9P3x+fFxcKlxcKj98XFwqPXxcXC89P3wlPT98PDw9P3w+Pj0/fDw9P3w+PT98PT0/fCYmP3wmPXxcXF49P3xcXHxcXHw/fFxcfD18XFw/fDovLFxyXG4gIFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBubyAkIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBoaWdobGlnaHQgKCggYW5kICkpIGFzIHB1bmN0dWF0aW9uXHJcbiAgXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXChcXCg/fFxcKVxcKT98LHw7L1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0Ly8gWzFdOiBDb21tYW5kIFN1YnN0aXR1dGlvblxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC9cXCRcXCgoPzpcXChbXildK1xcKXxbXigpXSkrXFwpfGBbXmBdK2AvLFxyXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9eXFwkXFwofF5gfFxcKSR8YCQvXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQvLyBbMl06IEJyYWNlIGV4cGFuc2lvblxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC9cXCRcXHtbXn1dK1xcfS8sXHJcbiAgXHRcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0J29wZXJhdG9yJzogLzpbLT0/K10/fFshXFwvXXwjIz98JSU/fFxcXlxcXj98LCw/LyxcclxuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dLyxcclxuICBcdFx0XHRcdFx0J2Vudmlyb25tZW50Jzoge1xyXG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcIihcXFxceylcIiArIGVudlZhcnMpLFxyXG4gIFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdFx0YWxpYXM6ICdjb25zdGFudCdcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0L1xcJCg/Olxcdyt8WyM/KiFAJF0pL1xyXG4gIFx0XHRdLFxyXG4gIFx0XHQvLyBFc2NhcGUgc2VxdWVuY2VzIGZyb20gZWNobyBhbmQgcHJpbnRmJ3MgbWFudWFscywgYW5kIGVzY2FwZWQgcXVvdGVzLlxyXG4gIFx0XHQnZW50aXR5JzogL1xcXFwoPzpbYWJjZUVmbnJ0dlxcXFxcIl18Tz9bMC03XXsxLDN9fHhbMC05YS1mQS1GXXsxLDJ9fHVbMC05YS1mQS1GXXs0fXxVWzAtOWEtZkEtRl17OH0pL1xyXG4gIFx0fTtcclxuXHJcbiAgXHRQcmlzbS5sYW5ndWFnZXMuYmFzaCA9IHtcclxuICBcdFx0J3NoZWJhbmcnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogL14jIVxccypcXC8uKi8sXHJcbiAgXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdjb21tZW50Jzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXlwie1xcXFwkXSkjLiovLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0J2Z1bmN0aW9uLW5hbWUnOiBbXHJcbiAgXHRcdFx0Ly8gYSkgZnVuY3Rpb24gZm9vIHtcclxuICBcdFx0XHQvLyBiKSBmb28oKSB7XHJcbiAgXHRcdFx0Ly8gYykgZnVuY3Rpb24gZm9vKCkge1xyXG4gIFx0XHRcdC8vIGJ1dCBub3Qg4oCcZm9vIHvigJ1cclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHQvLyBhKSBhbmQgYylcclxuICBcdFx0XHRcdHBhdHRlcm46IC8oXFxiZnVuY3Rpb25cXHMrKVxcdysoPz0oPzpcXHMqXFwoPzpcXHMqXFwpKT9cXHMqXFx7KS8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdC8vIGIpXHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFx3Kyg/PVxccypcXChcXHMqXFwpXFxzKlxceykvLFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcclxuICBcdFx0XHR9XHJcbiAgXHRcdF0sXHJcbiAgXHRcdC8vIEhpZ2hsaWdodCB2YXJpYWJsZSBuYW1lcyBhcyB2YXJpYWJsZXMgaW4gZm9yIGFuZCBzZWxlY3QgYmVnaW5uaW5ncy5cclxuICBcdFx0J2Zvci1vci1zZWxlY3QnOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhcXGIoPzpmb3J8c2VsZWN0KVxccyspXFx3Kyg/PVxccytpblxccykvLFxyXG4gIFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0Ly8gSGlnaGxpZ2h0IHZhcmlhYmxlIG5hbWVzIGFzIHZhcmlhYmxlcyBpbiB0aGUgbGVmdC1oYW5kIHBhcnRcclxuICBcdFx0Ly8gb2YgYXNzaWdubWVudHMgKOKAnD3igJ0gYW5kIOKAnCs94oCdKS5cclxuICBcdFx0J2Fzc2lnbi1sZWZ0Jzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKVxcdysoPz1cXCs/PSkvLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J2Vudmlyb25tZW50Jzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXCIoXnxbXFxcXHM7fCZdfFs8Pl1cXFxcKClcIiArIGVudlZhcnMpLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQnc3RyaW5nJzogW1xyXG4gIFx0XHRcdC8vIFN1cHBvcnQgZm9yIEhlcmUtZG9jdW1lbnRzIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hlcmVfZG9jdW1lbnRcclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W148XSk8PC0/XFxzKikoXFx3Kz8pXFxzKig/Olxccj9cXG58XFxyKVtcXHNcXFNdKj8oPzpcXHI/XFxufFxccilcXDIvLFxyXG4gIFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRcdGluc2lkZTogaW5zaWRlU3RyaW5nXHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQvLyBIZXJlLWRvY3VtZW50IHdpdGggcXVvdGVzIGFyb3VuZCB0aGUgdGFnXHJcbiAgXHRcdFx0Ly8g4oaSIE5vIGV4cGFuc2lvbiAoc28gbm8g4oCcaW5zaWRl4oCdKS5cclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W148XSk8PC0/XFxzKikoW1wiJ10pKFxcdyspXFwyXFxzKig/Olxccj9cXG58XFxyKVtcXHNcXFNdKj8oPzpcXHI/XFxufFxccilcXDMvLFxyXG4gIFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZVxyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0Ly8g4oCcTm9ybWFs4oCdIHN0cmluZ1xyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKD86XFxcXFxcXFwpKikoW1wiJ10pKD86XFxcXFtcXHNcXFNdfFxcJFxcKFteKV0rXFwpfGBbXmBdK2B8KD8hXFwyKVteXFxcXF0pKlxcMi8sXHJcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdFx0aW5zaWRlOiBpbnNpZGVTdHJpbmdcclxuICBcdFx0XHR9XHJcbiAgXHRcdF0sXHJcbiAgXHRcdCdlbnZpcm9ubWVudCc6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXCJcXFxcJD9cIiArIGVudlZhcnMpLFxyXG4gIFx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCd2YXJpYWJsZSc6IGluc2lkZVN0cmluZy52YXJpYWJsZSxcclxuICBcdFx0J2Z1bmN0aW9uJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmFkZHxhcHJvcG9zfGFwdHxhcHRpdHVkZXxhcHQtY2FjaGV8YXB0LWdldHxhc3BlbGx8YXV0b215c3FsYmFja3VwfGF3a3xiYXNlbmFtZXxiYXNofGJjfGJjb25zb2xlfGJnfGJ6aXAyfGNhbHxjYXR8Y2ZkaXNrfGNoZ3JwfGNoa2NvbmZpZ3xjaG1vZHxjaG93bnxjaHJvb3R8Y2tzdW18Y2xlYXJ8Y21wfGNvbHVtbnxjb21tfGNwfGNyb258Y3JvbnRhYnxjc3BsaXR8Y3VybHxjdXR8ZGF0ZXxkY3xkZHxkZHJlc2N1ZXxkZWJvb3RzdHJhcHxkZnxkaWZmfGRpZmYzfGRpZ3xkaXJ8ZGlyY29sb3JzfGRpcm5hbWV8ZGlyc3xkbWVzZ3xkdXxlZ3JlcHxlamVjdHxlbnZ8ZXRodG9vbHxleHBhbmR8ZXhwZWN0fGV4cHJ8ZmRmb3JtYXR8ZmRpc2t8Zmd8ZmdyZXB8ZmlsZXxmaW5kfGZtdHxmb2xkfGZvcm1hdHxmcmVlfGZzY2t8ZnRwfGZ1c2VyfGdhd2t8Z2l0fGdwYXJ0ZWR8Z3JlcHxncm91cGFkZHxncm91cGRlbHxncm91cG1vZHxncm91cHN8Z3J1Yi1ta2NvbmZpZ3xnemlwfGhhbHR8aGVhZHxoZ3xoaXN0b3J5fGhvc3R8aG9zdG5hbWV8aHRvcHxpY29udnxpZHxpZmNvbmZpZ3xpZmRvd258aWZ1cHxpbXBvcnR8aW5zdGFsbHxpcHxqb2JzfGpvaW58a2lsbHxraWxsYWxsfGxlc3N8bGlua3xsbnxsb2NhdGV8bG9nbmFtZXxsb2dyb3RhdGV8bG9va3xscGN8bHByfGxwcmludHxscHJpbnRkfGxwcmludHF8bHBybXxsc3xsc29mfGx5bnh8bWFrZXxtYW58bWN8bWRhZG18bWtjb25maWd8bWtkaXJ8bWtlMmZzfG1rZmlmb3xta2ZzfG1raXNvZnN8bWtub2R8bWtzd2FwfG1tdnxtb3JlfG1vc3R8bW91bnR8bXRvb2xzfG10cnxtdXR0fG12fG5hbm98bmN8bmV0c3RhdHxuaWNlfG5sfG5vaHVwfG5vdGlmeS1zZW5kfG5wbXxuc2xvb2t1cHxvcHxvcGVufHBhcnRlZHxwYXNzd2R8cGFzdGV8cGF0aGNoa3xwaW5nfHBraWxsfHBucG18cG9wZHxwcnxwcmludGNhcHxwcmludGVudnxwc3xwdXNoZHxwdnxxdW90YXxxdW90YWNoZWNrfHF1b3RhY3RsfHJhbXxyYXJ8cmNwfHJlYm9vdHxyZW1zeW5jfHJlbmFtZXxyZW5pY2V8cmV2fHJtfHJtZGlyfHJwbXxyc3luY3xzY3B8c2NyZWVufHNkaWZmfHNlZHxzZW5kbWFpbHxzZXF8c2VydmljZXxzZnRwfHNofHNoZWxsY2hlY2t8c2h1ZnxzaHV0ZG93bnxzbGVlcHxzbG9jYXRlfHNvcnR8c3BsaXR8c3NofHN0YXR8c3RyYWNlfHN1fHN1ZG98c3VtfHN1c3BlbmR8c3dhcG9ufHN5bmN8dGFjfHRhaWx8dGFyfHRlZXx0aW1lfHRpbWVvdXR8dG9wfHRvdWNofHRyfHRyYWNlcm91dGV8dHNvcnR8dHR5fHVtb3VudHx1bmFtZXx1bmV4cGFuZHx1bmlxfHVuaXRzfHVucmFyfHVuc2hhcnx1bnppcHx1cGRhdGUtZ3J1Ynx1cHRpbWV8dXNlcmFkZHx1c2VyZGVsfHVzZXJtb2R8dXNlcnN8dXVkZWNvZGV8dXVlbmNvZGV8dnx2ZGlyfHZpfHZpbXx2aXJzaHx2bXN0YXR8d2FpdHx3YXRjaHx3Y3x3Z2V0fHdoZXJlaXN8d2hpY2h8d2hvfHdob2FtaXx3cml0ZXx4YXJnc3x4ZGctb3Blbnx5YXJufHllc3x6ZW5pdHl8emlwfHpzaHx6eXBwZXIpKD89JHxbKVxcczt8Jl0pLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdrZXl3b3JkJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmlmfHRoZW58ZWxzZXxlbGlmfGZpfGZvcnx3aGlsZXxpbnxjYXNlfGVzYWN8ZnVuY3Rpb258c2VsZWN0fGRvfGRvbmV8dW50aWwpKD89JHxbKVxcczt8Jl0pLyxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXHJcbiAgXHRcdH0sXHJcbiAgXHRcdC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NoZWxsLUJ1aWx0aW4tQ29tbWFuZHMuaHRtbFxyXG4gIFx0XHQnYnVpbHRpbic6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKCkoPzpcXC58OnxicmVha3xjZHxjb250aW51ZXxldmFsfGV4ZWN8ZXhpdHxleHBvcnR8Z2V0b3B0c3xoYXNofHB3ZHxyZWFkb25seXxyZXR1cm58c2hpZnR8dGVzdHx0aW1lc3x0cmFwfHVtYXNrfHVuc2V0fGFsaWFzfGJpbmR8YnVpbHRpbnxjYWxsZXJ8Y29tbWFuZHxkZWNsYXJlfGVjaG98ZW5hYmxlfGhlbHB8bGV0fGxvY2FsfGxvZ291dHxtYXBmaWxlfHByaW50ZnxyZWFkfHJlYWRhcnJheXxzb3VyY2V8dHlwZXx0eXBlc2V0fHVsaW1pdHx1bmFsaWFzfHNldHxzaG9wdCkoPz0kfFspXFxzO3wmXSkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0Ly8gQWxpYXMgYWRkZWQgdG8gbWFrZSB0aG9zZSBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggZnJvbSBzdHJpbmdzLlxyXG4gIFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcclxuICBcdFx0fSxcclxuICBcdFx0J2Jvb2xlYW4nOiB7XHJcbiAgXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpKD86dHJ1ZXxmYWxzZSkoPz0kfFspXFxzO3wmXSkvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fSxcclxuICBcdFx0J2ZpbGUtZGVzY3JpcHRvcic6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvXFxCJlxcZFxcYi8sXHJcbiAgXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdvcGVyYXRvcic6IHtcclxuICBcdFx0XHQvLyBMb3RzIG9mIHJlZGlyZWN0aW9ucyBoZXJlLCBidXQgbm90IGp1c3QgdGhhdC5cclxuICBcdFx0XHRwYXR0ZXJuOiAvXFxkPzw+fD5cXHx8XFwrPXw9PT98IT0/fD1+fDw8WzwtXT98WyZcXGRdPz4+fFxcZD9bPD5dJj98Jls+Jl0/fFxcfFsmfF0/fDw9P3w+PT8vLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J2ZpbGUtZGVzY3JpcHRvcic6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogL15cXGQvLFxyXG4gIFx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdCdwdW5jdHVhdGlvbic6IC9cXCQ/XFwoXFwoP3xcXClcXCk/fFxcLlxcLnxbe31bXFxdO1xcXFxdLyxcclxuICBcdFx0J251bWJlcic6IHtcclxuICBcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OlsxLTldXFxkKnwwKSg/OlsuLF1cXGQrKT9cXGIvLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuXHJcbiAgXHQvKiBQYXR0ZXJucyBpbiBjb21tYW5kIHN1YnN0aXR1dGlvbi4gKi9cclxuICBcdHZhciB0b0JlQ29waWVkID0gW1xyXG4gIFx0XHQnY29tbWVudCcsXHJcbiAgXHRcdCdmdW5jdGlvbi1uYW1lJyxcclxuICBcdFx0J2Zvci1vci1zZWxlY3QnLFxyXG4gIFx0XHQnYXNzaWduLWxlZnQnLFxyXG4gIFx0XHQnc3RyaW5nJyxcclxuICBcdFx0J2Vudmlyb25tZW50JyxcclxuICBcdFx0J2Z1bmN0aW9uJyxcclxuICBcdFx0J2tleXdvcmQnLFxyXG4gIFx0XHQnYnVpbHRpbicsXHJcbiAgXHRcdCdib29sZWFuJyxcclxuICBcdFx0J2ZpbGUtZGVzY3JpcHRvcicsXHJcbiAgXHRcdCdvcGVyYXRvcicsXHJcbiAgXHRcdCdwdW5jdHVhdGlvbicsXHJcbiAgXHRcdCdudW1iZXInXHJcbiAgXHRdO1xyXG4gIFx0dmFyIGluc2lkZSA9IGluc2lkZVN0cmluZy52YXJpYWJsZVsxXS5pbnNpZGU7XHJcbiAgXHRmb3IodmFyIGkgPSAwOyBpIDwgdG9CZUNvcGllZC5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRpbnNpZGVbdG9CZUNvcGllZFtpXV0gPSBQcmlzbS5sYW5ndWFnZXMuYmFzaFt0b0JlQ29waWVkW2ldXTtcclxuICBcdH1cclxuXHJcbiAgXHRQcmlzbS5sYW5ndWFnZXMuc2hlbGwgPSBQcmlzbS5sYW5ndWFnZXMuYmFzaDtcclxuICB9KShQcmlzbSk7XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5nbyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xyXG4gIFx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2FzZXxjaGFufGNvbnN0fGNvbnRpbnVlfGRlZmF1bHR8ZGVmZXJ8ZWxzZXxmYWxsdGhyb3VnaHxmb3J8ZnVuY3xnbyg/OnRvKT98aWZ8aW1wb3J0fGludGVyZmFjZXxtYXB8cGFja2FnZXxyYW5nZXxyZXR1cm58c2VsZWN0fHN0cnVjdHxzd2l0Y2h8dHlwZXx2YXIpXFxiLyxcclxuICBcdCdidWlsdGluJzogL1xcYig/OmJvb2x8Ynl0ZXxjb21wbGV4KD86NjR8MTI4KXxlcnJvcnxmbG9hdCg/OjMyfDY0KXxydW5lfHN0cmluZ3x1P2ludCg/Ojh8MTZ8MzJ8NjQpP3x1aW50cHRyfGFwcGVuZHxjYXB8Y2xvc2V8Y29tcGxleHxjb3B5fGRlbGV0ZXxpbWFnfGxlbnxtYWtlfG5ld3xwYW5pY3xwcmludCg/OmxuKT98cmVhbHxyZWNvdmVyKVxcYi8sXHJcbiAgXHQnYm9vbGVhbic6IC9cXGIoPzpffGlvdGF8bmlsfHRydWV8ZmFsc2UpXFxiLyxcclxuICBcdCdvcGVyYXRvcic6IC9bKlxcLyVeIT1dPT98XFwrWz0rXT98LVs9LV0/fFxcfFs9fF0/fCYoPzo9fCZ8XFxePT8pP3w+KD86Pj0/fD0pP3w8KD86PD0/fD18LSk/fDo9fFxcLlxcLlxcLi8sXHJcbiAgXHQnbnVtYmVyJzogLyg/OlxcYjB4W2EtZlxcZF0rfCg/OlxcYlxcZCtcXC4/XFxkKnxcXEJcXC5cXGQrKSg/OmVbLStdP1xcZCspPylpPy9pLFxyXG4gIFx0J3N0cmluZyc6IHtcclxuICBcdFx0cGF0dGVybjogLyhbXCInYF0pKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDEvLFxyXG4gIFx0XHRncmVlZHk6IHRydWVcclxuICBcdH1cclxuICB9KTtcclxuICBkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmdvWydjbGFzcy1uYW1lJ107XHJcblxyXG4gIChmdW5jdGlvbiAoUHJpc20pIHtcclxuXHJcbiAgXHQvLyBBbGxvdyBvbmx5IG9uZSBsaW5lIGJyZWFrXHJcbiAgXHR2YXIgaW5uZXIgPSAvKD86XFxcXC58W15cXFxcXFxuXFxyXXwoPzpcXG58XFxyXFxuPykoPyFcXG58XFxyXFxuPykpLy5zb3VyY2U7XHJcblxyXG4gIFx0LyoqXHJcbiAgXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGJvbGQgb3IgaXRhbGljIHBhdHRlcm4uXHJcbiAgXHQgKlxyXG4gIFx0ICogVGhpcyBhbHNvIGFkZHMgYSBsb29rYmVoaW5kIGdyb3VwIHRvIHRoZSBnaXZlbiBwYXR0ZXJuIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGlzIG5vdCBiYWNrc2xhc2gtZXNjYXBlZC5cclxuICBcdCAqXHJcbiAgXHQgKiBfTm90ZTpfIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgYWRkcyBhIGNhcHR1cmluZyBncm91cC5cclxuICBcdCAqXHJcbiAgXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxyXG4gIFx0ICogQHBhcmFtIHtib29sZWFufSBzdGFyQWx0ZXJuYXRpdmUgV2hldGhlciB0byBhbHNvIGFkZCBhbiBhbHRlcm5hdGl2ZSB3aGVyZSBhbGwgYF9gcyBhcmUgcmVwbGFjZWQgd2l0aCBgKmBzLlxyXG4gIFx0ICogQHJldHVybnMge1JlZ0V4cH1cclxuICBcdCAqL1xyXG4gIFx0ZnVuY3Rpb24gY3JlYXRlSW5saW5lKHBhdHRlcm4sIHN0YXJBbHRlcm5hdGl2ZSkge1xyXG4gIFx0XHRwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC88aW5uZXI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyOyB9KTtcclxuICBcdFx0aWYgKHN0YXJBbHRlcm5hdGl2ZSkge1xyXG4gIFx0XHRcdHBhdHRlcm4gPSBwYXR0ZXJuICsgJ3wnICsgcGF0dGVybi5yZXBsYWNlKC9fL2csICdcXFxcKicpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBSZWdFeHAoLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKS8uc291cmNlICsgJyg/OicgKyBwYXR0ZXJuICsgJyknKTtcclxuICBcdH1cclxuXHJcblxyXG4gIFx0dmFyIHRhYmxlQ2VsbCA9IC8oPzpcXFxcLnxgYC4rP2BgfGBbXmBcXHJcXG5dK2B8W15cXFxcfFxcclxcbmBdKSsvLnNvdXJjZTtcclxuICBcdHZhciB0YWJsZVJvdyA9IC9cXHw/X18oPzpcXHxfXykrXFx8Pyg/Oig/OlxcbnxcXHJcXG4/KXwkKS8uc291cmNlLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhYmxlQ2VsbDsgfSk7XHJcbiAgXHR2YXIgdGFibGVMaW5lID0gL1xcfD9bIFxcdF0qOj8tezMsfTo/WyBcXHRdKig/OlxcfFsgXFx0XSo6Py17Myx9Oj9bIFxcdF0qKStcXHw/KD86XFxufFxcclxcbj8pLy5zb3VyY2U7XHJcblxyXG5cclxuICBcdFByaXNtLmxhbmd1YWdlcy5tYXJrZG93biA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcclxuICBcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmtkb3duJywgJ3Byb2xvZycsIHtcclxuICBcdFx0J2Jsb2NrcXVvdGUnOiB7XHJcbiAgXHRcdFx0Ly8gPiAuLi5cclxuICBcdFx0XHRwYXR0ZXJuOiAvXj4oPzpbXFx0IF0qPikqL20sXHJcbiAgXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcclxuICBcdFx0fSxcclxuICBcdFx0J3RhYmxlJzoge1xyXG4gIFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyB0YWJsZVJvdyArIHRhYmxlTGluZSArICcoPzonICsgdGFibGVSb3cgKyAnKSonLCAnbScpLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J3RhYmxlLWRhdGEtcm93cyc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKCcgKyB0YWJsZVJvdyArIHRhYmxlTGluZSArICcpKD86JyArIHRhYmxlUm93ICsgJykqJCcpLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdFx0XHQndGFibGUtZGF0YSc6IHtcclxuICBcdFx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWJsZUNlbGwpLFxyXG4gIFx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25cclxuICBcdFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH0sXHJcbiAgXHRcdFx0XHQndGFibGUtbGluZSc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKCcgKyB0YWJsZVJvdyArICcpJyArIHRhYmxlTGluZSArICckJyksXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHx8Oj8tezMsfTo/L1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J3RhYmxlLWhlYWRlci1yb3cnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyB0YWJsZVJvdyArICckJyksXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHRcdCd0YWJsZS1oZWFkZXInOiB7XHJcbiAgXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVDZWxsKSxcclxuICBcdFx0XHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50JyxcclxuICBcdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duXHJcbiAgXHRcdFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQnY29kZSc6IFtcclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHQvLyBQcmVmaXhlZCBieSA0IHNwYWNlcyBvciAxIHRhYiBhbmQgcHJlY2VkZWQgYnkgYW4gZW1wdHkgbGluZVxyXG4gIFx0XHRcdFx0cGF0dGVybjogLygoPzpefFxcbilbIFxcdF0qXFxufCg/Ol58XFxyXFxuPylbIFxcdF0qXFxyXFxuPykoPzogezR9fFxcdCkuKyg/Oig/OlxcbnxcXHJcXG4/KSg/OiB7NH18XFx0KS4rKSovLFxyXG4gIFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdC8vIGBjb2RlYFxyXG4gIFx0XHRcdFx0Ly8gYGBjb2RlYGBcclxuICBcdFx0XHRcdHBhdHRlcm46IC9gYC4rP2BgfGBbXmBcXHJcXG5dK2AvLFxyXG4gIFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xyXG4gIFx0XHRcdH0sXHJcbiAgXHRcdFx0e1xyXG4gIFx0XHRcdFx0Ly8gYGBgb3B0aW9uYWwgbGFuZ3VhZ2VcclxuICBcdFx0XHRcdC8vIGNvZGUgYmxvY2tcclxuICBcdFx0XHRcdC8vIGBgYFxyXG4gIFx0XHRcdFx0cGF0dGVybjogL15gYGBbXFxzXFxTXSo/XmBgYCQvbSxcclxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHQnY29kZS1ibG9jayc6IHtcclxuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihgYGAuKig/OlxcbnxcXHJcXG4/KSlbXFxzXFxTXSs/KD89KD86XFxufFxcclxcbj8pXmBgYCQpL20sXHJcbiAgXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0XHQnY29kZS1sYW5ndWFnZSc6IHtcclxuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihgYGApLisvLFxyXG4gIFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL2BgYC9cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdF0sXHJcbiAgXHRcdCd0aXRsZSc6IFtcclxuICBcdFx0XHR7XHJcbiAgXHRcdFx0XHQvLyB0aXRsZSAxXHJcbiAgXHRcdFx0XHQvLyA9PT09PT09XHJcblxyXG4gIFx0XHRcdFx0Ly8gdGl0bGUgMlxyXG4gIFx0XHRcdFx0Ly8gLS0tLS0tLVxyXG4gIFx0XHRcdFx0cGF0dGVybjogL1xcUy4qKD86XFxufFxcclxcbj8pKD86PT0rfC0tKykoPz1bIFxcdF0qJCkvbSxcclxuICBcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50JyxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHRwdW5jdHVhdGlvbjogLz09KyR8LS0rJC9cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdHtcclxuICBcdFx0XHRcdC8vICMgdGl0bGUgMVxyXG4gIFx0XHRcdFx0Ly8gIyMjIyMjIHRpdGxlIDZcclxuICBcdFx0XHRcdHBhdHRlcm46IC8oXlxccyopIysuKy9tLFxyXG4gIFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50JyxcclxuICBcdFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0XHRwdW5jdHVhdGlvbjogL14jK3wjKyQvXHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRdLFxyXG4gIFx0XHQnaHInOiB7XHJcbiAgXHRcdFx0Ly8gKioqXHJcbiAgXHRcdFx0Ly8gLS0tXHJcbiAgXHRcdFx0Ly8gKiAqICpcclxuICBcdFx0XHQvLyAtLS0tLS0tLS0tLVxyXG4gIFx0XHRcdHBhdHRlcm46IC8oXlxccyopKFsqLV0pKD86W1xcdCBdKlxcMil7Mix9KD89XFxzKiQpL20sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xyXG4gIFx0XHR9LFxyXG4gIFx0XHQnbGlzdCc6IHtcclxuICBcdFx0XHQvLyAqIGl0ZW1cclxuICBcdFx0XHQvLyArIGl0ZW1cclxuICBcdFx0XHQvLyAtIGl0ZW1cclxuICBcdFx0XHQvLyAxLiBpdGVtXHJcbiAgXHRcdFx0cGF0dGVybjogLyheXFxzKikoPzpbKistXXxcXGQrXFwuKSg/PVtcXHQgXS4pL20sXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xyXG4gIFx0XHR9LFxyXG4gIFx0XHQndXJsLXJlZmVyZW5jZSc6IHtcclxuICBcdFx0XHQvLyBbaWRdOiBodHRwOi8vZXhhbXBsZS5jb20gXCJPcHRpb25hbCB0aXRsZVwiXHJcbiAgXHRcdFx0Ly8gW2lkXTogaHR0cDovL2V4YW1wbGUuY29tICdPcHRpb25hbCB0aXRsZSdcclxuICBcdFx0XHQvLyBbaWRdOiBodHRwOi8vZXhhbXBsZS5jb20gKE9wdGlvbmFsIHRpdGxlKVxyXG4gIFx0XHRcdC8vIFtpZF06IDxodHRwOi8vZXhhbXBsZS5jb20+IFwiT3B0aW9uYWwgdGl0bGVcIlxyXG4gIFx0XHRcdHBhdHRlcm46IC8hP1xcW1teXFxdXStcXF06W1xcdCBdKyg/OlxcUyt8PCg/OlxcXFwufFtePlxcXFxdKSs+KSg/OltcXHQgXSsoPzpcIig/OlxcXFwufFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxdKSonfFxcKCg/OlxcXFwufFteKVxcXFxdKSpcXCkpKT8vLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J3ZhcmlhYmxlJzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvXighP1xcWylbXlxcXV0rLyxcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdCdzdHJpbmcnOiAvKD86XCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwifCcoPzpcXFxcLnxbXidcXFxcXSkqJ3xcXCgoPzpcXFxcLnxbXilcXFxcXSkqXFwpKSQvLFxyXG4gIFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bXFxbXFxdITpdfFs8Pl0vXHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHRhbGlhczogJ3VybCdcclxuICBcdFx0fSxcclxuICBcdFx0J2JvbGQnOiB7XHJcbiAgXHRcdFx0Ly8gKipzdHJvbmcqKlxyXG4gIFx0XHRcdC8vIF9fc3Ryb25nX19cclxuXHJcbiAgXHRcdFx0Ly8gYWxsb3cgb25lIG5lc3RlZCBpbnN0YW5jZSBvZiBpdGFsaWMgdGV4dCB1c2luZyB0aGUgc2FtZSBkZWxpbWl0ZXJcclxuICBcdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoL19fKD86KD8hXyk8aW5uZXI+fF8oPzooPyFfKTxpbm5lcj4pK18pK19fLy5zb3VyY2UsIHRydWUpLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J2NvbnRlbnQnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXi4uKVtcXHNcXFNdKyg/PS4uJCkvLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xyXG4gIFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXCpcXCp8X18vXHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LFxyXG4gIFx0XHQnaXRhbGljJzoge1xyXG4gIFx0XHRcdC8vICplbSpcclxuICBcdFx0XHQvLyBfZW1fXHJcblxyXG4gIFx0XHRcdC8vIGFsbG93IG9uZSBuZXN0ZWQgaW5zdGFuY2Ugb2YgYm9sZCB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxyXG4gIFx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvXyg/Oig/IV8pPGlubmVyPnxfXyg/Oig/IV8pPGlubmVyPikrX18pK18vLnNvdXJjZSwgdHJ1ZSksXHJcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcclxuICBcdFx0XHRncmVlZHk6IHRydWUsXHJcbiAgXHRcdFx0aW5zaWRlOiB7XHJcbiAgXHRcdFx0XHQnY29udGVudCc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogLyheLilbXFxzXFxTXSsoPz0uJCkvLFxyXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xyXG4gIFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKl9dL1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSxcclxuICBcdFx0J3N0cmlrZSc6IHtcclxuICBcdFx0XHQvLyB+fnN0cmlrZSB0aHJvdWdofn5cclxuICBcdFx0XHQvLyB+c3RyaWtlflxyXG4gIFx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvKH5+PykoPzooPyF+KTxpbm5lcj4pKz9cXDIvLnNvdXJjZSwgZmFsc2UpLFxyXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0Z3JlZWR5OiB0cnVlLFxyXG4gIFx0XHRcdGluc2lkZToge1xyXG4gIFx0XHRcdFx0J2NvbnRlbnQnOiB7XHJcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXn5+PylbXFxzXFxTXSsoPz1cXDEkKS8sXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL35+Py9cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sXHJcbiAgXHRcdCd1cmwnOiB7XHJcbiAgXHRcdFx0Ly8gW2V4YW1wbGVdKGh0dHA6Ly9leGFtcGxlLmNvbSBcIk9wdGlvbmFsIHRpdGxlXCIpXHJcbiAgXHRcdFx0Ly8gW2V4YW1wbGVdW2lkXVxyXG4gIFx0XHRcdC8vIFtleGFtcGxlXSBbaWRdXHJcbiAgXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC8hP1xcWyg/Oig/IVxcXSk8aW5uZXI+KStcXF0oPzpcXChbXlxccyldKyg/OltcXHQgXStcIig/OlxcXFwufFteXCJcXFxcXSkqXCIpP1xcKXwgP1xcWyg/Oig/IVxcXSk8aW5uZXI+KStcXF0pLy5zb3VyY2UsIGZhbHNlKSxcclxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxyXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcclxuICBcdFx0XHRpbnNpZGU6IHtcclxuICBcdFx0XHRcdCd2YXJpYWJsZSc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogLyhcXFspW15cXF1dKyg/PVxcXSQpLyxcclxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxyXG4gIFx0XHRcdFx0fSxcclxuICBcdFx0XHRcdCdjb250ZW50Jzoge1xyXG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4hP1xcWylbXlxcXV0rKD89XFxdKS8sXHJcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXHJcbiAgXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XHJcbiAgXHRcdFx0XHR9LFxyXG4gIFx0XHRcdFx0J3N0cmluZyc6IHtcclxuICBcdFx0XHRcdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxdKSpcIig/PVxcKSQpL1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSk7XHJcblxyXG4gIFx0Wyd1cmwnLCAnYm9sZCcsICdpdGFsaWMnLCAnc3RyaWtlJ10uZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHtcclxuICBcdFx0Wyd1cmwnLCAnYm9sZCcsICdpdGFsaWMnLCAnc3RyaWtlJ10uZm9yRWFjaChmdW5jdGlvbiAoaW5zaWRlKSB7XHJcbiAgXHRcdFx0aWYgKHRva2VuICE9PSBpbnNpZGUpIHtcclxuICBcdFx0XHRcdFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blt0b2tlbl0uaW5zaWRlLmNvbnRlbnQuaW5zaWRlW2luc2lkZV0gPSBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25baW5zaWRlXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0pO1xyXG4gIFx0fSk7XHJcblxyXG4gIFx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcclxuICBcdFx0aWYgKGVudi5sYW5ndWFnZSAhPT0gJ21hcmtkb3duJyAmJiBlbnYubGFuZ3VhZ2UgIT09ICdtZCcpIHtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZ1bmN0aW9uIHdhbGtUb2tlbnModG9rZW5zKSB7XHJcbiAgXHRcdFx0aWYgKCF0b2tlbnMgfHwgdHlwZW9mIHRva2VucyA9PT0gJ3N0cmluZycpIHtcclxuICBcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdG9rZW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gIFx0XHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW2ldO1xyXG5cclxuICBcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnY29kZScpIHtcclxuICBcdFx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcclxuICBcdFx0XHRcdFx0Y29udGludWU7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0LypcclxuICBcdFx0XHRcdCAqIEFkZCB0aGUgY29ycmVjdCBgbGFuZ3VhZ2UteHh4eGAgY2xhc3MgdG8gdGhpcyBjb2RlIGJsb2NrLiBLZWVwIGluIG1pbmQgdGhhdCB0aGUgYGNvZGUtbGFuZ3VhZ2VgIHRva2VuXHJcbiAgXHRcdFx0XHQgKiBpcyBvcHRpb25hbC4gQnV0IHRoZSBncmFtbWFyIGlzIGRlZmluZWQgc28gdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBjYXNlIHdlIGhhdmUgdG8gaGFuZGxlOlxyXG4gIFx0XHRcdFx0ICpcclxuICBcdFx0XHRcdCAqIHRva2VuLmNvbnRlbnQgPSBbXHJcbiAgXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJwdW5jdHVhdGlvblwiPmBgYDwvc3Bhbj4sXHJcbiAgXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJjb2RlLWxhbmd1YWdlXCI+eHh4eDwvc3Bhbj4sXHJcbiAgXHRcdFx0XHQgKiAgICAgJ1xcbicsIC8vIGV4YWN0bHkgb25lIG5ldyBsaW5lcyAoXFxyIG9yIFxcbiBvciBcXHJcXG4pXHJcbiAgXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJjb2RlLWJsb2NrXCI+Li4uPC9zcGFuPixcclxuICBcdFx0XHRcdCAqICAgICAnXFxuJywgLy8gZXhhY3RseSBvbmUgbmV3IGxpbmVzIGFnYWluXHJcbiAgXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJwdW5jdHVhdGlvblwiPmBgYDwvc3Bhbj5cclxuICBcdFx0XHRcdCAqIF07XHJcbiAgXHRcdFx0XHQgKi9cclxuXHJcbiAgXHRcdFx0XHR2YXIgY29kZUxhbmcgPSB0b2tlbi5jb250ZW50WzFdO1xyXG4gIFx0XHRcdFx0dmFyIGNvZGVCbG9jayA9IHRva2VuLmNvbnRlbnRbM107XHJcblxyXG4gIFx0XHRcdFx0aWYgKGNvZGVMYW5nICYmIGNvZGVCbG9jayAmJlxyXG4gIFx0XHRcdFx0XHRjb2RlTGFuZy50eXBlID09PSAnY29kZS1sYW5ndWFnZScgJiYgY29kZUJsb2NrLnR5cGUgPT09ICdjb2RlLWJsb2NrJyAmJlxyXG4gIFx0XHRcdFx0XHR0eXBlb2YgY29kZUxhbmcuY29udGVudCA9PT0gJ3N0cmluZycpIHtcclxuXHJcbiAgXHRcdFx0XHRcdC8vIHRoaXMgbWlnaHQgYmUgYSBsYW5ndWFnZSB0aGF0IFByaXNtIGRvZXMgbm90IHN1cHBvcnRcclxuXHJcbiAgXHRcdFx0XHRcdC8vIGRvIHNvbWUgcmVwbGFjZW1lbnRzIHRvIHN1cHBvcnQgQysrLCBDIywgYW5kIEYjXHJcbiAgXHRcdFx0XHRcdHZhciBsYW5nID0gY29kZUxhbmcuY29udGVudC5yZXBsYWNlKC9cXGIjL2csICdzaGFycCcpLnJlcGxhY2UoL1xcYlxcK1xcKy9nLCAncHAnKTtcclxuICBcdFx0XHRcdFx0Ly8gb25seSB1c2UgdGhlIGZpcnN0IHdvcmRcclxuICBcdFx0XHRcdFx0bGFuZyA9ICgvW2Etel1bXFx3LV0qL2kuZXhlYyhsYW5nKSB8fCBbJyddKVswXS50b0xvd2VyQ2FzZSgpO1xyXG4gIFx0XHRcdFx0XHR2YXIgYWxpYXMgPSAnbGFuZ3VhZ2UtJyArIGxhbmc7XHJcblxyXG4gIFx0XHRcdFx0XHQvLyBhZGQgYWxpYXNcclxuICBcdFx0XHRcdFx0aWYgKCFjb2RlQmxvY2suYWxpYXMpIHtcclxuICBcdFx0XHRcdFx0XHRjb2RlQmxvY2suYWxpYXMgPSBbYWxpYXNdO1xyXG4gIFx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjb2RlQmxvY2suYWxpYXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzID0gW2NvZGVCbG9jay5hbGlhcywgYWxpYXNdO1xyXG4gIFx0XHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHRcdGNvZGVCbG9jay5hbGlhcy5wdXNoKGFsaWFzKTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0d2Fsa1Rva2VucyhlbnYudG9rZW5zKTtcclxuICBcdH0pO1xyXG5cclxuICBcdFByaXNtLmhvb2tzLmFkZCgnd3JhcCcsIGZ1bmN0aW9uIChlbnYpIHtcclxuICBcdFx0aWYgKGVudi50eXBlICE9PSAnY29kZS1ibG9jaycpIHtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBjb2RlTGFuZyA9ICcnO1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGVudi5jbGFzc2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gIFx0XHRcdHZhciBjbHMgPSBlbnYuY2xhc3Nlc1tpXTtcclxuICBcdFx0XHR2YXIgbWF0Y2ggPSAvbGFuZ3VhZ2UtKC4rKS8uZXhlYyhjbHMpO1xyXG4gIFx0XHRcdGlmIChtYXRjaCkge1xyXG4gIFx0XHRcdFx0Y29kZUxhbmcgPSBtYXRjaFsxXTtcclxuICBcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGdyYW1tYXIgPSBQcmlzbS5sYW5ndWFnZXNbY29kZUxhbmddO1xyXG5cclxuICBcdFx0aWYgKCFncmFtbWFyKSB7XHJcbiAgXHRcdFx0aWYgKGNvZGVMYW5nICYmIGNvZGVMYW5nICE9PSAnbm9uZScgJiYgUHJpc20ucGx1Z2lucy5hdXRvbG9hZGVyKSB7XHJcbiAgXHRcdFx0XHR2YXIgaWQgPSAnbWQtJyArIG5ldyBEYXRlKCkudmFsdWVPZigpICsgJy0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWUxNik7XHJcbiAgXHRcdFx0XHRlbnYuYXR0cmlidXRlc1snaWQnXSA9IGlkO1xyXG5cclxuICBcdFx0XHRcdFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlci5sb2FkTGFuZ3VhZ2VzKGNvZGVMYW5nLCBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0XHRcdHZhciBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgXHRcdFx0XHRcdGlmIChlbGUpIHtcclxuICBcdFx0XHRcdFx0XHRlbGUuaW5uZXJIVE1MID0gUHJpc20uaGlnaGxpZ2h0KGVsZS50ZXh0Q29udGVudCwgUHJpc20ubGFuZ3VhZ2VzW2NvZGVMYW5nXSwgY29kZUxhbmcpO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHR9KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Ly8gcmV2ZXJzZSBQcmlzbS51dGlsLmVuY29kZVxyXG4gIFx0XHRcdHZhciBjb2RlID0gZW52LmNvbnRlbnQucmVwbGFjZSgvJmx0Oy9nLCAnPCcpLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XHJcblxyXG4gIFx0XHRcdGVudi5jb250ZW50ID0gUHJpc20uaGlnaGxpZ2h0KGNvZGUsIGdyYW1tYXIsIGNvZGVMYW5nKTtcclxuICBcdFx0fVxyXG4gIFx0fSk7XHJcblxyXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLm1kID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duO1xyXG5cclxuICB9KFByaXNtKSk7XHJcblxyXG4gIFByaXNtLmxhbmd1YWdlcy5qdWxpYT0ge1xyXG4gIFx0J2NvbW1lbnQnOiB7XHJcbiAgXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXHJcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWVcclxuICBcdH0sXHJcbiAgXHQnc3RyaW5nJzogLyhcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMi8sXHJcbiAgXHQna2V5d29yZCcgOiAvXFxiKD86YWJzdHJhY3R8YmFyZW1vZHVsZXxiZWdpbnxiaXRzdHlwZXxicmVha3xjYXRjaHxjY2FsbHxjb25zdHxjb250aW51ZXxkb3xlbHNlfGVsc2VpZnxlbmR8ZXhwb3J0fGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGdsb2JhbHxpZnxpbW11dGFibGV8aW1wb3J0fGltcG9ydGFsbHxpbnxsZXR8bG9jYWx8bWFjcm98bW9kdWxlfHByaW50fHByaW50bG58cXVvdGV8cmV0dXJufHN0cnVjdHx0cnl8dHlwZXx0eXBlYWxpYXN8dXNpbmd8d2hpbGUpXFxiLyxcclxuICBcdCdib29sZWFuJyA6IC9cXGIoPzp0cnVlfGZhbHNlKVxcYi8sXHJcbiAgXHQnbnVtYmVyJyA6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib3hdKT8oPzpbXFxkYS1mXStcXC4/XFxkKnxcXC5cXGQrKSg/OltlZnBdWystXT9cXGQrKT9qPy9pLFxyXG4gIFx0J29wZXJhdG9yJzogL1stKypeJcO3JiRcXFxcXT0/fFxcL1tcXC89XT98IT0/PT98XFx8Wz0+XT98PCg/Ojw9P3xbPTpdKT98Pig/Oj18Pj4/PT8pP3w9PT89P3xbfuKJoOKJpOKJpV0vLFxyXG4gIFx0J3B1bmN0dWF0aW9uJyA6IC9be31bXFxdOygpLC46XS8sXHJcbiAgXHQnY29uc3RhbnQnOiAvXFxiKD86KD86TmFOfEluZikoPzoxNnwzMnw2NCk/KVxcYi9cclxuICB9O1xyXG5cclxuICB2YXIgY3NzID0gXCIvKipcXG4gKiBwcmlzbS5qcyBkZWZhdWx0IHRoZW1lIGZvciBKYXZhU2NyaXB0LCBDU1MgYW5kIEhUTUxcXG4gKiBCYXNlZCBvbiBkYWJibGV0IChodHRwOi8vZGFiYmxldC5jb20pXFxuICogQGF1dGhvciBMZWEgVmVyb3VcXG4gKi9cXG5cXG5jb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0sXFxucHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcblxcdGNvbG9yOiBibGFjaztcXG5cXHRiYWNrZ3JvdW5kOiBub25lO1xcblxcdHRleHQtc2hhZG93OiAwIDFweCB3aGl0ZTtcXG5cXHRmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgJ0FuZGFsZSBNb25vJywgJ1VidW50dSBNb25vJywgbW9ub3NwYWNlO1xcblxcdGZvbnQtc2l6ZTogMWVtO1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxuXFx0d2hpdGUtc3BhY2U6IHByZTtcXG5cXHR3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxuXFx0d29yZC13cmFwOiBub3JtYWw7XFxuXFx0bGluZS1oZWlnaHQ6IDEuNTtcXG5cXG5cXHQtbW96LXRhYi1zaXplOiA0O1xcblxcdC1vLXRhYi1zaXplOiA0O1xcblxcdHRhYi1zaXplOiA0O1xcblxcblxcdC13ZWJraXQtaHlwaGVuczogbm9uZTtcXG5cXHQtbW96LWh5cGhlbnM6IG5vbmU7XFxuXFx0LW1zLWh5cGhlbnM6IG5vbmU7XFxuXFx0aHlwaGVuczogbm9uZTtcXG59XFxuXFxucHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06Oi1tb3otc2VsZWN0aW9uLCBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6Oi1tb3otc2VsZWN0aW9uLFxcbmNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6LW1vei1zZWxlY3Rpb24sIGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6Oi1tb3otc2VsZWN0aW9uIHtcXG5cXHR0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHRiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbn1cXG5cXG5wcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6c2VsZWN0aW9uLCBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6OnNlbGVjdGlvbixcXG5jb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06OnNlbGVjdGlvbiwgY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6c2VsZWN0aW9uIHtcXG5cXHR0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHRiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbn1cXG5cXG5AbWVkaWEgcHJpbnQge1xcblxcdGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXG5cXHRwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0XFx0dGV4dC1zaGFkb3c6IG5vbmU7XFxuXFx0fVxcbn1cXG5cXG4vKiBDb2RlIGJsb2NrcyAqL1xcbnByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXG5cXHRwYWRkaW5nOiAxZW07XFxuXFx0bWFyZ2luOiAuNWVtIDA7XFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxufVxcblxcbjpub3QocHJlKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXG5wcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0YmFja2dyb3VuZDogI2Y1ZjJmMDtcXG59XFxuXFxuLyogSW5saW5lIGNvZGUgKi9cXG46bm90KHByZSkgPiBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcblxcdHBhZGRpbmc6IC4xZW07XFxuXFx0Ym9yZGVyLXJhZGl1czogLjNlbTtcXG5cXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG5cXG4udG9rZW4uY29tbWVudCxcXG4udG9rZW4ucHJvbG9nLFxcbi50b2tlbi5kb2N0eXBlLFxcbi50b2tlbi5jZGF0YSB7XFxuXFx0Y29sb3I6IHNsYXRlZ3JheTtcXG59XFxuXFxuLnRva2VuLnB1bmN0dWF0aW9uIHtcXG5cXHRjb2xvcjogIzk5OTtcXG59XFxuXFxuLnRva2VuLm5hbWVzcGFjZSB7XFxuXFx0b3BhY2l0eTogLjc7XFxufVxcblxcbi50b2tlbi5wcm9wZXJ0eSxcXG4udG9rZW4udGFnLFxcbi50b2tlbi5ib29sZWFuLFxcbi50b2tlbi5udW1iZXIsXFxuLnRva2VuLmNvbnN0YW50LFxcbi50b2tlbi5zeW1ib2wsXFxuLnRva2VuLmRlbGV0ZWQge1xcblxcdGNvbG9yOiAjOTA1O1xcbn1cXG5cXG4udG9rZW4uc2VsZWN0b3IsXFxuLnRva2VuLmF0dHItbmFtZSxcXG4udG9rZW4uc3RyaW5nLFxcbi50b2tlbi5jaGFyLFxcbi50b2tlbi5idWlsdGluLFxcbi50b2tlbi5pbnNlcnRlZCB7XFxuXFx0Y29sb3I6ICM2OTA7XFxufVxcblxcbi50b2tlbi5vcGVyYXRvcixcXG4udG9rZW4uZW50aXR5LFxcbi50b2tlbi51cmwsXFxuLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLFxcbi5zdHlsZSAudG9rZW4uc3RyaW5nIHtcXG5cXHRjb2xvcjogIzlhNmUzYTtcXG5cXHRiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCAxMDAlLCAuNSk7XFxufVxcblxcbi50b2tlbi5hdHJ1bGUsXFxuLnRva2VuLmF0dHItdmFsdWUsXFxuLnRva2VuLmtleXdvcmQge1xcblxcdGNvbG9yOiAjMDdhO1xcbn1cXG5cXG4udG9rZW4uZnVuY3Rpb24sXFxuLnRva2VuLmNsYXNzLW5hbWUge1xcblxcdGNvbG9yOiAjREQ0QTY4O1xcbn1cXG5cXG4udG9rZW4ucmVnZXgsXFxuLnRva2VuLmltcG9ydGFudCxcXG4udG9rZW4udmFyaWFibGUge1xcblxcdGNvbG9yOiAjZTkwO1xcbn1cXG5cXG4udG9rZW4uaW1wb3J0YW50LFxcbi50b2tlbi5ib2xkIHtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnRva2VuLml0YWxpYyB7XFxuXFx0Zm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG5cXG4udG9rZW4uZW50aXR5IHtcXG5cXHRjdXJzb3I6IGhlbHA7XFxufVxcblwiO1xyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkNCA9IFRlbXBsYXRlKCdkLWNvZGUnLCBgXHJcbjxzdHlsZT5cclxuXHJcbmNvZGUge1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICBib3JkZXItcmFkaXVzOiAycHg7XHJcbiAgcGFkZGluZzogNHB4IDdweDtcclxuICBmb250LXNpemU6IDE1cHg7XHJcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcclxufVxyXG5cclxucHJlIGNvZGUge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAuMSk7XHJcbiAgcGFkZGluZzogMCAwIDAgMzZweDtcclxufVxyXG5cclxuJHtjc3N9XHJcbjwvc3R5bGU+XHJcblxyXG48Y29kZSBpZD1cImNvZGUtY29udGFpbmVyXCI+PC9jb2RlPlxyXG5cclxuYCk7XHJcblxyXG4gIGNsYXNzIENvZGUgZXh0ZW5kcyBNdXRhdGluZyhUJDQoSFRNTEVsZW1lbnQpKSB7XHJcblxyXG4gICAgcmVuZGVyQ29udGVudCgpIHtcclxuXHJcbiAgICAgIC8vIGNoZWNrIGlmIGxhbmd1YWdlIGNhbiBiZSBoaWdobGlnaHRlZFxyXG4gICAgICB0aGlzLmxhbmd1YWdlTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCdsYW5ndWFnZScpO1xyXG4gICAgICBpZiAoIXRoaXMubGFuZ3VhZ2VOYW1lKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdZb3UgbmVlZCB0byBwcm92aWRlIGEgbGFuZ3VhZ2UgYXR0cmlidXRlIHRvIHlvdXIgPGQtY29kZT4gYmxvY2sgdG8gbGV0IHVzIGtub3cgaG93IHRvIGhpZ2hsaWdodCB5b3VyIGNvZGU7IGUuZy46XFxuIDxkLWNvZGUgbGFuZ3VhZ2U9XCJweXRob25cIj56ZXJvcyA9IG5wLnplcm9zKHNoYXBlKTwvZC1jb2RlPi4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBwcmlzbS5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZU5hbWVdO1xyXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBEaXN0aWxsIGRvZXMgbm90IHlldCBzdXBwb3J0IGhpZ2hsaWdodGluZyB5b3VyIGNvZGUgYmxvY2sgaW4gXCIke3RoaXMubGFuZ3VhZ2VOYW1lfScuYCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY29udGVudCA9IHRoaXMudGV4dENvbnRlbnQ7XHJcbiAgICAgIGNvbnN0IGNvZGVUYWcgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI2NvZGUtY29udGFpbmVyJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoJ2Jsb2NrJykpIHtcclxuICAgICAgICAvLyBub3JtYWxpemUgdGhlIHRhYiBpbmRlbnRzXHJcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvXFxuLywgJycpO1xyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZW50Lm1hdGNoKC9cXHMqLyk7XHJcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXG4nICsgdGFicywgJ2cnKSwgJ1xcbicpO1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnRyaW0oKTtcclxuICAgICAgICAvLyB3cmFwIGNvZGUgYmxvY2sgaW4gcHJlIHRhZyBpZiBuZWVkZWRcclxuICAgICAgICBpZiAoY29kZVRhZy5wYXJlbnROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xyXG4gICAgICAgICAgY29uc3QgcHJlVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XHJcbiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucmVtb3ZlQ2hpbGQoY29kZVRhZyk7XHJcbiAgICAgICAgICBwcmVUYWcuYXBwZW5kQ2hpbGQoY29kZVRhZyk7XHJcbiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocHJlVGFnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2RlVGFnLmNsYXNzTmFtZSA9IGBsYW5ndWFnZS0ke3RoaXMubGFuZ3VhZ2VOYW1lfWA7XHJcbiAgICAgIGNvZGVUYWcuaW5uZXJIVE1MID0gcHJpc20uaGlnaGxpZ2h0KGNvbnRlbnQsIGxhbmd1YWdlKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkNSA9IFRlbXBsYXRlKCdkLWZvb3Rub3RlJywgYFxyXG48c3R5bGU+XHJcblxyXG5kLW1hdGhbYmxvY2tdIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxufVxyXG5cclxuOmhvc3Qge1xyXG5cclxufVxyXG5cclxuc3VwIHtcclxuICBsaW5lLWhlaWdodDogMWVtO1xyXG4gIGZvbnQtc2l6ZTogMC43NWVtO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB0b3A6IC0uNWVtO1xyXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcclxufVxyXG5cclxuc3BhbiB7XHJcbiAgY29sb3I6IGhzbGEoMjA2LCA5MCUsIDIwJSwgMC43KTtcclxuICBjdXJzb3I6IGRlZmF1bHQ7XHJcbn1cclxuXHJcbi5mb290bm90ZS1jb250YWluZXIge1xyXG4gIHBhZGRpbmc6IDEwcHg7XHJcbn1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG48ZC1ob3Zlci1ib3g+XHJcbiAgPGRpdiBjbGFzcz1cImZvb3Rub3RlLWNvbnRhaW5lclwiPlxyXG4gICAgPHNsb3QgaWQ9XCJzbG90XCI+PC9zbG90PlxyXG4gIDwvZGl2PlxyXG48L2QtaG92ZXItYm94PlxyXG5cclxuPHN1cD5cclxuICA8c3BhbiBpZD1cImZuLVwiIGRhdGEtaG92ZXItcmVmPVwiXCI+PC9zcGFuPlxyXG48L3N1cD5cclxuXHJcbmApO1xyXG5cclxuICBjbGFzcyBGb290bm90ZSBleHRlbmRzIFQkNShIVE1MRWxlbWVudCkge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWV9O1xyXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMubm90aWZ5KTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBub3RpZnkoKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGRldGFpbDogdGhpcywgYnViYmxlczogdHJ1ZSB9O1xyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25Gb290bm90ZUNoYW5nZWQnLCBvcHRpb25zKTtcclxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgIC8vIGxpc3RlbiBhbmQgbm90aWZ5IGFib3V0IGNoYW5nZXMgdG8gc2xvdHRlZCBjb250ZW50XHJcbiAgICAgIC8vIGNvbnN0IHNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3Nsb3QnKTtcclxuICAgICAgLy8gY29uc29sZS53YXJuKHNsb3QudGV4dENvbnRlbnQpO1xyXG4gICAgICAvLyBzbG90LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLm5vdGlmeSk7XHJcbiAgICAgIHRoaXMuaG92ZXJCb3ggPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignZC1ob3Zlci1ib3gnKTtcclxuICAgICAgd2luZG93LmN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKCdkLWhvdmVyLWJveCcpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaG92ZXJCb3gubGlzdGVuKHRoaXMpO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gY3JlYXRlIG51bWVyaWMgSURcclxuICAgICAgRm9vdG5vdGUuY3VycmVudEZvb3Rub3RlSWQgKz0gMTtcclxuICAgICAgY29uc3QgSWRTdHJpbmcgPSBGb290bm90ZS5jdXJyZW50Rm9vdG5vdGVJZC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLnJvb3QuaG9zdC5pZCA9ICdkLWZvb3Rub3RlLScgKyBJZFN0cmluZztcclxuXHJcbiAgICAgIC8vIHNldCB1cCBoaWRkZW4gaG92ZXIgYm94XHJcbiAgICAgIGNvbnN0IGlkID0gJ2R0LWZuLWhvdmVyLWJveC0nICsgSWRTdHJpbmc7XHJcbiAgICAgIHRoaXMuaG92ZXJCb3guaWQgPSBpZDtcclxuXHJcbiAgICAgIC8vIHNldCB1cCB2aXNpYmxlIGZvb3Rub3RlIG1hcmtlclxyXG4gICAgICBjb25zdCBzcGFuID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJyNmbi0nKTtcclxuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2ZuLScgKyBJZFN0cmluZyk7XHJcbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLWhvdmVyLXJlZicsIGlkKTtcclxuICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IElkU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIEZvb3Rub3RlLmN1cnJlbnRGb290bm90ZUlkID0gMDtcclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjb25zdCBUJDYgPSBUZW1wbGF0ZSgnZC1mb290bm90ZS1saXN0JywgYFxyXG48c3R5bGU+XHJcblxyXG5kLWZvb3Rub3RlLWxpc3Qge1xyXG4gIGNvbnRhaW46IGxheW91dCBzdHlsZTtcclxufVxyXG5cclxuZC1mb290bm90ZS1saXN0ID4gKiB7XHJcbiAgZ3JpZC1jb2x1bW46IHRleHQ7XHJcbn1cclxuXHJcbmQtZm9vdG5vdGUtbGlzdCBhLmZvb3Rub3RlLWJhY2tsaW5rIHtcclxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjMpO1xyXG4gIHBhZGRpbmctbGVmdDogMC41ZW07XHJcbn1cclxuXHJcbjwvc3R5bGU+XHJcblxyXG48aDM+Rm9vdG5vdGVzPC9oMz5cclxuPG9sPjwvb2w+XHJcbmAsIGZhbHNlKTtcclxuXHJcbiAgY2xhc3MgRm9vdG5vdGVMaXN0IGV4dGVuZHMgVCQ2KEhUTUxFbGVtZW50KSB7XHJcblxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblxyXG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3Rvcignb2wnKTtcclxuICAgICAgLy8gZm9vdG5vdGVzIGxpc3QgaXMgaW5pdGlhbGx5IGhpZGRlblxyXG4gICAgICB0aGlzLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgLy8gbG9vayB0aHJvdWdoIGRvY3VtZW50IGFuZCByZWdpc3RlciBleGlzdGluZyBmb290bm90ZXNcclxuICAgICAgLy8gU3RvcmUuc3Vic2NyaWJlVG8oJ2Zvb3Rub3RlcycsIChmb290bm90ZSkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMucmVuZGVyRm9vdG5vdGUoZm9vdG5vdGUpO1xyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGFjY2VwdCBpbmRpdmlkdWFsIGZvb3Rub3Rlcz9cclxuICAgIHNldCBmb290bm90ZXMoZm9vdG5vdGVzKSB7XHJcbiAgICAgIHRoaXMubGlzdC5pbm5lckhUTUwgPSAnJztcclxuICAgICAgaWYgKGZvb3Rub3Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBlbnN1cmUgZm9vdG5vdGUgbGlzdCBpcyB2aXNpYmxlXHJcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmb290bm90ZSBvZiBmb290bm90ZXMpIHtcclxuICAgICAgICAgIC8vIGNvbnN0cnVjdCBhbmQgYXBwZW5kIGxpc3QgaXRlbSB0byBzaG93IGZvb3Rub3RlXHJcbiAgICAgICAgICBjb25zdCBsaXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XHJcbiAgICAgICAgICBsaXN0SXRlbS5pZCA9IGZvb3Rub3RlLmlkICsgJy1saXN0aW5nJztcclxuICAgICAgICAgIGxpc3RJdGVtLmlubmVySFRNTCA9IGZvb3Rub3RlLmlubmVySFRNTDtcclxuXHJcbiAgICAgICAgICBjb25zdCBiYWNrbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIGJhY2tsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnZm9vdG5vdGUtYmFja2xpbmsnKTtcclxuICAgICAgICAgIGJhY2tsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19zZWxmJyk7XHJcbiAgICAgICAgICBiYWNrbGluay50ZXh0Q29udGVudCA9ICdb4oapXSc7XHJcbiAgICAgICAgICBiYWNrbGluay5ocmVmID0gJyMnICsgZm9vdG5vdGUuaWQ7XHJcblxyXG4gICAgICAgICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoYmFja2xpbmspO1xyXG4gICAgICAgICAgdGhpcy5saXN0LmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZW5zdXJlIGZvb3Rub3RlIGxpc3QgaXMgaW52aXNpYmxlXHJcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkNyA9IFRlbXBsYXRlKCdkLWhvdmVyLWJveCcsIGBcclxuPHN0eWxlPlxyXG5cclxuOmhvc3Qge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB3aWR0aDogMTAwJTtcclxuICBsZWZ0OiAwcHg7XHJcbiAgei1pbmRleDogMTAwMDA7XHJcbiAgZGlzcGxheTogbm9uZTtcclxuICB3aGl0ZS1zcGFjZTogbm9ybWFsXHJcbn1cclxuXHJcbi5jb250YWluZXIge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB3aWR0aDogNzA0cHg7XHJcbiAgbWF4LXdpZHRoOiAxMDB2dztcclxuICBtYXJnaW46IDAgYXV0bztcclxufVxyXG5cclxuLnBhbmVsIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgZm9udC1zaXplOiAxcmVtO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjVlbTtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjk1KTtcclxuICBib3gtc2hhZG93OiAwIDAgN3B4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHJcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7XHJcbiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTtcclxufVxyXG5cclxuPC9zdHlsZT5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWxcIj5cclxuICAgIDxzbG90Pjwvc2xvdD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbmApO1xyXG5cclxuICBjbGFzcyBIb3ZlckJveCBleHRlbmRzIFQkNyhIVE1MRWxlbWVudCkge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW4oZWxlbWVudCkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhlbGVtZW50KVxyXG4gICAgICB0aGlzLmJpbmREaXZFdmVudHModGhpcyk7XHJcbiAgICAgIHRoaXMuYmluZFRyaWdnZXJFdmVudHMoZWxlbWVudCk7XHJcbiAgICAgIC8vIHRoaXMuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kRGl2RXZlbnRzKGVsZW1lbnQpIHtcclxuICAgICAgLy8gRm9yIG1pY2UsIHNhbWUgYmVoYXZpb3IgYXMgaG92ZXJpbmcgb24gbGlua3NcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHRoaXMuc2hvd0F0Tm9kZShlbGVtZW50KTtcclxuICAgICAgICB0aGlzLnN0b3BUaW1lb3V0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZXh0ZW5kVGltZW91dCg1MDApO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gRG9uJ3QgdHJpZ2dlciBib2R5IHRvdWNoc3RhcnQgZXZlbnQgd2hlbiB0b3VjaGluZyB3aXRoaW4gYm94XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9LCB7cGFzc2l2ZTogdHJ1ZX0pO1xyXG4gICAgICAvLyBDbG9zZSBib3ggd2hlbiB0b3VjaGluZyBvdXRzaWRlIGJveFxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgIH0sIHtwYXNzaXZlOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZFRyaWdnZXJFdmVudHMobm9kZSkge1xyXG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXROb2RlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3BUaW1lb3V0KCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLmV4dGVuZFRpbWVvdXQoMzAwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXROb2RlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEb24ndCB0cmlnZ2VyIGJvZHkgdG91Y2hzdGFydCBldmVudCB3aGVuIHRvdWNoaW5nIGxpbmtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfSwge3Bhc3NpdmU6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93KHBvc2l0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgIC8vIDEwcHggZXh0cmEgb2Zmc2V0IGZyb20gZWxlbWVudFxyXG4gICAgICB0aGlzLnN0eWxlLnRvcCA9IE1hdGgucm91bmQocG9zaXRpb25bMV0gKyAxMCkgKyAncHgnO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBdE5vZGUobm9kZSkge1xyXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvb2Zmc2V0VG9wXHJcbiAgICAgIGNvbnN0IGJib3ggPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICB0aGlzLnNob3coW25vZGUub2Zmc2V0TGVmdCArIGJib3gud2lkdGgsIG5vZGUub2Zmc2V0VG9wICsgYmJveC5oZWlnaHRdKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlKCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lb3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFRpbWVvdXQoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVuZFRpbWVvdXQodGltZSkge1xyXG4gICAgICB0aGlzLnN0b3BUaW1lb3V0KCk7XHJcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9LCB0aW1lKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcbiAgLy9cclxuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICAvL1xyXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAgLy9cclxuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuXHJcbiAgY2xhc3MgVGl0bGUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2QtdGl0bGUnOyB9XHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkOCA9IFRlbXBsYXRlKCdkLXJlZmVyZW5jZXMnLCBgXHJcbjxzdHlsZT5cclxuZC1yZWZlcmVuY2VzIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxufVxyXG48L3N0eWxlPlxyXG5gLCBmYWxzZSk7XHJcblxyXG4gIGNsYXNzIFJlZmVyZW5jZXMgZXh0ZW5kcyBUJDgoSFRNTEVsZW1lbnQpIHtcclxuXHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcbiAgLy9cclxuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICAvL1xyXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAgLy9cclxuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuXHJcbiAgY2xhc3MgVE9DIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC10b2MnOyB9XHJcblxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ3ByZXJlbmRlcmVkJykpIHtcclxuICAgICAgICB3aW5kb3cub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYXJ0aWNsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2QtYXJ0aWNsZScpO1xyXG4gICAgICAgICAgY29uc3QgaGVhZGluZ3MgPSBhcnRpY2xlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2gyLCBoMycpO1xyXG4gICAgICAgICAgcmVuZGVyVE9DKHRoaXMsIGhlYWRpbmdzKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVuZGVyVE9DKGVsZW1lbnQsIGhlYWRpbmdzKSB7XHJcblxyXG4gICAgbGV0IFRvQyA9YFxyXG4gIDxzdHlsZT5cclxuXHJcbiAgZC10b2Mge1xyXG4gICAgY29udGFpbjogbGF5b3V0IHN0eWxlO1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgfVxyXG5cclxuICBkLXRvYyB1bCB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgfVxyXG5cclxuICBkLXRvYyB1bCA+IHVsIHtcclxuICAgIHBhZGRpbmctbGVmdDogMjRweDtcclxuICB9XHJcblxyXG4gIGQtdG9jIGEge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICB9XHJcblxyXG4gIDwvc3R5bGU+XHJcbiAgPG5hdiByb2xlPVwibmF2aWdhdGlvblwiIGNsYXNzPVwidGFibGUtb2YtY29udGVudHNcIj48L25hdj5cclxuICA8aDI+VGFibGUgb2YgY29udGVudHM8L2gyPlxyXG4gIDx1bD5gO1xyXG5cclxuICAgIGZvciAoY29uc3QgZWwgb2YgaGVhZGluZ3MpIHtcclxuICAgICAgLy8gc2hvdWxkIGVsZW1lbnQgYmUgaW5jbHVkZWQgaW4gVE9DP1xyXG4gICAgICBjb25zdCBpc0luVGl0bGUgPSBlbC5wYXJlbnRFbGVtZW50LnRhZ05hbWUgPT0gJ0QtVElUTEUnO1xyXG4gICAgICBjb25zdCBpc0V4Y2VwdGlvbiA9IGVsLmdldEF0dHJpYnV0ZSgnbm8tdG9jJyk7XHJcbiAgICAgIGlmIChpc0luVGl0bGUgfHwgaXNFeGNlcHRpb24pIGNvbnRpbnVlO1xyXG4gICAgICAvLyBjcmVhdGUgVE9DIGVudHJ5XHJcbiAgICAgIGNvbnN0IHRpdGxlID0gZWwudGV4dENvbnRlbnQ7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSAnIycgKyBlbC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XHJcblxyXG4gICAgICBsZXQgbmV3TGluZSA9ICc8bGk+JyArICc8YSBocmVmPVwiJyArIGxpbmsgKyAnXCI+JyArIHRpdGxlICsgJzwvYT4nICsgJzwvbGk+JztcclxuICAgICAgaWYgKGVsLnRhZ05hbWUgPT0gJ0gzJykge1xyXG4gICAgICAgIG5ld0xpbmUgPSAnPHVsPicgKyBuZXdMaW5lICsgJzwvdWw+JztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdMaW5lICs9ICc8YnI+JztcclxuICAgICAgfVxyXG4gICAgICBUb0MgKz0gbmV3TGluZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgVG9DICs9ICc8L3VsPjwvbmF2Pic7XHJcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IFRvQztcclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuICAvL1xyXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gIC8vXHJcbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICAvL1xyXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG5cclxuICAvLyBGaWd1cmVcclxuICAvL1xyXG4gIC8vIGQtZmlndXJlIHByb3ZpZGVzIGEgc3RhdGUtbWFjaGluZSBvZiB2aXNpYmlsaXR5IGV2ZW50czpcclxuICAvL1xyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbCBvdXQgb2Ygdmlld1xyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tK1xyXG4gIC8vICAgKmRvIHdvcmsgaGVyZSogICAgICAgIHwgICAgICAgICAgICAgICAgfFxyXG4gIC8vICstLS0tLS0tLS0tLS0tLS0tKyAgICArLSstLS0tLS0tLS0rICAgICstdi0tLS0tLS0tLStcclxuICAvLyB8IHJlYWR5ICAgICAgICAgICstLS0tPiBvbnNjcmVlbiAgfCAgICB8IG9mZnNjcmVlbiB8XHJcbiAgLy8gKy0tLS0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS1eLSsgICAgKy0tLS0tLS0tLSstK1xyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLStcclxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGwgaW50byB2aWV3XHJcbiAgLy9cclxuXHJcbiAgY2xhc3MgRmlndXJlIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC1maWd1cmUnOyB9XHJcblxyXG4gICAgc3RhdGljIGdldCByZWFkeVF1ZXVlKCkge1xyXG4gICAgICBpZiAoIUZpZ3VyZS5fcmVhZHlRdWV1ZSkge1xyXG4gICAgICAgIEZpZ3VyZS5fcmVhZHlRdWV1ZSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBGaWd1cmUuX3JlYWR5UXVldWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFkZFRvUmVhZHlRdWV1ZShmaWd1cmUpIHtcclxuICAgICAgaWYgKEZpZ3VyZS5yZWFkeVF1ZXVlLmluZGV4T2YoZmlndXJlKSA9PT0gLTEpIHtcclxuICAgICAgICBGaWd1cmUucmVhZHlRdWV1ZS5wdXNoKGZpZ3VyZSk7XHJcbiAgICAgICAgRmlndXJlLnJ1blJlYWR5UXVldWUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBydW5SZWFkeVF1ZXVlKCkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIkNoZWNraW5nIHRvIHJ1biByZWFkeVF1ZXVlLCBsZW5ndGg6IFwiICsgRmlndXJlLnJlYWR5UXVldWUubGVuZ3RoICsgXCIsIHNjcm9sbGluZzogXCIgKyBGaWd1cmUuaXNTY3JvbGxpbmcpO1xyXG4gICAgICAvLyBpZiAoRmlndXJlLmlzU2Nyb2xsaW5nKSByZXR1cm47XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUnVubmluZyByZWFkeSBRdWV1ZVwiKTtcclxuICAgICAgY29uc3QgZmlndXJlID0gRmlndXJlLnJlYWR5UXVldWVcclxuICAgICAgICAuc29ydCgoYSxiKSA9PiBhLl9zZWVuT25TY3JlZW4gLSBiLl9zZWVuT25TY3JlZW4gKVxyXG4gICAgICAgIC5maWx0ZXIoKGZpZ3VyZSkgPT4gIWZpZ3VyZS5fcmVhZHkpXHJcbiAgICAgICAgLnBvcCgpO1xyXG4gICAgICBpZiAoZmlndXJlKSB7XHJcbiAgICAgICAgZmlndXJlLnJlYWR5KCk7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKEZpZ3VyZS5ydW5SZWFkeVF1ZXVlKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgc3VwZXIoKTtcclxuICAgICAgLy8gZGVidWdnZXJcclxuICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fb25zY3JlZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5fb2Zmc2NyZWVuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgdGhpcy5sb2Fkc1doaWxlU2Nyb2xsaW5nID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2xvYWRzV2hpbGVTY3JvbGxpbmcnKTtcclxuICAgICAgRmlndXJlLm1hcmdpbk9ic2VydmVyLm9ic2VydmUodGhpcyk7XHJcbiAgICAgIEZpZ3VyZS5kaXJlY3RPYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICBGaWd1cmUubWFyZ2luT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMpO1xyXG4gICAgICBGaWd1cmUuZGlyZWN0T2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdlIHVzZSB0d28gc2VwYXJhdGUgb2JzZXJ2ZXJzOlxyXG4gICAgLy8gT25lIHdpdGggYW4gZXh0cmEgMTAwMHB4IG1hcmdpbiB0byB3YXJuIGlmIHRoZSB2aWV3cG9pbnQgZ2V0cyBjbG9zZSxcclxuICAgIC8vIEFuZCBvbmUgZm9yIHRoZSBhY3R1YWwgb24vb2ZmIHNjcmVlbiBldmVudHNcclxuXHJcbiAgICBzdGF0aWMgZ2V0IG1hcmdpbk9ic2VydmVyKCkge1xyXG4gICAgICBpZiAoIUZpZ3VyZS5fbWFyZ2luT2JzZXJ2ZXIpIHtcclxuICAgICAgICAvLyBpZiAoISgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHtcclxuICAgICAgICAvLyAgIHRocm93IG5ldyBFcnJvcignbm8gaW50ZXJzY2V0aW9ub2Jic2VydmVyIScpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBjb25zdCBtYXJnaW4gPSBNYXRoLmZsb29yKDIgKiB2aWV3cG9ydEhlaWdodCk7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtyb290TWFyZ2luOiBtYXJnaW4gKyAncHggMHB4ICcgKyBtYXJnaW4gKyAncHggMHB4JywgdGhyZXNob2xkOiAwLjAxfTtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IEZpZ3VyZS5kaWRPYnNlcnZlTWFyZ2luSW50ZXJzZWN0aW9uO1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcclxuICAgICAgICBGaWd1cmUuX21hcmdpbk9ic2VydmVyID0gb2JzZXJ2ZXI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIEZpZ3VyZS5fbWFyZ2luT2JzZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRpZE9ic2VydmVNYXJnaW5JbnRlcnNlY3Rpb24oZW50cmllcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcclxuICAgICAgICBjb25zdCBmaWd1cmUgPSBlbnRyeS50YXJnZXQ7XHJcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICFmaWd1cmUuX3JlYWR5KSB7XHJcbiAgICAgICAgICBGaWd1cmUuYWRkVG9SZWFkeVF1ZXVlKGZpZ3VyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBkaXJlY3RPYnNlcnZlcigpIHtcclxuICAgICAgaWYgKCFGaWd1cmUuX2RpcmVjdE9ic2VydmVyKSB7XHJcbiAgICAgICAgRmlndXJlLl9kaXJlY3RPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcclxuICAgICAgICAgIEZpZ3VyZS5kaWRPYnNlcnZlRGlyZWN0SW50ZXJzZWN0aW9uLCB7XHJcbiAgICAgICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLCB0aHJlc2hvbGQ6IFswLCAxLjBdLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIEZpZ3VyZS5fZGlyZWN0T2JzZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRpZE9ic2VydmVEaXJlY3RJbnRlcnNlY3Rpb24oZW50cmllcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcclxuICAgICAgICBjb25zdCBmaWd1cmUgPSBlbnRyeS50YXJnZXQ7XHJcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XHJcbiAgICAgICAgICBmaWd1cmUuX3NlZW5PblNjcmVlbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAvLyBpZiAoIWZpZ3VyZS5fcmVhZHkpIHsgZmlndXJlLnJlYWR5KCk7IH1cclxuICAgICAgICAgIGlmIChmaWd1cmUuX29mZnNjcmVlbikgeyBmaWd1cmUub25zY3JlZW4oKTsgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZmlndXJlLl9vbnNjcmVlbikgeyBmaWd1cmUub2Zmc2NyZWVuKCk7IH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgbGlzdGVuZXJzIHRoYXQgcmVnaXN0ZXJlZCBsYXRlLCB0b286XHJcblxyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICAgIHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjayk7XHJcbiAgICAgIC8vIGlmIHdlIGhhZCBhbHJlYWR5IGRpc3BhdGNoZWQgc29tZXRoaW5nIHdoaWxlIHByZXN1bWluZ2x5IG5vIG9uZSB3YXMgbGlzdGVuaW5nLCB3ZSBkbyBzbyBhZ2FpblxyXG4gICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICBpZiAoZXZlbnROYW1lID09PSAncmVhZHknKSB7XHJcbiAgICAgICAgaWYgKEZpZ3VyZS5yZWFkeVF1ZXVlLmluZGV4T2YodGhpcykgIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLl9yZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgICAgRmlndXJlLnJ1blJlYWR5UXVldWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ29uc2NyZWVuJykge1xyXG4gICAgICAgIHRoaXMub25zY3JlZW4oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEN1c3RvbSBFdmVudHNcclxuXHJcbiAgICByZWFkeSgpIHtcclxuICAgICAgLy8gZGVidWdnZXJcclxuICAgICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xyXG4gICAgICBGaWd1cmUubWFyZ2luT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMpO1xyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVhZHknKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBvbnNjcmVlbigpIHtcclxuICAgICAgdGhpcy5fb25zY3JlZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLl9vZmZzY3JlZW4gPSBmYWxzZTtcclxuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ29uc2NyZWVuJyk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgb2Zmc2NyZWVuKCkge1xyXG4gICAgICB0aGlzLl9vbnNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9vZmZzY3JlZW4gPSB0cnVlO1xyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb2Zmc2NyZWVuJyk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcblxyXG4gICAgRmlndXJlLmlzU2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgdGltZW91dDtcclxuICAgIGNvbnN0IHJlc2V0VGltZXIgPSAoKSA9PiB7XHJcbiAgICAgIEZpZ3VyZS5pc1Njcm9sbGluZyA9IHRydWU7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIEZpZ3VyZS5pc1Njcm9sbGluZyA9IGZhbHNlO1xyXG4gICAgICAgIEZpZ3VyZS5ydW5SZWFkeVF1ZXVlKCk7XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHJlc2V0VGltZXIsIHRydWUpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgLy8gVGhpcyBvdmVybGF5IGlzIG5vdCBzZWN1cmUuXHJcbiAgLy8gSXQgaXMgb25seSBtZWFudCBhcyBhIHNvY2lhbCBkZXRlcnJlbnQuXHJcblxyXG4gIGNvbnN0IHByb2R1Y3Rpb25Ib3N0bmFtZSA9ICdkaXN0aWxsLnB1Yic7XHJcbiAgY29uc3QgVCQ5ID0gVGVtcGxhdGUoJ2QtaW50ZXJzdGl0aWFsJywgYFxyXG48c3R5bGU+XHJcblxyXG4ub3ZlcmxheSB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuXHJcbiAgb3BhY2l0eTogMTtcclxuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG5cclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIHotaW5kZXg6IDIxNDc0ODM2NDcgLyogTWF4SW50MzIgKi9cclxuXHJcbn1cclxuXHJcbi5jb250YWluZXIge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBtYXJnaW4tbGVmdDogYXV0bztcclxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XHJcbiAgbWF4LXdpZHRoOiA0MjBweDtcclxuICBwYWRkaW5nOiAyZW07XHJcbn1cclxuXHJcbmgxIHtcclxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IGhzbCgwLDEwMCUsNDAlKTtcclxuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1jb2xvcjogaHNsKDAsMTAwJSw0MCUpO1xyXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcclxuICBsaW5lLWhlaWdodDogMS41ZW07XHJcbn1cclxuXHJcbmlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSB7XHJcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xyXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcclxuICBhcHBlYXJhbmNlOiBub25lO1xyXG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcclxuICAtbW96LWJveC1zaGFkb3c6IG5vbmU7XHJcbiAgYm94LXNoYWRvdzogbm9uZTtcclxuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IG5vbmU7XHJcbiAgLW1vei1ib3JkZXItcmFkaXVzOiBub25lO1xyXG4gIC1tcy1ib3JkZXItcmFkaXVzOiBub25lO1xyXG4gIC1vLWJvcmRlci1yYWRpdXM6IG5vbmU7XHJcbiAgYm9yZGVyLXJhZGl1czogbm9uZTtcclxuICBvdXRsaW5lOiBub25lO1xyXG5cclxuICBmb250LXNpemU6IDE4cHg7XHJcbiAgYmFja2dyb3VuZDogbm9uZTtcclxuICB3aWR0aDogMjUlO1xyXG4gIHBhZGRpbmc6IDEwcHg7XHJcbiAgYm9yZGVyOiBub25lO1xyXG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDJweCAjOTk5O1xyXG4gIHRyYW5zaXRpb246IGJvcmRlciAuM3M7XHJcbn1cclxuXHJcbmlucHV0W3R5cGU9XCJwYXNzd29yZFwiXTpmb2N1cyB7XHJcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4ICMzMzM7XHJcbn1cclxuXHJcbmlucHV0W3R5cGU9XCJwYXNzd29yZFwiXS53cm9uZyB7XHJcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4IGhzbCgwLDEwMCUsNDAlKTtcclxufVxyXG5cclxucCBzbWFsbCB7XHJcbiAgY29sb3I6ICM4ODg7XHJcbn1cclxuXHJcbi5sb2dvIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZm9udC1zaXplOiAxLjVlbTtcclxuICBtYXJnaW4tYm90dG9tOiAzZW07XHJcbn1cclxuXHJcbi5sb2dvIHN2ZyB7XHJcbiAgd2lkdGg6IDM2cHg7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogNnB4O1xyXG4gIG1hcmdpbi1yaWdodDogMnB4O1xyXG59XHJcblxyXG4ubG9nbyBzdmcgcGF0aCB7XHJcbiAgZmlsbDogbm9uZTtcclxuICBzdHJva2U6IGJsYWNrO1xyXG4gIHN0cm9rZS13aWR0aDogMnB4O1xyXG59XHJcblxyXG48L3N0eWxlPlxyXG5cclxuPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8aDE+VGhpcyBhcnRpY2xlIGlzIGluIHJldmlldy48L2gxPlxyXG4gICAgPHA+RG8gbm90IHNoYXJlIHRoaXMgVVJMIG9yIHRoZSBjb250ZW50cyBvZiB0aGlzIGFydGljbGUuIFRoYW5rIHlvdSE8L3A+XHJcbiAgICA8aW5wdXQgaWQ9XCJpbnRlcnN0aXRpYWwtcGFzc3dvcmQtaW5wdXRcIiB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwicGFzc3dvcmRcIiBhdXRvZm9jdXMvPlxyXG4gICAgPHA+PHNtYWxsPkVudGVyIHRoZSBwYXNzd29yZCB3ZSBzaGFyZWQgd2l0aCB5b3UgYXMgcGFydCBvZiB0aGUgcmV2aWV3IHByb2Nlc3MgdG8gdmlldyB0aGUgYXJ0aWNsZS48L3NtYWxsPjwvcD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbmApO1xyXG5cclxuICBjbGFzcyBJbnRlcnN0aXRpYWwgZXh0ZW5kcyBUJDkoSFRNTEVsZW1lbnQpIHtcclxuXHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgaWYgKHRoaXMuc2hvdWxkUmVtb3ZlU2VsZigpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBhc3N3b3JkSW5wdXQgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI2ludGVyc3RpdGlhbC1wYXNzd29yZC1pbnB1dCcpO1xyXG4gICAgICAgIHBhc3N3b3JkSW5wdXQub25pbnB1dCA9IChldmVudCkgPT4gdGhpcy5wYXNzd29yZENoYW5nZWQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcGFzc3dvcmRDaGFuZ2VkKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IGVudGVyZWQgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgIGlmIChlbnRlcmVkID09PSB0aGlzLnBhc3N3b3JkKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NvcnJlY3QgcGFzc3dvcmQgZW50ZXJlZC4nKTtcclxuICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihTdG9yYWdlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdTYXZlZCB0aGF0IGNvcnJlY3QgcGFzc3dvcmQgd2FzIGVudGVyZWQuJyk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUlkZW50aWZpZXIoKSwgJ3RydWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRSZW1vdmVTZWxmKCkge1xyXG4gICAgICAvLyBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBpbiBwcm9kdWN0aW9uXHJcbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBwcm9kdWN0aW9uSG9zdG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0ludGVyc3RpdGlhbCBmb3VuZCBvbiBwcm9kdWN0aW9uLCBoaWRpbmcgaXQuJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgICAvLyBzaG91bGQgb25seSBoYXZlIHRvIGVudGVyIHBhc3N3b3JkIG9uY2VcclxuICAgICAgaWYgKHR5cGVvZihTdG9yYWdlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VJZGVudGlmaWVyKCkpID09PSAndHJ1ZScpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdMb2FkZWQgdGhhdCBjb3JyZWN0IHBhc3N3b3JkIHdhcyBlbnRlcmVkIGJlZm9yZTsgc2tpcHBpbmcgaW50ZXJzdGl0aWFsLicpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIG90aGVyd2lzZSwgbGVhdmUgdmlzaWJsZVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbG9jYWxTdG9yYWdlSWRlbnRpZmllcigpIHtcclxuICAgICAgY29uc3QgcHJlZml4ID0gJ2Rpc3RpbGwtZHJhZnRzJztcclxuICAgICAgY29uc3Qgc3VmZml4ID0gJ2ludGVyc3RpdGlhbC1wYXNzd29yZC1jb3JyZWN0JztcclxuICAgICAgcmV0dXJuIHByZWZpeCArICh3aW5kb3cgPyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgOiAnLScpICsgc3VmZml4XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcclxuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGJpc2VjdG9yKGNvbXBhcmUpIHtcclxuICAgIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsZWZ0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcclxuICAgICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xyXG4gICAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChsbyA8IGhpKSB7XHJcbiAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcclxuICAgICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7XHJcbiAgICAgICAgICBlbHNlIGhpID0gbWlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbG87XHJcbiAgICAgIH0sXHJcbiAgICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcclxuICAgICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xyXG4gICAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChsbyA8IGhpKSB7XHJcbiAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcclxuICAgICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcclxuICAgICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbG87XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XHJcbiAgICAgIHJldHVybiBhc2NlbmRpbmcoZihkKSwgeCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XHJcbiAgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xyXG5cclxuICBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xyXG4gICAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xyXG5cclxuICAgIHZhciBpID0gLTEsXHJcbiAgICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXHJcbiAgICAgICAgcmFuZ2UgPSBuZXcgQXJyYXkobik7XHJcblxyXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcclxuICAgICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYW5nZTtcclxuICB9XHJcblxyXG4gIHZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxyXG4gICAgICBlNSA9IE1hdGguc3FydCgxMCksXHJcbiAgICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xyXG5cclxuICBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcclxuICAgIHZhciByZXZlcnNlLFxyXG4gICAgICAgIGkgPSAtMSxcclxuICAgICAgICBuLFxyXG4gICAgICAgIHRpY2tzLFxyXG4gICAgICAgIHN0ZXA7XHJcblxyXG4gICAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XHJcbiAgICBpZiAoc3RhcnQgPT09IHN0b3AgJiYgY291bnQgPiAwKSByZXR1cm4gW3N0YXJ0XTtcclxuICAgIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XHJcbiAgICBpZiAoKHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkpID09PSAwIHx8ICFpc0Zpbml0ZShzdGVwKSkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGlmIChzdGVwID4gMCkge1xyXG4gICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAvIHN0ZXApO1xyXG4gICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XHJcbiAgICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RvcCAtIHN0YXJ0ICsgMSkpO1xyXG4gICAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAoc3RhcnQgKyBpKSAqIHN0ZXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgKiBzdGVwKTtcclxuICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wICogc3RlcCk7XHJcbiAgICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xyXG4gICAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAoc3RhcnQgLSBpKSAvIHN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJldmVyc2UpIHRpY2tzLnJldmVyc2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGlja3M7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xyXG4gICAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcclxuICAgICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcCkgLyBNYXRoLkxOMTApLFxyXG4gICAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlcik7XHJcbiAgICByZXR1cm4gcG93ZXIgPj0gMFxyXG4gICAgICAgID8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSkgKiBNYXRoLnBvdygxMCwgcG93ZXIpXHJcbiAgICAgICAgOiAtTWF0aC5wb3coMTAsIC1wb3dlcikgLyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xyXG4gICAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcclxuICAgICAgICBzdGVwMSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXAwKSAvIE1hdGguTE4xMCkpLFxyXG4gICAgICAgIGVycm9yID0gc3RlcDAgLyBzdGVwMTtcclxuICAgIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xyXG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTUpIHN0ZXAxICo9IDU7XHJcbiAgICBlbHNlIGlmIChlcnJvciA+PSBlMikgc3RlcDEgKj0gMjtcclxuICAgIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XHJcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgY2FzZSAwOiBicmVhaztcclxuICAgICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiB0aGlzLnJhbmdlKHJhbmdlKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlZmluZShjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XHJcbiAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcclxuICAgIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xyXG4gICAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07XHJcbiAgICByZXR1cm4gcHJvdG90eXBlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gQ29sb3IoKSB7fVxyXG5cclxuICB2YXIgZGFya2VyID0gMC43O1xyXG4gIHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XHJcblxyXG4gIHZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcclxuICAgICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcclxuICAgICAgcmVQID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIsXHJcbiAgICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXHJcbiAgICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxyXG4gICAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcclxuICAgICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxyXG4gICAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXHJcbiAgICAgIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxyXG4gICAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XHJcblxyXG4gIHZhciBuYW1lZCA9IHtcclxuICAgIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXHJcbiAgICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxyXG4gICAgYXF1YTogMHgwMGZmZmYsXHJcbiAgICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcclxuICAgIGF6dXJlOiAweGYwZmZmZixcclxuICAgIGJlaWdlOiAweGY1ZjVkYyxcclxuICAgIGJpc3F1ZTogMHhmZmU0YzQsXHJcbiAgICBibGFjazogMHgwMDAwMDAsXHJcbiAgICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXHJcbiAgICBibHVlOiAweDAwMDBmZixcclxuICAgIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxyXG4gICAgYnJvd246IDB4YTUyYTJhLFxyXG4gICAgYnVybHl3b29kOiAweGRlYjg4NyxcclxuICAgIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXHJcbiAgICBjaGFydHJldXNlOiAweDdmZmYwMCxcclxuICAgIGNob2NvbGF0ZTogMHhkMjY5MWUsXHJcbiAgICBjb3JhbDogMHhmZjdmNTAsXHJcbiAgICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXHJcbiAgICBjb3Juc2lsazogMHhmZmY4ZGMsXHJcbiAgICBjcmltc29uOiAweGRjMTQzYyxcclxuICAgIGN5YW46IDB4MDBmZmZmLFxyXG4gICAgZGFya2JsdWU6IDB4MDAwMDhiLFxyXG4gICAgZGFya2N5YW46IDB4MDA4YjhiLFxyXG4gICAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXHJcbiAgICBkYXJrZ3JheTogMHhhOWE5YTksXHJcbiAgICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxyXG4gICAgZGFya2dyZXk6IDB4YTlhOWE5LFxyXG4gICAgZGFya2toYWtpOiAweGJkYjc2YixcclxuICAgIGRhcmttYWdlbnRhOiAweDhiMDA4YixcclxuICAgIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcclxuICAgIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxyXG4gICAgZGFya29yY2hpZDogMHg5OTMyY2MsXHJcbiAgICBkYXJrcmVkOiAweDhiMDAwMCxcclxuICAgIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxyXG4gICAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcclxuICAgIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxyXG4gICAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXHJcbiAgICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcclxuICAgIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxyXG4gICAgZGFya3Zpb2xldDogMHg5NDAwZDMsXHJcbiAgICBkZWVwcGluazogMHhmZjE0OTMsXHJcbiAgICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXHJcbiAgICBkaW1ncmF5OiAweDY5Njk2OSxcclxuICAgIGRpbWdyZXk6IDB4Njk2OTY5LFxyXG4gICAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXHJcbiAgICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxyXG4gICAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxyXG4gICAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxyXG4gICAgZnVjaHNpYTogMHhmZjAwZmYsXHJcbiAgICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxyXG4gICAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXHJcbiAgICBnb2xkOiAweGZmZDcwMCxcclxuICAgIGdvbGRlbnJvZDogMHhkYWE1MjAsXHJcbiAgICBncmF5OiAweDgwODA4MCxcclxuICAgIGdyZWVuOiAweDAwODAwMCxcclxuICAgIGdyZWVueWVsbG93OiAweGFkZmYyZixcclxuICAgIGdyZXk6IDB4ODA4MDgwLFxyXG4gICAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxyXG4gICAgaG90cGluazogMHhmZjY5YjQsXHJcbiAgICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxyXG4gICAgaW5kaWdvOiAweDRiMDA4MixcclxuICAgIGl2b3J5OiAweGZmZmZmMCxcclxuICAgIGtoYWtpOiAweGYwZTY4YyxcclxuICAgIGxhdmVuZGVyOiAweGU2ZTZmYSxcclxuICAgIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxyXG4gICAgbGF3bmdyZWVuOiAweDdjZmMwMCxcclxuICAgIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXHJcbiAgICBsaWdodGJsdWU6IDB4YWRkOGU2LFxyXG4gICAgbGlnaHRjb3JhbDogMHhmMDgwODAsXHJcbiAgICBsaWdodGN5YW46IDB4ZTBmZmZmLFxyXG4gICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxyXG4gICAgbGlnaHRncmF5OiAweGQzZDNkMyxcclxuICAgIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxyXG4gICAgbGlnaHRncmV5OiAweGQzZDNkMyxcclxuICAgIGxpZ2h0cGluazogMHhmZmI2YzEsXHJcbiAgICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXHJcbiAgICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcclxuICAgIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXHJcbiAgICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXHJcbiAgICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXHJcbiAgICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXHJcbiAgICBsaWdodHllbGxvdzogMHhmZmZmZTAsXHJcbiAgICBsaW1lOiAweDAwZmYwMCxcclxuICAgIGxpbWVncmVlbjogMHgzMmNkMzIsXHJcbiAgICBsaW5lbjogMHhmYWYwZTYsXHJcbiAgICBtYWdlbnRhOiAweGZmMDBmZixcclxuICAgIG1hcm9vbjogMHg4MDAwMDAsXHJcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcclxuICAgIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxyXG4gICAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcclxuICAgIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXHJcbiAgICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXHJcbiAgICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxyXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxyXG4gICAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcclxuICAgIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXHJcbiAgICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxyXG4gICAgbWludGNyZWFtOiAweGY1ZmZmYSxcclxuICAgIG1pc3R5cm9zZTogMHhmZmU0ZTEsXHJcbiAgICBtb2NjYXNpbjogMHhmZmU0YjUsXHJcbiAgICBuYXZham93aGl0ZTogMHhmZmRlYWQsXHJcbiAgICBuYXZ5OiAweDAwMDA4MCxcclxuICAgIG9sZGxhY2U6IDB4ZmRmNWU2LFxyXG4gICAgb2xpdmU6IDB4ODA4MDAwLFxyXG4gICAgb2xpdmVkcmFiOiAweDZiOGUyMyxcclxuICAgIG9yYW5nZTogMHhmZmE1MDAsXHJcbiAgICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxyXG4gICAgb3JjaGlkOiAweGRhNzBkNixcclxuICAgIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxyXG4gICAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcclxuICAgIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxyXG4gICAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXHJcbiAgICBwYXBheWF3aGlwOiAweGZmZWZkNSxcclxuICAgIHBlYWNocHVmZjogMHhmZmRhYjksXHJcbiAgICBwZXJ1OiAweGNkODUzZixcclxuICAgIHBpbms6IDB4ZmZjMGNiLFxyXG4gICAgcGx1bTogMHhkZGEwZGQsXHJcbiAgICBwb3dkZXJibHVlOiAweGIwZTBlNixcclxuICAgIHB1cnBsZTogMHg4MDAwODAsXHJcbiAgICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcclxuICAgIHJlZDogMHhmZjAwMDAsXHJcbiAgICByb3N5YnJvd246IDB4YmM4ZjhmLFxyXG4gICAgcm95YWxibHVlOiAweDQxNjllMSxcclxuICAgIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcclxuICAgIHNhbG1vbjogMHhmYTgwNzIsXHJcbiAgICBzYW5keWJyb3duOiAweGY0YTQ2MCxcclxuICAgIHNlYWdyZWVuOiAweDJlOGI1NyxcclxuICAgIHNlYXNoZWxsOiAweGZmZjVlZSxcclxuICAgIHNpZW5uYTogMHhhMDUyMmQsXHJcbiAgICBzaWx2ZXI6IDB4YzBjMGMwLFxyXG4gICAgc2t5Ymx1ZTogMHg4N2NlZWIsXHJcbiAgICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxyXG4gICAgc2xhdGVncmF5OiAweDcwODA5MCxcclxuICAgIHNsYXRlZ3JleTogMHg3MDgwOTAsXHJcbiAgICBzbm93OiAweGZmZmFmYSxcclxuICAgIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcclxuICAgIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXHJcbiAgICB0YW46IDB4ZDJiNDhjLFxyXG4gICAgdGVhbDogMHgwMDgwODAsXHJcbiAgICB0aGlzdGxlOiAweGQ4YmZkOCxcclxuICAgIHRvbWF0bzogMHhmZjYzNDcsXHJcbiAgICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxyXG4gICAgdmlvbGV0OiAweGVlODJlZSxcclxuICAgIHdoZWF0OiAweGY1ZGViMyxcclxuICAgIHdoaXRlOiAweGZmZmZmZixcclxuICAgIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxyXG4gICAgeWVsbG93OiAweGZmZmYwMCxcclxuICAgIHllbGxvd2dyZWVuOiAweDlhY2QzMlxyXG4gIH07XHJcblxyXG4gIGRlZmluZShDb2xvciwgY29sb3IsIHtcclxuICAgIGNvcHk6IGZ1bmN0aW9uKGNoYW5uZWxzKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XHJcbiAgICB9LFxyXG4gICAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xyXG4gICAgfSxcclxuICAgIGhleDogY29sb3JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxyXG4gICAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXHJcbiAgICBmb3JtYXRIc2w6IGNvbG9yX2Zvcm1hdEhzbCxcclxuICAgIGZvcm1hdFJnYjogY29sb3JfZm9ybWF0UmdiLFxyXG4gICAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiBjb2xvcl9mb3JtYXRIZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcclxuICAgIHJldHVybiBoc2xDb252ZXJ0KHRoaXMpLmZvcm1hdEhzbCgpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcclxuICAgIHZhciBtLCBsO1xyXG4gICAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIChtID0gcmVIZXguZXhlYyhmb3JtYXQpKSA/IChsID0gbVsxXS5sZW5ndGgsIG0gPSBwYXJzZUludChtWzFdLCAxNiksIGwgPT09IDYgPyByZ2JuKG0pIC8vICNmZjAwMDBcclxuICAgICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcclxuICAgICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxyXG4gICAgICAgIDogbCA9PT0gNCA/IHJnYmEoKG0gPj4gMTIgJiAweGYpIHwgKG0gPj4gOCAmIDB4ZjApLCAobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSkgLyAweGZmKSAvLyAjZjAwMFxyXG4gICAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcclxuICAgICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXHJcbiAgICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxyXG4gICAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxyXG4gICAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXHJcbiAgICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcclxuICAgICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXHJcbiAgICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xyXG4gICAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXHJcbiAgICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmdibihuKSB7XHJcbiAgICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XHJcbiAgICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XHJcbiAgICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xyXG4gICAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xyXG4gICAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcclxuICAgIG8gPSBvLnJnYigpO1xyXG4gICAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XHJcbiAgICB0aGlzLnIgPSArcjtcclxuICAgIHRoaXMuZyA9ICtnO1xyXG4gICAgdGhpcy5iID0gK2I7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XHJcbiAgICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XHJcbiAgICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgZGFya2VyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xyXG4gICAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIHJnYjogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcclxuICAgICAgICAgICYmICgtMC41IDw9IHRoaXMuZyAmJiB0aGlzLmcgPCAyNTUuNSlcclxuICAgICAgICAgICYmICgtMC41IDw9IHRoaXMuYiAmJiB0aGlzLmIgPCAyNTUuNSlcclxuICAgICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XHJcbiAgICB9LFxyXG4gICAgaGV4OiByZ2JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxyXG4gICAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxyXG4gICAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxyXG4gICAgdG9TdHJpbmc6IHJnYl9mb3JtYXRSZ2JcclxuICB9KSk7XHJcblxyXG4gIGZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XHJcbiAgICByZXR1cm4gXCIjXCIgKyBoZXgodGhpcy5yKSArIGhleCh0aGlzLmcpICsgaGV4KHRoaXMuYik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZ2JfZm9ybWF0UmdiKCkge1xyXG4gICAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XHJcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcclxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxyXG4gICAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXHJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcclxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGV4KHZhbHVlKSB7XHJcbiAgICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xyXG4gICAgcmV0dXJuICh2YWx1ZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIHZhbHVlLnRvU3RyaW5nKDE2KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xyXG4gICAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xyXG4gICAgZWxzZSBpZiAobCA8PSAwIHx8IGwgPj0gMSkgaCA9IHMgPSBOYU47XHJcbiAgICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XHJcbiAgICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBuZXcgSHNsKG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XHJcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XHJcbiAgICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBvO1xyXG4gICAgbyA9IG8ucmdiKCk7XHJcbiAgICB2YXIgciA9IG8uciAvIDI1NSxcclxuICAgICAgICBnID0gby5nIC8gMjU1LFxyXG4gICAgICAgIGIgPSBvLmIgLyAyNTUsXHJcbiAgICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXHJcbiAgICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXHJcbiAgICAgICAgaCA9IE5hTixcclxuICAgICAgICBzID0gbWF4IC0gbWluLFxyXG4gICAgICAgIGwgPSAobWF4ICsgbWluKSAvIDI7XHJcbiAgICBpZiAocykge1xyXG4gICAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcclxuICAgICAgZWxzZSBpZiAoZyA9PT0gbWF4KSBoID0gKGIgLSByKSAvIHMgKyAyO1xyXG4gICAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XHJcbiAgICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XHJcbiAgICAgIGggKj0gNjA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xyXG4gICAgdGhpcy5oID0gK2g7XHJcbiAgICB0aGlzLnMgPSArcztcclxuICAgIHRoaXMubCA9ICtsO1xyXG4gICAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xyXG4gICAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xyXG4gICAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcclxuICAgIH0sXHJcbiAgICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XHJcbiAgICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIHJnYjogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxyXG4gICAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxyXG4gICAgICAgICAgbCA9IHRoaXMubCxcclxuICAgICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXHJcbiAgICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XHJcbiAgICAgIHJldHVybiBuZXcgUmdiKFxyXG4gICAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcclxuICAgICAgICBoc2wycmdiKGgsIG0xLCBtMiksXHJcbiAgICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXHJcbiAgICAgICAgdGhpcy5vcGFjaXR5XHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXHJcbiAgICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXHJcbiAgICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xyXG4gICAgfSxcclxuICAgIGZvcm1hdEhzbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xyXG4gICAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcclxuICAgICAgICAgICsgKHRoaXMuaCB8fCAwKSArIFwiLCBcIlxyXG4gICAgICAgICAgKyAodGhpcy5zIHx8IDApICogMTAwICsgXCIlLCBcIlxyXG4gICAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcclxuICAgICAgICAgICsgKGEgPT09IDEgPyBcIilcIiA6IFwiLCBcIiArIGEgKyBcIilcIik7XHJcbiAgICB9XHJcbiAgfSkpO1xyXG5cclxuICAvKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXHJcbiAgZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcclxuICAgIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcclxuICAgICAgICA6IGggPCAxODAgPyBtMlxyXG4gICAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcclxuICAgICAgICA6IG0xKSAqIDI1NTtcclxuICB9XHJcblxyXG4gIHZhciBkZWcycmFkID0gTWF0aC5QSSAvIDE4MDtcclxuICB2YXIgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XHJcblxyXG4gIC8vIGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcclxuICB2YXIgSyA9IDE4LFxyXG4gICAgICBYbiA9IDAuOTY0MjIsXHJcbiAgICAgIFluID0gMSxcclxuICAgICAgWm4gPSAwLjgyNTIxLFxyXG4gICAgICB0MCA9IDQgLyAyOSxcclxuICAgICAgdDEgPSA2IC8gMjksXHJcbiAgICAgIHQyID0gMyAqIHQxICogdDEsXHJcbiAgICAgIHQzID0gdDEgKiB0MSAqIHQxO1xyXG5cclxuICBmdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcclxuICAgIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xyXG4gICAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xyXG4gICAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxyXG4gICAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxyXG4gICAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxyXG4gICAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xyXG4gICAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcclxuICAgICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XHJcbiAgICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcclxuICAgIHRoaXMubCA9ICtsO1xyXG4gICAgdGhpcy5hID0gK2E7XHJcbiAgICB0aGlzLmIgPSArYjtcclxuICAgIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xyXG4gIH1cclxuXHJcbiAgZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcclxuICAgIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCArIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcclxuICAgIH0sXHJcbiAgICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIHJnYjogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcclxuICAgICAgICAgIHggPSBpc05hTih0aGlzLmEpID8geSA6IHkgKyB0aGlzLmEgLyA1MDAsXHJcbiAgICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xyXG4gICAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xyXG4gICAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xyXG4gICAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xyXG4gICAgICByZXR1cm4gbmV3IFJnYihcclxuICAgICAgICBscmdiMnJnYiggMy4xMzM4NTYxICogeCAtIDEuNjE2ODY2NyAqIHkgLSAwLjQ5MDYxNDYgKiB6KSxcclxuICAgICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcclxuICAgICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcclxuICAgICAgICB0aGlzLm9wYWNpdHlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIGZ1bmN0aW9uIHh5ejJsYWIodCkge1xyXG4gICAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGFiMnh5eih0KSB7XHJcbiAgICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcclxuICAgIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmdiMmxyZ2IoeCkge1xyXG4gICAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcclxuICAgIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xyXG4gICAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xyXG4gICAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XHJcbiAgICB2YXIgaCA9IE1hdGguYXRhbjIoby5iLCBvLmEpICogcmFkMmRlZztcclxuICAgIHJldHVybiBuZXcgSGNsKGggPCAwID8gaCArIDM2MCA6IGgsIE1hdGguc3FydChvLmEgKiBvLmEgKyBvLmIgKiBvLmIpLCBvLmwsIG8ub3BhY2l0eSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xyXG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xyXG4gICAgdGhpcy5oID0gK2g7XHJcbiAgICB0aGlzLmMgPSArYztcclxuICAgIHRoaXMubCA9ICtsO1xyXG4gICAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoY2wybGFiKG8pIHtcclxuICAgIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XHJcbiAgICB2YXIgaCA9IG8uaCAqIGRlZzJyYWQ7XHJcbiAgICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XHJcbiAgICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgZGFya2VyOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcclxuICAgIH0sXHJcbiAgICByZ2I6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIHZhciBBID0gLTAuMTQ4NjEsXHJcbiAgICAgIEIgPSArMS43ODI3NyxcclxuICAgICAgQyA9IC0wLjI5MjI3LFxyXG4gICAgICBEID0gLTAuOTA2NDksXHJcbiAgICAgIEUgPSArMS45NzI5NCxcclxuICAgICAgRUQgPSBFICogRCxcclxuICAgICAgRUIgPSBFICogQixcclxuICAgICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xyXG5cclxuICBmdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcclxuICAgIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xyXG4gICAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xyXG4gICAgdmFyIHIgPSBvLnIgLyAyNTUsXHJcbiAgICAgICAgZyA9IG8uZyAvIDI1NSxcclxuICAgICAgICBiID0gby5iIC8gMjU1LFxyXG4gICAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxyXG4gICAgICAgIGJsID0gYiAtIGwsXHJcbiAgICAgICAgayA9IChFICogKGcgLSBsKSAtIEMgKiBibCkgLyBELFxyXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxyXG4gICAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiByYWQyZGVnIC0gMTIwIDogTmFOO1xyXG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgoaCA8IDAgPyBoICsgMzYwIDogaCwgcywgbCwgby5vcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XHJcbiAgICB0aGlzLmggPSAraDtcclxuICAgIHRoaXMucyA9ICtzO1xyXG4gICAgdGhpcy5sID0gK2w7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XHJcbiAgICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XHJcbiAgICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xyXG4gICAgfSxcclxuICAgIGRhcmtlcjogZnVuY3Rpb24oaykge1xyXG4gICAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcclxuICAgICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XHJcbiAgICB9LFxyXG4gICAgcmdiOiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIGggPSBpc05hTih0aGlzLmgpID8gMCA6ICh0aGlzLmggKyAxMjApICogZGVnMnJhZCxcclxuICAgICAgICAgIGwgPSArdGhpcy5sLFxyXG4gICAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXHJcbiAgICAgICAgICBjb3NoID0gTWF0aC5jb3MoaCksXHJcbiAgICAgICAgICBzaW5oID0gTWF0aC5zaW4oaCk7XHJcbiAgICAgIHJldHVybiBuZXcgUmdiKFxyXG4gICAgICAgIDI1NSAqIChsICsgYSAqIChBICogY29zaCArIEIgKiBzaW5oKSksXHJcbiAgICAgICAgMjU1ICogKGwgKyBhICogKEMgKiBjb3NoICsgRCAqIHNpbmgpKSxcclxuICAgICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcclxuICAgICAgICB0aGlzLm9wYWNpdHlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9KSk7XHJcblxyXG4gIGZ1bmN0aW9uIGNvbnN0YW50KHgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBhICsgdCAqIGQ7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xyXG4gICAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdhbW1hKHkpIHtcclxuICAgIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XHJcbiAgICB2YXIgZCA9IGIgLSBhO1xyXG4gICAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcclxuICB9XHJcblxyXG4gIHZhciByZ2IkMSA9IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XHJcbiAgICB2YXIgY29sb3IgPSBnYW1tYSh5KTtcclxuXHJcbiAgICBmdW5jdGlvbiByZ2IkMShzdGFydCwgZW5kKSB7XHJcbiAgICAgIHZhciByID0gY29sb3IoKHN0YXJ0ID0gcmdiKHN0YXJ0KSkuciwgKGVuZCA9IHJnYihlbmQpKS5yKSxcclxuICAgICAgICAgIGcgPSBjb2xvcihzdGFydC5nLCBlbmQuZyksXHJcbiAgICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxyXG4gICAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xyXG4gICAgICAgIHN0YXJ0LnIgPSByKHQpO1xyXG4gICAgICAgIHN0YXJ0LmcgPSBnKHQpO1xyXG4gICAgICAgIHN0YXJ0LmIgPSBiKHQpO1xyXG4gICAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xyXG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmdiJDEuZ2FtbWEgPSByZ2JHYW1tYTtcclxuXHJcbiAgICByZXR1cm4gcmdiJDE7XHJcbiAgfSkoMSk7XHJcblxyXG4gIGZ1bmN0aW9uIG51bWJlckFycmF5KGEsIGIpIHtcclxuICAgIGlmICghYikgYiA9IFtdO1xyXG4gICAgdmFyIG4gPSBhID8gTWF0aC5taW4oYi5sZW5ndGgsIGEubGVuZ3RoKSA6IDAsXHJcbiAgICAgICAgYyA9IGIuc2xpY2UoKSxcclxuICAgICAgICBpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XHJcbiAgICAgIHJldHVybiBjO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXkoeCkge1xyXG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xyXG4gICAgdmFyIG5iID0gYiA/IGIubGVuZ3RoIDogMCxcclxuICAgICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcclxuICAgICAgICB4ID0gbmV3IEFycmF5KG5hKSxcclxuICAgICAgICBjID0gbmV3IEFycmF5KG5iKSxcclxuICAgICAgICBpO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gaW50ZXJwb2xhdGUoYVtpXSwgYltpXSk7XHJcbiAgICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcclxuICAgICAgcmV0dXJuIGM7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGF0ZShhLCBiKSB7XHJcbiAgICB2YXIgZCA9IG5ldyBEYXRlO1xyXG4gICAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIoYSwgYikge1xyXG4gICAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG9iamVjdChhLCBiKSB7XHJcbiAgICB2YXIgaSA9IHt9LFxyXG4gICAgICAgIGMgPSB7fSxcclxuICAgICAgICBrO1xyXG5cclxuICAgIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XHJcbiAgICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xyXG5cclxuICAgIGZvciAoayBpbiBiKSB7XHJcbiAgICAgIGlmIChrIGluIGEpIHtcclxuICAgICAgICBpW2tdID0gaW50ZXJwb2xhdGUoYVtrXSwgYltrXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY1trXSA9IGJba107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xyXG4gICAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XHJcbiAgICAgIHJldHVybiBjO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXHJcbiAgICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xyXG5cclxuICBmdW5jdGlvbiB6ZXJvKGIpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGI7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gb25lKGIpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XHJcbiAgICAgIHJldHVybiBiKHQpICsgXCJcIjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzdHJpbmcoYSwgYikge1xyXG4gICAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXHJcbiAgICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxyXG4gICAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcclxuICAgICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcclxuICAgICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcclxuICAgICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xyXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcclxuXHJcbiAgICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXHJcbiAgICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcclxuXHJcbiAgICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxyXG4gICAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxyXG4gICAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xyXG4gICAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcclxuICAgICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcclxuICAgICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcclxuICAgICAgICBlbHNlIHNbKytpXSA9IGJzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXHJcbiAgICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXHJcbiAgICAgICAgZWxzZSBzWysraV0gPSBibTtcclxuICAgICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcclxuICAgICAgICBzWysraV0gPSBudWxsO1xyXG4gICAgICAgIHEucHVzaCh7aTogaSwgeDogaW50ZXJwb2xhdGVOdW1iZXIoYW0sIGJtKX0pO1xyXG4gICAgICB9XHJcbiAgICAgIGJpID0gcmVCLmxhc3RJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgcmVtYWlucyBvZiBiLlxyXG4gICAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcclxuICAgICAgYnMgPSBiLnNsaWNlKGJpKTtcclxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXHJcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXHJcbiAgICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxyXG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXHJcbiAgICAgICAgPyBvbmUocVswXS54KVxyXG4gICAgICAgIDogemVybyhiKSlcclxuICAgICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcclxuICAgICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUoYSwgYikge1xyXG4gICAgdmFyIHQgPSB0eXBlb2YgYiwgYztcclxuICAgIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxyXG4gICAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxyXG4gICAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiJDEpIDogc3RyaW5nKVxyXG4gICAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiJDFcclxuICAgICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxyXG4gICAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XHJcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XHJcbiAgICAgICAgOiB0eXBlb2YgYi52YWx1ZU9mICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGIudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIiB8fCBpc05hTihiKSA/IG9iamVjdFxyXG4gICAgICAgIDogaW50ZXJwb2xhdGVOdW1iZXIpKGEsIGIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGVSb3VuZChhLCBiKSB7XHJcbiAgICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcclxuICAgICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29uc3RhbnQkMSh4KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG51bWJlcih4KSB7XHJcbiAgICByZXR1cm4gK3g7XHJcbiAgfVxyXG5cclxuICB2YXIgdW5pdCA9IFswLCAxXTtcclxuXHJcbiAgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xyXG4gICAgcmV0dXJuIChiIC09IChhID0gK2EpKVxyXG4gICAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cclxuICAgICAgICA6IGNvbnN0YW50JDEoaXNOYU4oYikgPyBOYU4gOiAwLjUpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XHJcbiAgICB2YXIgdDtcclxuICAgIGlmIChhID4gYikgdCA9IGEsIGEgPSBiLCBiID0gdDtcclxuICAgIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XHJcbiAgfVxyXG5cclxuICAvLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cclxuICAvLyBpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJhbmdlIHZhbHVlIHggaW4gW2EsYl0uXHJcbiAgZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcclxuICAgIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XHJcbiAgICBpZiAoZDEgPCBkMCkgZDAgPSBub3JtYWxpemUoZDEsIGQwKSwgcjAgPSBpbnRlcnBvbGF0ZShyMSwgcjApO1xyXG4gICAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xyXG4gICAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcclxuICAgICAgICBkID0gbmV3IEFycmF5KGopLFxyXG4gICAgICAgIHIgPSBuZXcgQXJyYXkoaiksXHJcbiAgICAgICAgaSA9IC0xO1xyXG5cclxuICAgIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxyXG4gICAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xyXG4gICAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XHJcbiAgICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKCsraSA8IGopIHtcclxuICAgICAgZFtpXSA9IG5vcm1hbGl6ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xyXG4gICAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcclxuICAgICAgdmFyIGkgPSBiaXNlY3RSaWdodChkb21haW4sIHgsIDEsIGopIC0gMTtcclxuICAgICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xyXG4gICAgcmV0dXJuIHRhcmdldFxyXG4gICAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxyXG4gICAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcclxuICAgICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXHJcbiAgICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxyXG4gICAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XHJcbiAgICB2YXIgZG9tYWluID0gdW5pdCxcclxuICAgICAgICByYW5nZSA9IHVuaXQsXHJcbiAgICAgICAgaW50ZXJwb2xhdGUkMSA9IGludGVycG9sYXRlLFxyXG4gICAgICAgIHRyYW5zZm9ybSxcclxuICAgICAgICB1bnRyYW5zZm9ybSxcclxuICAgICAgICB1bmtub3duLFxyXG4gICAgICAgIGNsYW1wID0gaWRlbnRpdHksXHJcbiAgICAgICAgcGllY2V3aXNlLFxyXG4gICAgICAgIG91dHB1dCxcclxuICAgICAgICBpbnB1dDtcclxuXHJcbiAgICBmdW5jdGlvbiByZXNjYWxlKCkge1xyXG4gICAgICB2YXIgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCk7XHJcbiAgICAgIGlmIChjbGFtcCAhPT0gaWRlbnRpdHkpIGNsYW1wID0gY2xhbXBlcihkb21haW5bMF0sIGRvbWFpbltuIC0gMV0pO1xyXG4gICAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcclxuICAgICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xyXG4gICAgICByZXR1cm4gc2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2NhbGUoeCkge1xyXG4gICAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUkMSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XHJcbiAgICAgIHJldHVybiBjbGFtcCh1bnRyYW5zZm9ybSgoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4ubWFwKHRyYW5zZm9ybSksIGludGVycG9sYXRlTnVtYmVyKSkpKHkpKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gcmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBpbnRlcnBvbGF0ZSQxID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gdHJ1ZSA6IGlkZW50aXR5LCByZXNjYWxlKCkpIDogY2xhbXAgIT09IGlkZW50aXR5O1xyXG4gICAgfTtcclxuXHJcbiAgICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdGUkMSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZSQxO1xyXG4gICAgfTtcclxuXHJcbiAgICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcclxuICAgICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xyXG4gICAgICByZXR1cm4gcmVzY2FsZSgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XHJcbiAgICByZXR1cm4gdHJhbnNmb3JtZXIoKShpZGVudGl0eSwgaWRlbnRpdHkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxyXG4gIC8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxyXG4gIC8vIEZvciBleGFtcGxlLCBmb3JtYXREZWNpbWFsKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxyXG4gIGZ1bmN0aW9uIGZvcm1hdERlY2ltYWwoeCwgcCkge1xyXG4gICAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XHJcbiAgICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xyXG5cclxuICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcclxuICAgIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxyXG4gICAgICAreC5zbGljZShpICsgMSlcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBleHBvbmVudCh4KSB7XHJcbiAgICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWwoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdEdyb3VwKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcclxuICAgICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXHJcbiAgICAgICAgICB0ID0gW10sXHJcbiAgICAgICAgICBqID0gMCxcclxuICAgICAgICAgIGcgPSBncm91cGluZ1swXSxcclxuICAgICAgICAgIGxlbmd0aCA9IDA7XHJcblxyXG4gICAgICB3aGlsZSAoaSA+IDAgJiYgZyA+IDApIHtcclxuICAgICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcclxuICAgICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcclxuICAgICAgICBpZiAoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aCkgYnJlYWs7XHJcbiAgICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXROdW1lcmFscyhudW1lcmFscykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxyXG4gIHZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xyXG4gICAgaWYgKCEobWF0Y2ggPSByZS5leGVjKHNwZWNpZmllcikpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdDogXCIgKyBzcGVjaWZpZXIpO1xyXG4gICAgdmFyIG1hdGNoO1xyXG4gICAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoe1xyXG4gICAgICBmaWxsOiBtYXRjaFsxXSxcclxuICAgICAgYWxpZ246IG1hdGNoWzJdLFxyXG4gICAgICBzaWduOiBtYXRjaFszXSxcclxuICAgICAgc3ltYm9sOiBtYXRjaFs0XSxcclxuICAgICAgemVybzogbWF0Y2hbNV0sXHJcbiAgICAgIHdpZHRoOiBtYXRjaFs2XSxcclxuICAgICAgY29tbWE6IG1hdGNoWzddLFxyXG4gICAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxyXG4gICAgICB0cmltOiBtYXRjaFs5XSxcclxuICAgICAgdHlwZTogbWF0Y2hbMTBdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUgPSBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlOyAvLyBpbnN0YW5jZW9mXHJcblxyXG4gIGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcclxuICAgIHRoaXMuZmlsbCA9IHNwZWNpZmllci5maWxsID09PSB1bmRlZmluZWQgPyBcIiBcIiA6IHNwZWNpZmllci5maWxsICsgXCJcIjtcclxuICAgIHRoaXMuYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24gPT09IHVuZGVmaW5lZCA/IFwiPlwiIDogc3BlY2lmaWVyLmFsaWduICsgXCJcIjtcclxuICAgIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcclxuICAgIHRoaXMuc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci5zeW1ib2wgKyBcIlwiO1xyXG4gICAgdGhpcy56ZXJvID0gISFzcGVjaWZpZXIuemVybztcclxuICAgIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XHJcbiAgICB0aGlzLmNvbW1hID0gISFzcGVjaWZpZXIuY29tbWE7XHJcbiAgICB0aGlzLnByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIucHJlY2lzaW9uO1xyXG4gICAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcclxuICAgIHRoaXMudHlwZSA9IHNwZWNpZmllci50eXBlID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnR5cGUgKyBcIlwiO1xyXG4gIH1cclxuXHJcbiAgRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsbFxyXG4gICAgICAgICsgdGhpcy5hbGlnblxyXG4gICAgICAgICsgdGhpcy5zaWduXHJcbiAgICAgICAgKyB0aGlzLnN5bWJvbFxyXG4gICAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcclxuICAgICAgICArICh0aGlzLndpZHRoID09PSB1bmRlZmluZWQgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxyXG4gICAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXHJcbiAgICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXHJcbiAgICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxyXG4gICAgICAgICsgdGhpcy50eXBlO1xyXG4gIH07XHJcblxyXG4gIC8vIFRyaW1zIGluc2lnbmlmaWNhbnQgemVyb3MsIGUuZy4sIHJlcGxhY2VzIDEuMjAwMGsgd2l0aCAxLjJrLlxyXG4gIGZ1bmN0aW9uIGZvcm1hdFRyaW0ocykge1xyXG4gICAgb3V0OiBmb3IgKHZhciBuID0gcy5sZW5ndGgsIGkgPSAxLCBpMCA9IC0xLCBpMTsgaSA8IG47ICsraSkge1xyXG4gICAgICBzd2l0Y2ggKHNbaV0pIHtcclxuICAgICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIjBcIjogaWYgKGkwID09PSAwKSBpMCA9IGk7IGkxID0gaTsgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xyXG4gIH1cclxuXHJcbiAgdmFyIHByZWZpeEV4cG9uZW50O1xyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXhBdXRvKHgsIHApIHtcclxuICAgIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTtcclxuICAgIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xyXG4gICAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcclxuICAgICAgICBleHBvbmVudCA9IGRbMV0sXHJcbiAgICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxyXG4gICAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XHJcbiAgICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XHJcbiAgICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcclxuICAgICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXHJcbiAgICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbCh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0Um91bmRlZCh4LCBwKSB7XHJcbiAgICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XHJcbiAgICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcclxuICAgIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXHJcbiAgICAgICAgZXhwb25lbnQgPSBkWzFdO1xyXG4gICAgcmV0dXJuIGV4cG9uZW50IDwgMCA/IFwiMC5cIiArIG5ldyBBcnJheSgtZXhwb25lbnQpLmpvaW4oXCIwXCIpICsgY29lZmZpY2llbnRcclxuICAgICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcclxuICAgICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XHJcbiAgfVxyXG5cclxuICB2YXIgZm9ybWF0VHlwZXMgPSB7XHJcbiAgICBcIiVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gKHggKiAxMDApLnRvRml4ZWQocCk7IH0sXHJcbiAgICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcclxuICAgIFwiY1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiB4ICsgXCJcIjsgfSxcclxuICAgIFwiZFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDEwKTsgfSxcclxuICAgIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXHJcbiAgICBcImZcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0ZpeGVkKHApOyB9LFxyXG4gICAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXHJcbiAgICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcclxuICAgIFwicFwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApOyB9LFxyXG4gICAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXHJcbiAgICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcclxuICAgIFwiWFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOyB9LFxyXG4gICAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gaWRlbnRpdHkkMSh4KSB7XHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG4gIHZhciBtYXAgPSBBcnJheS5wcm90b3R5cGUubWFwLFxyXG4gICAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcclxuICAgIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyA9PT0gdW5kZWZpbmVkIHx8IGxvY2FsZS50aG91c2FuZHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5JDEgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcclxuICAgICAgICBjdXJyZW5jeVByZWZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVswXSArIFwiXCIsXHJcbiAgICAgICAgY3VycmVuY3lTdWZmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMV0gKyBcIlwiLFxyXG4gICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXHJcbiAgICAgICAgbnVtZXJhbHMgPSBsb2NhbGUubnVtZXJhbHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5JDEgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxyXG4gICAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCA9PT0gdW5kZWZpbmVkID8gXCIlXCIgOiBsb2NhbGUucGVyY2VudCArIFwiXCIsXHJcbiAgICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcclxuICAgICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XHJcblxyXG4gICAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xyXG4gICAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcclxuXHJcbiAgICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXHJcbiAgICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcclxuICAgICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcclxuICAgICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXHJcbiAgICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXHJcbiAgICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcclxuICAgICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxyXG4gICAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcclxuICAgICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcclxuICAgICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcclxuXHJcbiAgICAgIC8vIFRoZSBcIm5cIiB0eXBlIGlzIGFuIGFsaWFzIGZvciBcIixnXCIuXHJcbiAgICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XHJcblxyXG4gICAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cclxuICAgICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xyXG5cclxuICAgICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXHJcbiAgICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xyXG5cclxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXHJcbiAgICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxyXG4gICAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxyXG4gICAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5U3VmZml4IDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcclxuXHJcbiAgICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XHJcbiAgICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xyXG4gICAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xyXG4gICAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxyXG4gICAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcclxuXHJcbiAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcclxuICAgICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cclxuICAgICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxyXG4gICAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXHJcbiAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxyXG4gICAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXHJcbiAgICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xyXG4gICAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcclxuICAgICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXHJcbiAgICAgICAgICAgIGksIG4sIGM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xyXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xyXG4gICAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpZ24uIC0wIGlzIG5vdCBsZXNzIHRoYW4gMCwgYnV0IDEgLyAtMCBpcyFcclxuICAgICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XHJcblxyXG4gICAgICAgICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBmb3JtYXR0aW5nLlxyXG4gICAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcclxuXHJcbiAgICAgICAgICAvLyBUcmltIGluc2lnbmlmaWNhbnQgemVyb3MuXHJcbiAgICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGFmdGVyIGZvcm1hdHRpbmcsIGFuZCBubyBleHBsaWNpdCBwb3NpdGl2ZSBzaWduIGlzIHJlcXVlc3RlZCwgaGlkZSB0aGUgc2lnbi5cclxuICAgICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxyXG4gICAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xyXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XHJcblxyXG4gICAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcclxuICAgICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxyXG4gICAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XHJcbiAgICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcclxuICAgICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cclxuICAgICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcclxuXHJcbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cclxuICAgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxyXG4gICAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXHJcbiAgICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcclxuXHJcbiAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXHJcbiAgICAgICAgc3dpdGNoIChhbGlnbikge1xyXG4gICAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxyXG4gICAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxyXG4gICAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXHJcbiAgICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxyXG4gICAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciBsb2NhbGU7XHJcbiAgdmFyIGZvcm1hdDtcclxuICB2YXIgZm9ybWF0UHJlZml4O1xyXG5cclxuICBkZWZhdWx0TG9jYWxlKHtcclxuICAgIGRlY2ltYWw6IFwiLlwiLFxyXG4gICAgdGhvdXNhbmRzOiBcIixcIixcclxuICAgIGdyb3VwaW5nOiBbM10sXHJcbiAgICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXSxcclxuICAgIG1pbnVzOiBcIi1cIlxyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcclxuICAgIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcclxuICAgIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XHJcbiAgICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xyXG4gICAgcmV0dXJuIGxvY2FsZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByZWNpc2lvbkZpeGVkKHN0ZXApIHtcclxuICAgIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByZWNpc2lvblJvdW5kKHN0ZXAsIG1heCkge1xyXG4gICAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcclxuICAgIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoc3RhcnQsIHN0b3AsIGNvdW50LCBzcGVjaWZpZXIpIHtcclxuICAgIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcclxuICAgICAgICBwcmVjaXNpb247XHJcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xyXG4gICAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xyXG4gICAgICBjYXNlIFwic1wiOiB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XHJcbiAgICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwiXCI6XHJcbiAgICAgIGNhc2UgXCJlXCI6XHJcbiAgICAgIGNhc2UgXCJnXCI6XHJcbiAgICAgIGNhc2UgXCJwXCI6XHJcbiAgICAgIGNhc2UgXCJyXCI6IHtcclxuICAgICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcImZcIjpcclxuICAgICAgY2FzZSBcIiVcIjoge1xyXG4gICAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbGluZWFyaXNoKHNjYWxlKSB7XHJcbiAgICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xyXG5cclxuICAgIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcclxuICAgICAgdmFyIGQgPSBkb21haW4oKTtcclxuICAgICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xyXG4gICAgICB2YXIgZCA9IGRvbWFpbigpO1xyXG4gICAgICByZXR1cm4gdGlja0Zvcm1hdChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50LCBzcGVjaWZpZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcclxuICAgICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XHJcblxyXG4gICAgICB2YXIgZCA9IGRvbWFpbigpLFxyXG4gICAgICAgICAgaTAgPSAwLFxyXG4gICAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICBzdGFydCA9IGRbaTBdLFxyXG4gICAgICAgICAgc3RvcCA9IGRbaTFdLFxyXG4gICAgICAgICAgc3RlcDtcclxuXHJcbiAgICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcclxuICAgICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XHJcbiAgICAgICAgc3RlcCA9IGkwLCBpMCA9IGkxLCBpMSA9IHN0ZXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XHJcblxyXG4gICAgICBpZiAoc3RlcCA+IDApIHtcclxuICAgICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcclxuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcclxuICAgICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xyXG4gICAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGVwID4gMCkge1xyXG4gICAgICAgIGRbaTBdID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcclxuICAgICAgICBkW2kxXSA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgIGRvbWFpbihkKTtcclxuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xyXG4gICAgICAgIGRbaTBdID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xyXG4gICAgICAgIGRbaTFdID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xyXG4gICAgICAgIGRvbWFpbihkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHNjYWxlO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc2NhbGU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsaW5lYXIkMSgpIHtcclxuICAgIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKTtcclxuXHJcbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIkMSgpKTtcclxuICAgIH07XHJcblxyXG4gICAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xyXG5cclxuICAgIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHQwJDEgPSBuZXcgRGF0ZSxcclxuICAgICAgdDEkMSA9IG5ldyBEYXRlO1xyXG5cclxuICBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xyXG5cclxuICAgIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcclxuICAgICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcnZhbC5mbG9vciA9IGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcclxuICAgIH07XHJcblxyXG4gICAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoZGF0ZSAtIDEpKSwgb2Zmc2V0aShkYXRlLCAxKSwgZmxvb3JpKGRhdGUpLCBkYXRlO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgICAgdmFyIGQwID0gaW50ZXJ2YWwoZGF0ZSksXHJcbiAgICAgICAgICBkMSA9IGludGVydmFsLmNlaWwoZGF0ZSk7XHJcbiAgICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xyXG4gICAgfTtcclxuXHJcbiAgICBpbnRlcnZhbC5vZmZzZXQgPSBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICAgIHJldHVybiBvZmZzZXRpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSksIHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApKSwgZGF0ZTtcclxuICAgIH07XHJcblxyXG4gICAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xyXG4gICAgICB2YXIgcmFuZ2UgPSBbXSwgcHJldmlvdXM7XHJcbiAgICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XHJcbiAgICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcclxuICAgICAgaWYgKCEoc3RhcnQgPCBzdG9wKSB8fCAhKHN0ZXAgPiAwKSkgcmV0dXJuIHJhbmdlOyAvLyBhbHNvIGhhbmRsZXMgSW52YWxpZCBEYXRlXHJcbiAgICAgIGRvIHJhbmdlLnB1c2gocHJldmlvdXMgPSBuZXcgRGF0ZSgrc3RhcnQpKSwgb2Zmc2V0aShzdGFydCwgc3RlcCksIGZsb29yaShzdGFydCk7XHJcbiAgICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XHJcbiAgICAgIHJldHVybiByYW5nZTtcclxuICAgIH07XHJcblxyXG4gICAgaW50ZXJ2YWwuZmlsdGVyID0gZnVuY3Rpb24odGVzdCkge1xyXG4gICAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xyXG4gICAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xyXG4gICAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcclxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxyXG4gICAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xyXG4gICAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNvdW50KSB7XHJcbiAgICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgICAgIHQwJDEuc2V0VGltZSgrc3RhcnQpLCB0MSQxLnNldFRpbWUoK2VuZCk7XHJcbiAgICAgICAgZmxvb3JpKHQwJDEpLCBmbG9vcmkodDEkMSk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAkMSwgdDEkMSkpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaW50ZXJ2YWwuZXZlcnkgPSBmdW5jdGlvbihzdGVwKSB7XHJcbiAgICAgICAgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XHJcbiAgICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcclxuICAgICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXHJcbiAgICAgICAgICAgIDogaW50ZXJ2YWwuZmlsdGVyKGZpZWxkXHJcbiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxyXG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbihkKSB7IHJldHVybiBpbnRlcnZhbC5jb3VudCgwLCBkKSAlIHN0ZXAgPT09IDA7IH0pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbnRlcnZhbDtcclxuICB9XHJcblxyXG4gIHZhciBtaWxsaXNlY29uZCA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gbm9vcFxyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiBlbmQgLSBzdGFydDtcclxuICB9KTtcclxuXHJcbiAgLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxyXG4gIG1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xyXG4gICAgayA9IE1hdGguZmxvb3Ioayk7XHJcbiAgICBpZiAoIWlzRmluaXRlKGspIHx8ICEoayA+IDApKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xyXG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgICAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoZGF0ZSAvIGspICogayk7XHJcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcclxuICAgIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xyXG4gIHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcclxuICB2YXIgZHVyYXRpb25Ib3VyID0gMzZlNTtcclxuICB2YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcclxuICB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xyXG5cclxuICB2YXIgc2Vjb25kID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gIH0pO1xyXG5cclxuICB2YXIgbWludXRlID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZGF0ZS5nZXRTZWNvbmRzKCkgKiBkdXJhdGlvblNlY29uZCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcclxuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICB9KTtcclxuXHJcbiAgdmFyIGhvdXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kIC0gZGF0ZS5nZXRNaW51dGVzKCkgKiBkdXJhdGlvbk1pbnV0ZSk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcclxuICB9KTtcclxuXHJcbiAgdmFyIGRheSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25EYXk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gd2Vla2RheShpKSB7XHJcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xyXG4gICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XHJcbiAgICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XHJcbiAgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XHJcbiAgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xyXG4gIHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xyXG4gIHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XHJcbiAgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XHJcbiAgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcclxuXHJcbiAgdmFyIG1vbnRoID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXREYXRlKDEpO1xyXG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XHJcbiAgfSk7XHJcblxyXG4gIHZhciB5ZWFyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcclxuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwKTtcclxuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cclxuICB5ZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xyXG4gICAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcclxuICAgICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcclxuICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICB2YXIgdXRjTWludXRlID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcclxuICB9LCBmdW5jdGlvbihkYXRlKSB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgfSk7XHJcblxyXG4gIHZhciB1dGNIb3VyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgfSk7XHJcblxyXG4gIHZhciB1dGNEYXkgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcclxuICB9KTtcclxuXHJcbiAgZnVuY3Rpb24gdXRjV2Vla2RheShpKSB7XHJcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xyXG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XHJcbiAgICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XHJcbiAgICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcclxuICB2YXIgdXRjTW9uZGF5ID0gdXRjV2Vla2RheSgxKTtcclxuICB2YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XHJcbiAgdmFyIHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XHJcbiAgdmFyIHV0Y1RodXJzZGF5ID0gdXRjV2Vla2RheSg0KTtcclxuICB2YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcclxuICB2YXIgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xyXG5cclxuICB2YXIgdXRjTW9udGggPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFVUQ0RhdGUoMSk7XHJcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xyXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcclxuICAgIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XHJcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xyXG4gICAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDTW9udGgoKTtcclxuICB9KTtcclxuXHJcbiAgdmFyIHV0Y1llYXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xyXG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcclxuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XHJcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xyXG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcclxuICB9KTtcclxuXHJcbiAgLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxyXG4gIHV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XHJcbiAgICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XHJcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xyXG4gICAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xyXG4gICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xyXG4gICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XHJcbiAgICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XHJcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xyXG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XHJcbiAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1dGNEYXRlKGQpIHtcclxuICAgIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xyXG4gICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XHJcbiAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbmV3RGF0ZSh5LCBtLCBkKSB7XHJcbiAgICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TG9jYWxlJDEobG9jYWxlKSB7XHJcbiAgICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxyXG4gICAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXHJcbiAgICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcclxuICAgICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxyXG4gICAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxyXG4gICAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcclxuICAgICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcclxuICAgICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XHJcblxyXG4gICAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxyXG4gICAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXHJcbiAgICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcclxuICAgICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXHJcbiAgICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXHJcbiAgICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcclxuICAgICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXHJcbiAgICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXHJcbiAgICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcclxuICAgICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XHJcblxyXG4gICAgdmFyIGZvcm1hdHMgPSB7XHJcbiAgICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXHJcbiAgICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxyXG4gICAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcclxuICAgICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxyXG4gICAgICBcImNcIjogbnVsbCxcclxuICAgICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXHJcbiAgICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxyXG4gICAgICBcImZcIjogZm9ybWF0TWljcm9zZWNvbmRzLFxyXG4gICAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxyXG4gICAgICBcIklcIjogZm9ybWF0SG91cjEyLFxyXG4gICAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxyXG4gICAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxyXG4gICAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXHJcbiAgICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxyXG4gICAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxyXG4gICAgICBcInFcIjogZm9ybWF0UXVhcnRlcixcclxuICAgICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXHJcbiAgICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcclxuICAgICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXHJcbiAgICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxyXG4gICAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcclxuICAgICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXHJcbiAgICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxyXG4gICAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcclxuICAgICAgXCJ4XCI6IG51bGwsXHJcbiAgICAgIFwiWFwiOiBudWxsLFxyXG4gICAgICBcInlcIjogZm9ybWF0WWVhcixcclxuICAgICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxyXG4gICAgICBcIlpcIjogZm9ybWF0Wm9uZSxcclxuICAgICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB1dGNGb3JtYXRzID0ge1xyXG4gICAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxyXG4gICAgICBcIkFcIjogZm9ybWF0VVRDV2Vla2RheSxcclxuICAgICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXHJcbiAgICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcclxuICAgICAgXCJjXCI6IG51bGwsXHJcbiAgICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxyXG4gICAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcclxuICAgICAgXCJmXCI6IGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyxcclxuICAgICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcclxuICAgICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcclxuICAgICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcclxuICAgICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcclxuICAgICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxyXG4gICAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcclxuICAgICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcclxuICAgICAgXCJxXCI6IGZvcm1hdFVUQ1F1YXJ0ZXIsXHJcbiAgICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxyXG4gICAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXHJcbiAgICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxyXG4gICAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcclxuICAgICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXHJcbiAgICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxyXG4gICAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcclxuICAgICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXHJcbiAgICAgIFwieFwiOiBudWxsLFxyXG4gICAgICBcIlhcIjogbnVsbCxcclxuICAgICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXHJcbiAgICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcclxuICAgICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXHJcbiAgICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgcGFyc2VzID0ge1xyXG4gICAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXHJcbiAgICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXHJcbiAgICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXHJcbiAgICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxyXG4gICAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcclxuICAgICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcclxuICAgICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcclxuICAgICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxyXG4gICAgICBcIkhcIjogcGFyc2VIb3VyMjQsXHJcbiAgICAgIFwiSVwiOiBwYXJzZUhvdXIyNCxcclxuICAgICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxyXG4gICAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXHJcbiAgICAgIFwibVwiOiBwYXJzZU1vbnRoTnVtYmVyLFxyXG4gICAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxyXG4gICAgICBcInBcIjogcGFyc2VQZXJpb2QsXHJcbiAgICAgIFwicVwiOiBwYXJzZVF1YXJ0ZXIsXHJcbiAgICAgIFwiUVwiOiBwYXJzZVVuaXhUaW1lc3RhbXAsXHJcbiAgICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxyXG4gICAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxyXG4gICAgICBcInVcIjogcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5LFxyXG4gICAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxyXG4gICAgICBcIlZcIjogcGFyc2VXZWVrTnVtYmVySVNPLFxyXG4gICAgICBcIndcIjogcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5LFxyXG4gICAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxyXG4gICAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxyXG4gICAgICBcIlhcIjogcGFyc2VMb2NhbGVUaW1lLFxyXG4gICAgICBcInlcIjogcGFyc2VZZWFyLFxyXG4gICAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcclxuICAgICAgXCJaXCI6IHBhcnNlWm9uZSxcclxuICAgICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcclxuICAgIH07XHJcblxyXG4gICAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxyXG4gICAgZm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCBmb3JtYXRzKTtcclxuICAgIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XHJcbiAgICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcclxuICAgIHV0Y0Zvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgdXRjRm9ybWF0cyk7XHJcbiAgICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xyXG4gICAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XHJcblxyXG4gICAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICAgIHZhciBzdHJpbmcgPSBbXSxcclxuICAgICAgICAgICAgaSA9IC0xLFxyXG4gICAgICAgICAgICBqID0gMCxcclxuICAgICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXHJcbiAgICAgICAgICAgIGMsXHJcbiAgICAgICAgICAgIHBhZCxcclxuICAgICAgICAgICAgZm9ybWF0O1xyXG5cclxuICAgICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XHJcblxyXG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XHJcbiAgICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XHJcbiAgICAgICAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XHJcbiAgICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcclxuICAgICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPSBmb3JtYXRzW2NdKSBjID0gZm9ybWF0KGRhdGUsIHBhZCk7XHJcbiAgICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xyXG4gICAgICAgICAgICBqID0gaSArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xyXG4gICAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xyXG4gICAgICAgIHZhciBkID0gbmV3RGF0ZSgxOTAwLCB1bmRlZmluZWQsIDEpLFxyXG4gICAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXHJcbiAgICAgICAgICAgIHdlZWssIGRheSQxO1xyXG4gICAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxyXG4gICAgICAgIGlmIChcIlFcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5RKTtcclxuICAgICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cclxuICAgICAgICBpZiAoWiAmJiAhKFwiWlwiIGluIGQpKSBkLlogPSAwO1xyXG5cclxuICAgICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxyXG4gICAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgbW9udGggd2FzIG5vdCBzcGVjaWZpZWQsIGluaGVyaXQgZnJvbSB0aGUgcXVhcnRlci5cclxuICAgICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXHJcbiAgICAgICAgaWYgKFwiVlwiIGluIGQpIHtcclxuICAgICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xyXG4gICAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcclxuICAgICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5JDEgPSB3ZWVrLmdldFVUQ0RheSgpO1xyXG4gICAgICAgICAgICB3ZWVrID0gZGF5JDEgPiA0IHx8IGRheSQxID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XHJcbiAgICAgICAgICAgIHdlZWsgPSB1dGNEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xyXG4gICAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcclxuICAgICAgICAgICAgZC5kID0gd2Vlay5nZXRVVENEYXRlKCkgKyAoZC53ICsgNikgJSA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkkMSA9IHdlZWsuZ2V0RGF5KCk7XHJcbiAgICAgICAgICAgIHdlZWsgPSBkYXkkMSA+IDQgfHwgZGF5JDEgPT09IDAgPyBtb25kYXkuY2VpbCh3ZWVrKSA6IG1vbmRheSh3ZWVrKTtcclxuICAgICAgICAgICAgd2VlayA9IGRheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XHJcbiAgICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgZC5tID0gd2Vlay5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICBkLmQgPSB3ZWVrLmdldERhdGUoKSArIChkLncgKyA2KSAlIDc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcclxuICAgICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSBcInVcIiBpbiBkID8gZC51ICUgNyA6IFwiV1wiIGluIGQgPyAxIDogMDtcclxuICAgICAgICAgIGRheSQxID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXRVVENEYXkoKSA6IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldERheSgpO1xyXG4gICAgICAgICAgZC5tID0gMDtcclxuICAgICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkkMSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5JDEgKyA2KSAlIDc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxyXG4gICAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXHJcbiAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcclxuICAgICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xyXG4gICAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcclxuICAgICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxyXG4gICAgICAgIHJldHVybiBsb2NhbERhdGUoZCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcclxuICAgICAgdmFyIGkgPSAwLFxyXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXHJcbiAgICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcclxuICAgICAgICAgIGMsXHJcbiAgICAgICAgICBwYXJzZTtcclxuXHJcbiAgICAgIHdoaWxlIChpIDwgbikge1xyXG4gICAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcclxuICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoYyA9PT0gMzcpIHtcclxuICAgICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XHJcbiAgICAgICAgICBwYXJzZSA9IHBhcnNlc1tjIGluIHBhZHMgPyBzcGVjaWZpZXIuY2hhckF0KGkrKykgOiBjXTtcclxuICAgICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gajtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcclxuICAgICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XHJcbiAgICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xyXG4gICAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcclxuICAgICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xyXG4gICAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcclxuICAgICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcclxuICAgICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcclxuICAgICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlKGQsIHN0cmluZywgaSkge1xyXG4gICAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xyXG4gICAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX3RpbWUsIHN0cmluZywgaSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcclxuICAgICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXkoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFBlcmlvZChkKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xyXG4gICAgICByZXR1cm4gMSArIH5+KGQuZ2V0TW9udGgoKSAvIDMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcclxuICAgICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcclxuICAgICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcclxuICAgICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xyXG4gICAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcclxuICAgICAgcmV0dXJuIDEgKyB+fihkLmdldFVUQ01vbnRoKCkgLyAzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xyXG4gICAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcclxuICAgICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XHJcbiAgICAgICAgcmV0dXJuIGY7XHJcbiAgICAgIH0sXHJcbiAgICAgIHBhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcclxuICAgICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBmYWxzZSk7XHJcbiAgICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgICB9LFxyXG4gICAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xyXG4gICAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcclxuICAgICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XHJcbiAgICAgICAgcmV0dXJuIGY7XHJcbiAgICAgIH0sXHJcbiAgICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcclxuICAgICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCB0cnVlKTtcclxuICAgICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB2YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxyXG4gICAgICBudW1iZXJSZSA9IC9eXFxzKlxcZCsvLCAvLyBub3RlOiBpZ25vcmVzIG5leHQgZGlyZWN0aXZlXHJcbiAgICAgIHBlcmNlbnRSZSA9IC9eJS8sXHJcbiAgICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcclxuXHJcbiAgZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xyXG4gICAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXHJcbiAgICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxyXG4gICAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVxdW90ZShzKSB7XHJcbiAgICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xyXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XHJcbiAgICB2YXIgbWFwID0ge30sIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcclxuICAgIHdoaWxlICgrK2kgPCBuKSBtYXBbbmFtZXNbaV0udG9Mb3dlckNhc2UoKV0gPSBpO1xyXG4gICAgcmV0dXJuIG1hcDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcclxuICAgIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDQpKTtcclxuICAgIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IC9eKFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcclxuICAgIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlUXVhcnRlcihkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcclxuICAgIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xyXG4gICAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcclxuICAgIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcclxuICAgIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcclxuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcclxuICAgIHJldHVybiBuID8gKGQuTCA9IE1hdGguZmxvb3IoblswXSAvIDEwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBwZXJjZW50UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcclxuICAgIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XHJcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcclxuICAgIHJldHVybiBuID8gKGQuUSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xyXG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XHJcbiAgICByZXR1cm4gbiA/IChkLnMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZCgxICsgZGF5LmNvdW50KHllYXIoZCksIGQpLCBwLCAzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcclxuICAgIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlck1vbmRheShkKSB7XHJcbiAgICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcclxuICAgIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKHN1bmRheS5jb3VudCh5ZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlcklTTyhkLCBwKSB7XHJcbiAgICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcclxuICAgIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRodXJzZGF5KGQpIDogdGh1cnNkYXkuY2VpbChkKTtcclxuICAgIHJldHVybiBwYWQodGh1cnNkYXkuY291bnQoeWVhcihkKSwgZCkgKyAoeWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlclN1bmRheShkKSB7XHJcbiAgICByZXR1cm4gZC5nZXREYXkoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChtb25kYXkuY291bnQoeWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFllYXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcclxuICAgIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgcmV0dXJuICh6ID4gMCA/IFwiLVwiIDogKHogKj0gLTEsIFwiK1wiKSlcclxuICAgICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcclxuICAgICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mTW9udGgoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZZZWFyKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoMSArIHV0Y0RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyhkLCBwKSB7XHJcbiAgICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoTnVtYmVyKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRVVENNaW51dGVzKCksIHAsIDIpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XHJcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xyXG4gICAgdmFyIGRvdyA9IGQuZ2V0VVRDRGF5KCk7XHJcbiAgICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xyXG4gICAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xyXG4gICAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XHJcbiAgICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XHJcbiAgICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xyXG4gICAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcclxuICAgIHJldHVybiBwYWQodXRjTW9uZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcclxuICAgIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcclxuICAgIHJldHVybiBcIiswMDAwXCI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRMaXRlcmFsUGVyY2VudCgpIHtcclxuICAgIHJldHVybiBcIiVcIjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xyXG4gICAgcmV0dXJuICtkO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcclxuICB9XHJcblxyXG4gIHZhciBsb2NhbGUkMTtcclxuICB2YXIgdGltZUZvcm1hdDtcclxuICB2YXIgdGltZVBhcnNlO1xyXG4gIHZhciB1dGNGb3JtYXQ7XHJcbiAgdmFyIHV0Y1BhcnNlO1xyXG5cclxuICBkZWZhdWx0TG9jYWxlJDEoe1xyXG4gICAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXHJcbiAgICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcclxuICAgIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXHJcbiAgICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxyXG4gICAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXHJcbiAgICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcclxuICAgIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXHJcbiAgICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUkMShkZWZpbml0aW9uKSB7XHJcbiAgICBsb2NhbGUkMSA9IGZvcm1hdExvY2FsZSQxKGRlZmluaXRpb24pO1xyXG4gICAgdGltZUZvcm1hdCA9IGxvY2FsZSQxLmZvcm1hdDtcclxuICAgIHRpbWVQYXJzZSA9IGxvY2FsZSQxLnBhcnNlO1xyXG4gICAgdXRjRm9ybWF0ID0gbG9jYWxlJDEudXRjRm9ybWF0O1xyXG4gICAgdXRjUGFyc2UgPSBsb2NhbGUkMS51dGNQYXJzZTtcclxuICAgIHJldHVybiBsb2NhbGUkMTtcclxuICB9XHJcblxyXG4gIHZhciBpc29TcGVjaWZpZXIgPSBcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiO1xyXG5cclxuICBmdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xyXG4gICAgICA/IGZvcm1hdElzb05hdGl2ZVxyXG4gICAgICA6IHV0Y0Zvcm1hdChpc29TcGVjaWZpZXIpO1xyXG5cclxuICBmdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcclxuICAgIHZhciBkYXRlID0gbmV3IERhdGUoc3RyaW5nKTtcclxuICAgIHJldHVybiBpc05hTihkYXRlKSA/IG51bGwgOiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgdmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXHJcbiAgICAgID8gcGFyc2VJc29OYXRpdmVcclxuICAgICAgOiB1dGNQYXJzZShpc29TcGVjaWZpZXIpO1xyXG5cclxuICB2YXIgbm9vcCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7fX07XHJcblxyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcclxuICAgICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcclxuICAgICAgX1t0XSA9IFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcclxuICAgIHRoaXMuXyA9IF87XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XHJcbiAgICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcclxuICAgICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcclxuICAgICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XHJcbiAgICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIERpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcclxuICAgIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcclxuICAgIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcclxuICAgICAgdmFyIF8gPSB0aGlzLl8sXHJcbiAgICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcclxuICAgICAgICAgIHQsXHJcbiAgICAgICAgICBpID0gLTEsXHJcbiAgICAgICAgICBuID0gVC5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cclxuICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xyXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xyXG4gICAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XHJcbiAgICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIGNvcHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xyXG4gICAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XHJcbiAgICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XHJcbiAgICB9LFxyXG4gICAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xyXG4gICAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XHJcbiAgICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XHJcbiAgICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xyXG4gICAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xyXG4gICAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gYy52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XHJcbiAgICByZXR1cm4gdHlwZTtcclxuICB9XHJcblxyXG4gIHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xyXG5cclxuICB2YXIgbmFtZXNwYWNlcyA9IHtcclxuICAgIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgeGh0bWw6IHhodG1sLFxyXG4gICAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxyXG4gICAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxyXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIG5hbWVzcGFjZShuYW1lKSB7XHJcbiAgICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xyXG4gICAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xyXG4gICAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXHJcbiAgICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcclxuICAgICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcclxuICAgICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxyXG4gICAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjcmVhdG9yKG5hbWUpIHtcclxuICAgIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcclxuICAgIHJldHVybiAoZnVsbG5hbWUubG9jYWxcclxuICAgICAgICA/IGNyZWF0b3JGaXhlZFxyXG4gICAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG5vbmUoKSB7fVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3RvcihzZWxlY3Rvcikge1xyXG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Qoc2VsZWN0KSB7XHJcbiAgICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xyXG5cclxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcclxuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xyXG4gICAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcclxuICAgICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XHJcbiAgICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGVtcHR5KCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0b3JBbGwoc2VsZWN0b3IpIHtcclxuICAgIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3NlbGVjdEFsbChzZWxlY3QpIHtcclxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XHJcblxyXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcclxuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xyXG4gICAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcclxuICAgICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHBhcmVudHMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbWF0Y2hlcihzZWxlY3Rvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZmlsdGVyKG1hdGNoKSB7XHJcbiAgICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XHJcblxyXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xyXG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcclxuICAgICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNwYXJzZSh1cGRhdGUpIHtcclxuICAgIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZW50ZXIoKSB7XHJcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcclxuICAgIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xyXG4gICAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xyXG4gICAgdGhpcy5fbmV4dCA9IG51bGw7XHJcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XHJcbiAgfVxyXG5cclxuICBFbnRlck5vZGUucHJvdG90eXBlID0ge1xyXG4gICAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcclxuICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXHJcbiAgICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcclxuICAgIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXHJcbiAgICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gY29uc3RhbnQkMih4KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXHJcblxyXG4gIGZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XHJcbiAgICB2YXIgaSA9IDAsXHJcbiAgICAgICAgbm9kZSxcclxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcclxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cclxuICAgIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxyXG4gICAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxyXG4gICAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xyXG4gICAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xyXG4gICAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxyXG4gICAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcclxuICAgICAgICBleGl0W2ldID0gbm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcclxuICAgIHZhciBpLFxyXG4gICAgICAgIG5vZGUsXHJcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWUgPSB7fSxcclxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcclxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXHJcbiAgICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcclxuICAgICAgICBrZXlWYWx1ZTtcclxuXHJcbiAgICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cclxuICAgIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcclxuICAgICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcclxuICAgICAgICBpZiAoa2V5VmFsdWUgaW4gbm9kZUJ5S2V5VmFsdWUpIHtcclxuICAgICAgICAgIGV4aXRbaV0gPSBub2RlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cclxuICAgIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXHJcbiAgICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcclxuICAgICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0pIHtcclxuICAgICAgICB1cGRhdGVbaV0gPSBub2RlO1xyXG4gICAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xyXG4gICAgICAgIG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVzW2ldXSA9PT0gbm9kZSkpIHtcclxuICAgICAgICBleGl0W2ldID0gbm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2RhdGEodmFsdWUsIGtleSkge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBkYXRhID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaiA9IC0xO1xyXG4gICAgICB0aGlzLmVhY2goZnVuY3Rpb24oZCkgeyBkYXRhWysral0gPSBkOyB9KTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxyXG4gICAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxyXG4gICAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcclxuXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQkMih2YWx1ZSk7XHJcblxyXG4gICAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XHJcbiAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxyXG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXHJcbiAgICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcclxuICAgICAgICAgIGRhdGEgPSB2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cyksXHJcbiAgICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXHJcbiAgICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcclxuICAgICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xyXG5cclxuICAgICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xyXG5cclxuICAgICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XHJcbiAgICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXHJcbiAgICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxyXG4gICAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xyXG4gICAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XHJcbiAgICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xyXG4gICAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xyXG4gICAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xyXG4gICAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xyXG4gICAgdXBkYXRlLl9leGl0ID0gZXhpdDtcclxuICAgIHJldHVybiB1cGRhdGU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZXhpdCgpIHtcclxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2V4aXQgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9qb2luKG9uZW50ZXIsIG9udXBkYXRlLCBvbmV4aXQpIHtcclxuICAgIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xyXG4gICAgZW50ZXIgPSB0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiID8gb25lbnRlcihlbnRlcikgOiBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xyXG4gICAgaWYgKG9udXBkYXRlICE9IG51bGwpIHVwZGF0ZSA9IG9udXBkYXRlKHVwZGF0ZSk7XHJcbiAgICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xyXG4gICAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9tZXJnZShzZWxlY3Rpb24pIHtcclxuXHJcbiAgICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xyXG4gICAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XHJcbiAgICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICg7IGogPCBtMDsgKytqKSB7XHJcbiAgICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9vcmRlcigpIHtcclxuXHJcbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XHJcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcclxuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XHJcbiAgICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcclxuICAgICAgICAgIG5leHQgPSBub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3NvcnQoY29tcGFyZSkge1xyXG4gICAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nJDE7XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xyXG4gICAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcclxuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xyXG4gICAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhc2NlbmRpbmckMShhLCBiKSB7XHJcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fY2FsbCgpIHtcclxuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcclxuICAgIGFyZ3VtZW50c1swXSA9IHRoaXM7XHJcbiAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbm9kZXMoKSB7XHJcbiAgICB2YXIgbm9kZXMgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBpID0gLTE7XHJcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9ub2RlKCkge1xyXG5cclxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XHJcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xyXG4gICAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XHJcbiAgICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc2l6ZSgpIHtcclxuICAgIHZhciBzaXplID0gMDtcclxuICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgKytzaXplOyB9KTtcclxuICAgIHJldHVybiBzaXplO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VtcHR5KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLm5vZGUoKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9lYWNoKGNhbGxiYWNrKSB7XHJcblxyXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcclxuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xyXG4gICAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fYXR0cihuYW1lLCB2YWx1ZSkge1xyXG4gICAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xyXG5cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xyXG4gICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xyXG4gICAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcclxuICAgICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXHJcbiAgICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXHJcbiAgICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaWV3KG5vZGUpIHtcclxuICAgIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcclxuICAgICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XHJcbiAgICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcclxuICAgICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc3R5bGUobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcclxuICAgICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxyXG4gICAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxyXG4gICAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcclxuICAgIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcclxuICAgICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByb3BlcnR5Q29uc3RhbnQobmFtZSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcclxuICAgICAgZWxzZSB0aGlzW25hbWVdID0gdjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fcHJvcGVydHkobmFtZSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxyXG4gICAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgICAgICA/IHByb3BlcnR5RnVuY3Rpb25cclxuICAgICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXHJcbiAgICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xyXG4gICAgdGhpcy5fbm9kZSA9IG5vZGU7XHJcbiAgICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcclxuICB9XHJcblxyXG4gIENsYXNzTGlzdC5wcm90b3R5cGUgPSB7XHJcbiAgICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xyXG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcclxuICAgIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XHJcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xyXG4gICAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fY2xhc3NlZChuYW1lLCB2YWx1ZSkge1xyXG4gICAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xyXG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcclxuICAgICAgICA/IGNsYXNzZWRUcnVlXHJcbiAgICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcclxuICAgIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3RleHQodmFsdWUpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcclxuICAgICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cclxuICAgICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcclxuICAgICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcclxuICAgIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGh0bWxDb25zdGFudCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2h0bWwodmFsdWUpIHtcclxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcclxuICAgICAgICAgICAgPyBodG1sRnVuY3Rpb25cclxuICAgICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcclxuICAgICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJhaXNlKCkge1xyXG4gICAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9yYWlzZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbG93ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2xvd2VyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fYXBwZW5kKG5hbWUpIHtcclxuICAgIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25faW5zZXJ0KG5hbWUsIGJlZm9yZSkge1xyXG4gICAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKSxcclxuICAgICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluc2VydEJlZm9yZShjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgbnVsbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZSgpIHtcclxuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XHJcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fcmVtb3ZlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcclxuICAgIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xyXG4gICAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xyXG4gICAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUodHJ1ZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcclxuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lKGRlZXApIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2RhdHVtKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxyXG4gICAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxyXG4gICAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XHJcbiAgfVxyXG5cclxuICB2YXIgZmlsdGVyRXZlbnRzID0ge307XHJcblxyXG4gIHZhciBldmVudCA9IG51bGw7XHJcblxyXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgaWYgKCEoXCJvbm1vdXNlZW50ZXJcIiBpbiBlbGVtZW50KSkge1xyXG4gICAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZpbHRlckNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XHJcbiAgICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcclxuICAgIHJldHVybiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcclxuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQxKSB7XHJcbiAgICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cclxuICAgICAgZXZlbnQgPSBldmVudDE7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGV2ZW50ID0gZXZlbnQwO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXMkMSh0eXBlbmFtZXMpIHtcclxuICAgIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xyXG4gICAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xyXG4gICAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xyXG4gICAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgb24gPSB0aGlzLl9fb247XHJcbiAgICAgIGlmICghb24pIHJldHVybjtcclxuICAgICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xyXG4gICAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb25bKytpXSA9IG87XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XHJcbiAgICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcclxuICAgIHZhciB3cmFwID0gZmlsdGVyRXZlbnRzLmhhc093blByb3BlcnR5KHR5cGVuYW1lLnR5cGUpID8gZmlsdGVyQ29udGV4dExpc3RlbmVyIDogY29udGV4dExpc3RlbmVyO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQsIGksIGdyb3VwKSB7XHJcbiAgICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XHJcbiAgICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcclxuICAgICAgICBpZiAoKG8gPSBvbltqXSkudHlwZSA9PT0gdHlwZW5hbWUudHlwZSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XHJcbiAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8uY2FwdHVyZSA9IGNhcHR1cmUpO1xyXG4gICAgICAgICAgby52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xyXG4gICAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBjYXB0dXJlOiBjYXB0dXJlfTtcclxuICAgICAgaWYgKCFvbikgdGhpcy5fX29uID0gW29dO1xyXG4gICAgICBlbHNlIG9uLnB1c2gobyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0aW9uX29uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xyXG4gICAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzJDEodHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XHJcbiAgICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcclxuICAgICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcclxuICAgICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XHJcbiAgICBpZiAoY2FwdHVyZSA9PSBudWxsKSBjYXB0dXJlID0gZmFsc2U7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjdXN0b21FdmVudChldmVudDEsIGxpc3RlbmVyLCB0aGF0LCBhcmdzKSB7XHJcbiAgICB2YXIgZXZlbnQwID0gZXZlbnQ7XHJcbiAgICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcclxuICAgIGV2ZW50ID0gZXZlbnQxO1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgZXZlbnQgPSBldmVudDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xyXG4gICAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxyXG4gICAgICAgIGV2ZW50ID0gd2luZG93LkN1c3RvbUV2ZW50O1xyXG5cclxuICAgIGlmICh0eXBlb2YgZXZlbnQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXZlbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcclxuICAgICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XHJcbiAgICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbm9kZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcyk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9kaXNwYXRjaCh0eXBlLCBwYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgID8gZGlzcGF0Y2hGdW5jdGlvblxyXG4gICAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XHJcbiAgfVxyXG5cclxuICB2YXIgcm9vdCA9IFtudWxsXTtcclxuXHJcbiAgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xyXG4gICAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xyXG4gICAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcclxuICB9XHJcblxyXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xyXG4gICAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcclxuICAgIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcclxuICAgIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcclxuICAgIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcclxuICAgIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxyXG4gICAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcclxuICAgIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxyXG4gICAgam9pbjogc2VsZWN0aW9uX2pvaW4sXHJcbiAgICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxyXG4gICAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcclxuICAgIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxyXG4gICAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXHJcbiAgICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxyXG4gICAgbm9kZTogc2VsZWN0aW9uX25vZGUsXHJcbiAgICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcclxuICAgIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXHJcbiAgICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcclxuICAgIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxyXG4gICAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcclxuICAgIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXHJcbiAgICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcclxuICAgIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxyXG4gICAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXHJcbiAgICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxyXG4gICAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcclxuICAgIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcclxuICAgIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcclxuICAgIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcclxuICAgIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXHJcbiAgICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxyXG4gICAgb246IHNlbGVjdGlvbl9vbixcclxuICAgIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2hcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBzZWxlY3Qoc2VsZWN0b3IpIHtcclxuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcclxuICAgICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcclxuICAgICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNvdXJjZUV2ZW50KCkge1xyXG4gICAgdmFyIGN1cnJlbnQgPSBldmVudCwgc291cmNlO1xyXG4gICAgd2hpbGUgKHNvdXJjZSA9IGN1cnJlbnQuc291cmNlRXZlbnQpIGN1cnJlbnQgPSBzb3VyY2U7XHJcbiAgICByZXR1cm4gY3VycmVudDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHBvaW50KG5vZGUsIGV2ZW50KSB7XHJcbiAgICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcclxuXHJcbiAgICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XHJcbiAgICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xyXG4gICAgICBwb2ludC54ID0gZXZlbnQuY2xpZW50WCwgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcclxuICAgICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1vdXNlKG5vZGUpIHtcclxuICAgIHZhciBldmVudCA9IHNvdXJjZUV2ZW50KCk7XHJcbiAgICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XHJcbiAgICByZXR1cm4gcG9pbnQobm9kZSwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdG91Y2gobm9kZSwgdG91Y2hlcywgaWRlbnRpZmllcikge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBpZGVudGlmaWVyID0gdG91Y2hlcywgdG91Y2hlcyA9IHNvdXJjZUV2ZW50KCkuY2hhbmdlZFRvdWNoZXM7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0b3VjaGVzID8gdG91Y2hlcy5sZW5ndGggOiAwLCB0b3VjaDsgaSA8IG47ICsraSkge1xyXG4gICAgICBpZiAoKHRvdWNoID0gdG91Y2hlc1tpXSkuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xyXG4gICAgICAgIHJldHVybiBwb2ludChub2RlLCB0b3VjaCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG5vZXZlbnQoKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBub2RyYWcodmlldykge1xyXG4gICAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcclxuICAgICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcclxuICAgIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XHJcbiAgICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbm9ldmVudCwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb290Ll9fbm9zZWxlY3QgPSByb290LnN0eWxlLk1velVzZXJTZWxlY3Q7XHJcbiAgICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XHJcbiAgICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG51bGwpO1xyXG4gICAgaWYgKG5vY2xpY2spIHtcclxuICAgICAgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcclxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBudWxsKTsgfSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXCJvbnNlbGVjdHN0YXJ0XCIgaW4gcm9vdCkge1xyXG4gICAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gcm9vdC5fX25vc2VsZWN0O1xyXG4gICAgICBkZWxldGUgcm9vdC5fX25vc2VsZWN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29uc3RhbnQkMyh4KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIERyYWdFdmVudCh0YXJnZXQsIHR5cGUsIHN1YmplY3QsIGlkLCBhY3RpdmUsIHgsIHksIGR4LCBkeSwgZGlzcGF0Y2gpIHtcclxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuc3ViamVjdCA9IHN1YmplY3Q7XHJcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZDtcclxuICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xyXG4gICAgdGhpcy54ID0geDtcclxuICAgIHRoaXMueSA9IHk7XHJcbiAgICB0aGlzLmR4ID0gZHg7XHJcbiAgICB0aGlzLmR5ID0gZHk7XHJcbiAgICB0aGlzLl8gPSBkaXNwYXRjaDtcclxuICB9XHJcblxyXG4gIERyYWdFdmVudC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciB2YWx1ZSA9IHRoaXMuXy5vbi5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7XHJcbiAgICByZXR1cm4gdmFsdWUgPT09IHRoaXMuXyA/IHRoaXMgOiB2YWx1ZTtcclxuICB9O1xyXG5cclxuICAvLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cclxuICBmdW5jdGlvbiBkZWZhdWx0RmlsdGVyKCkge1xyXG4gICAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWZhdWx0Q29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlZmF1bHRTdWJqZWN0KGQpIHtcclxuICAgIHJldHVybiBkID09IG51bGwgPyB7eDogZXZlbnQueCwgeTogZXZlbnQueX0gOiBkO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkcmFnKCkge1xyXG4gICAgdmFyIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXHJcbiAgICAgICAgY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcixcclxuICAgICAgICBzdWJqZWN0ID0gZGVmYXVsdFN1YmplY3QsXHJcbiAgICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcclxuICAgICAgICBnZXN0dXJlcyA9IHt9LFxyXG4gICAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJkcmFnXCIsIFwiZW5kXCIpLFxyXG4gICAgICAgIGFjdGl2ZSA9IDAsXHJcbiAgICAgICAgbW91c2Vkb3dueCxcclxuICAgICAgICBtb3VzZWRvd255LFxyXG4gICAgICAgIG1vdXNlbW92aW5nLFxyXG4gICAgICAgIHRvdWNoZW5kaW5nLFxyXG4gICAgICAgIGNsaWNrRGlzdGFuY2UyID0gMDtcclxuXHJcbiAgICBmdW5jdGlvbiBkcmFnKHNlbGVjdGlvbikge1xyXG4gICAgICBzZWxlY3Rpb25cclxuICAgICAgICAgIC5vbihcIm1vdXNlZG93bi5kcmFnXCIsIG1vdXNlZG93bmVkKVxyXG4gICAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxyXG4gICAgICAgICAgLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsIHRvdWNoc3RhcnRlZClcclxuICAgICAgICAgIC5vbihcInRvdWNobW92ZS5kcmFnXCIsIHRvdWNobW92ZWQpXHJcbiAgICAgICAgICAub24oXCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWdcIiwgdG91Y2hlbmRlZClcclxuICAgICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcclxuICAgICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbW91c2Vkb3duZWQoKSB7XHJcbiAgICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcclxuICAgICAgdmFyIGdlc3R1cmUgPSBiZWZvcmVzdGFydChcIm1vdXNlXCIsIGNvbnRhaW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBtb3VzZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgaWYgKCFnZXN0dXJlKSByZXR1cm47XHJcbiAgICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnXCIsIG1vdXNlbW92ZWQsIHRydWUpLm9uKFwibW91c2V1cC5kcmFnXCIsIG1vdXNldXBwZWQsIHRydWUpO1xyXG4gICAgICBub2RyYWcoZXZlbnQudmlldyk7XHJcbiAgICAgIG5vcHJvcGFnYXRpb24oKTtcclxuICAgICAgbW91c2Vtb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgbW91c2Vkb3dueCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgIG1vdXNlZG93bnkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgICBnZXN0dXJlKFwic3RhcnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbW91c2Vtb3ZlZCgpIHtcclxuICAgICAgbm9ldmVudCgpO1xyXG4gICAgICBpZiAoIW1vdXNlbW92aW5nKSB7XHJcbiAgICAgICAgdmFyIGR4ID0gZXZlbnQuY2xpZW50WCAtIG1vdXNlZG93bngsIGR5ID0gZXZlbnQuY2xpZW50WSAtIG1vdXNlZG93bnk7XHJcbiAgICAgICAgbW91c2Vtb3ZpbmcgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xyXG4gICAgICB9XHJcbiAgICAgIGdlc3R1cmVzLm1vdXNlKFwiZHJhZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtb3VzZXVwcGVkKCkge1xyXG4gICAgICBzZWxlY3QoZXZlbnQudmlldykub24oXCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWdcIiwgbnVsbCk7XHJcbiAgICAgIHllc2RyYWcoZXZlbnQudmlldywgbW91c2Vtb3ZpbmcpO1xyXG4gICAgICBub2V2ZW50KCk7XHJcbiAgICAgIGdlc3R1cmVzLm1vdXNlKFwiZW5kXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZCgpIHtcclxuICAgICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xyXG4gICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxyXG4gICAgICAgICAgYyA9IGNvbnRhaW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxyXG4gICAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xyXG4gICAgICAgIGlmIChnZXN0dXJlID0gYmVmb3Jlc3RhcnQodG91Y2hlc1tpXS5pZGVudGlmaWVyLCBjLCB0b3VjaCwgdGhpcywgYXJndW1lbnRzKSkge1xyXG4gICAgICAgICAgbm9wcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgZ2VzdHVyZShcInN0YXJ0XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvdWNobW92ZWQoKSB7XHJcbiAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXHJcbiAgICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgICBub2V2ZW50KCk7XHJcbiAgICAgICAgICBnZXN0dXJlKFwiZHJhZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0b3VjaGVuZGVkKCkge1xyXG4gICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxyXG4gICAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xyXG5cclxuICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xyXG4gICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgICBub3Byb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICBnZXN0dXJlKFwiZW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJlZm9yZXN0YXJ0KGlkLCBjb250YWluZXIsIHBvaW50LCB0aGF0LCBhcmdzKSB7XHJcbiAgICAgIHZhciBwID0gcG9pbnQoY29udGFpbmVyLCBpZCksIHMsIGR4LCBkeSxcclxuICAgICAgICAgIHN1Ymxpc3RlbmVycyA9IGxpc3RlbmVycy5jb3B5KCk7XHJcblxyXG4gICAgICBpZiAoIWN1c3RvbUV2ZW50KG5ldyBEcmFnRXZlbnQoZHJhZywgXCJiZWZvcmVzdGFydFwiLCBzLCBpZCwgYWN0aXZlLCBwWzBdLCBwWzFdLCAwLCAwLCBzdWJsaXN0ZW5lcnMpLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoKGV2ZW50LnN1YmplY3QgPSBzID0gc3ViamVjdC5hcHBseSh0aGF0LCBhcmdzKSkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGR4ID0gcy54IC0gcFswXSB8fCAwO1xyXG4gICAgICAgIGR5ID0gcy55IC0gcFsxXSB8fCAwO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KSkgcmV0dXJuO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlc3R1cmUodHlwZSkge1xyXG4gICAgICAgIHZhciBwMCA9IHAsIG47XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFwic3RhcnRcIjogZ2VzdHVyZXNbaWRdID0gZ2VzdHVyZSwgbiA9IGFjdGl2ZSsrOyBicmVhaztcclxuICAgICAgICAgIGNhc2UgXCJlbmRcIjogZGVsZXRlIGdlc3R1cmVzW2lkXSwgLS1hY3RpdmU7IC8vIG5vYnJlYWtcclxuICAgICAgICAgIGNhc2UgXCJkcmFnXCI6IHAgPSBwb2ludChjb250YWluZXIsIGlkKSwgbiA9IGFjdGl2ZTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1c3RvbUV2ZW50KG5ldyBEcmFnRXZlbnQoZHJhZywgdHlwZSwgcywgaWQsIG4sIHBbMF0gKyBkeCwgcFsxXSArIGR5LCBwWzBdIC0gcDBbMF0sIHBbMV0gLSBwMFsxXSwgc3VibGlzdGVuZXJzKSwgc3VibGlzdGVuZXJzLmFwcGx5LCBzdWJsaXN0ZW5lcnMsIFt0eXBlLCB0aGF0LCBhcmdzXSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZHJhZy5maWx0ZXIgPSBmdW5jdGlvbihfKSB7XHJcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQkMyghIV8pLCBkcmFnKSA6IGZpbHRlcjtcclxuICAgIH07XHJcblxyXG4gICAgZHJhZy5jb250YWluZXIgPSBmdW5jdGlvbihfKSB7XHJcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRhaW5lciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQkMyhfKSwgZHJhZykgOiBjb250YWluZXI7XHJcbiAgICB9O1xyXG5cclxuICAgIGRyYWcuc3ViamVjdCA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3ViamVjdCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQkMyhfKSwgZHJhZykgOiBzdWJqZWN0O1xyXG4gICAgfTtcclxuXHJcbiAgICBkcmFnLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcclxuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCQzKCEhXyksIGRyYWcpIDogdG91Y2hhYmxlO1xyXG4gICAgfTtcclxuXHJcbiAgICBkcmFnLm9uID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XHJcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gZHJhZyA6IHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBkcmFnLmNsaWNrRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XHJcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCBkcmFnKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBkcmFnO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xyXG5cclxuICBjb25zdCBUJGEgPSBUZW1wbGF0ZSgnZC1zbGlkZXInLCBgXHJcbjxzdHlsZT5cclxuICA6aG9zdCB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgfVxyXG5cclxuICA6aG9zdCg6Zm9jdXMpIHtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAuYmFja2dyb3VuZCB7XHJcbiAgICBwYWRkaW5nOiA5cHggMDtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB9XHJcblxyXG4gIC50cmFjayB7XHJcbiAgICBoZWlnaHQ6IDNweDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuMik7XHJcbiAgfVxyXG5cclxuICAudHJhY2stZmlsbCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDlweDtcclxuICAgIGhlaWdodDogM3B4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0LCAxMDAlLCA1MCUpO1xyXG4gIH1cclxuXHJcbiAgLmtub2ItY29udGFpbmVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMTBweDtcclxuICB9XHJcblxyXG4gIC5rbm9iIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTZweDtcclxuICAgIGxlZnQ6IC02cHg7XHJcbiAgICB3aWR0aDogMTNweDtcclxuICAgIGhlaWdodDogMTNweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCgyNCwgMTAwJSwgNTAlKTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcclxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzO1xyXG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XHJcbiAgfVxyXG4gIC5tb3VzZWRvd24gLmtub2Ige1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpO1xyXG4gIH1cclxuXHJcbiAgLmtub2ItaGlnaGxpZ2h0IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTZweDtcclxuICAgIGxlZnQ6IC02cHg7XHJcbiAgICB3aWR0aDogMTNweDtcclxuICAgIGhlaWdodDogMTNweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbGEoMCwgMCUsIDAlLCAwLjEpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtO1xyXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7XHJcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcclxuICB9XHJcblxyXG4gIC5mb2N1cyAua25vYi1oaWdobGlnaHQge1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgyKTtcclxuICB9XHJcblxyXG4gIC50aWNrcyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDE2cHg7XHJcbiAgICBoZWlnaHQ6IDRweDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgei1pbmRleDogLTE7XHJcbiAgfVxyXG5cclxuICAudGlja3MgLnRpY2sge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2xhKDAsIDAlLCAwJSwgMC4yKTtcclxuICB9XHJcblxyXG48L3N0eWxlPlxyXG5cclxuICA8ZGl2IGNsYXNzPSdiYWNrZ3JvdW5kJz5cclxuICAgIDxkaXYgY2xhc3M9J3RyYWNrJz48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9J3RyYWNrLWZpbGwnPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz0na25vYi1jb250YWluZXInPlxyXG4gICAgICA8ZGl2IGNsYXNzPSdrbm9iLWhpZ2hsaWdodCc+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2tub2InPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPSd0aWNrcyc+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbmApO1xyXG5cclxuICAvLyBBUklBXHJcbiAgLy8gSWYgdGhlIHNsaWRlciBoYXMgYSB2aXNpYmxlIGxhYmVsLCBpdCBpcyByZWZlcmVuY2VkIGJ5IGFyaWEtbGFiZWxsZWRieSBvbiB0aGUgc2xpZGVyIGVsZW1lbnQuIE90aGVyd2lzZSwgdGhlIHNsaWRlciBlbGVtZW50IGhhcyBhIGxhYmVsIHByb3ZpZGVkIGJ5IGFyaWEtbGFiZWwuXHJcbiAgLy8gSWYgdGhlIHNsaWRlciBpcyB2ZXJ0aWNhbGx5IG9yaWVudGVkLCBpdCBoYXMgYXJpYS1vcmllbnRhdGlvbiBzZXQgdG8gdmVydGljYWwuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGFyaWEtb3JpZW50YXRpb24gZm9yIGEgc2xpZGVyIGlzIGhvcml6b250YWwuXHJcblxyXG4gIGNvbnN0IGtleUNvZGVzID0ge1xyXG4gICAgbGVmdDogMzcsXHJcbiAgICB1cDogMzgsXHJcbiAgICByaWdodDogMzksXHJcbiAgICBkb3duOiA0MCxcclxuICAgIHBhZ2VVcDogMzMsXHJcbiAgICBwYWdlRG93bjogMzQsXHJcbiAgICBlbmQ6IDM1LFxyXG4gICAgaG9tZTogMzZcclxuICB9O1xyXG5cclxuICBjbGFzcyBTbGlkZXIgZXh0ZW5kcyBUJGEoSFRNTEVsZW1lbnQpIHtcclxuXHJcblxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnc2xpZGVyJyk7XHJcbiAgICAgIC8vIE1ha2VzIHRoZSBlbGVtZW50IHRhYi1hYmxlLlxyXG4gICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7IHRoaXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApOyB9XHJcblxyXG4gICAgICAvLyBLZWVwcyB0cmFjayBvZiBrZXlib2FyZCB2cy4gbW91c2UgaW50ZXJhY3Rpb25zIGZvciBmb2N1cyByaW5nc1xyXG4gICAgICB0aGlzLm1vdXNlRXZlbnQgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIEhhbmRsZXMgdG8gc2hhZG93IERPTSBlbGVtZW50c1xyXG4gICAgICB0aGlzLmtub2IgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLmtub2ItY29udGFpbmVyJyk7XHJcbiAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcuYmFja2dyb3VuZCcpO1xyXG4gICAgICB0aGlzLnRyYWNrRmlsbCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcudHJhY2stZmlsbCcpO1xyXG4gICAgICB0aGlzLnRyYWNrID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy50cmFjaycpO1xyXG5cclxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIGF0dHJpYnV0ZXNcclxuICAgICAgdGhpcy5taW4gPSB0aGlzLm1pbiA/IHRoaXMubWluIDogMDtcclxuICAgICAgdGhpcy5tYXggPSB0aGlzLm1heCA/IHRoaXMubWF4IDogMTAwO1xyXG4gICAgICB0aGlzLnNjYWxlID0gbGluZWFyJDEoKS5kb21haW4oW3RoaXMubWluLCB0aGlzLm1heF0pLnJhbmdlKFswLCAxXSkuY2xhbXAodHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLm9yaWdpbiA9IHRoaXMub3JpZ2luICE9PSB1bmRlZmluZWQgPyB0aGlzLm9yaWdpbiA6IHRoaXMubWluO1xyXG4gICAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgPyB0aGlzLnN0ZXAgOiAxO1xyXG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IDApO1xyXG5cclxuICAgICAgdGhpcy50aWNrcyA9IHRoaXMudGlja3MgPyB0aGlzLnRpY2tzIDogZmFsc2U7XHJcbiAgICAgIHRoaXMucmVuZGVyVGlja3MoKTtcclxuXHJcbiAgICAgIHRoaXMuZHJhZyA9IGRyYWcoKVxyXG4gICAgICAgIC5jb250YWluZXIodGhpcy5iYWNrZ3JvdW5kKVxyXG4gICAgICAgIC5vbignc3RhcnQnLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vdXNlRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNsYXNzTGlzdC5hZGQoJ21vdXNlZG93bicpO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmRyYWdVcGRhdGUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbignZHJhZycsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHJhZ1VwZGF0ZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vdXNlRXZlbnQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QucmVtb3ZlKCdtb3VzZWRvd24nKTtcclxuICAgICAgICAgIHRoaXMuZHJhZ1VwZGF0ZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2hhbmdlVmFsdWUgIT09IHRoaXMudmFsdWUpIHRoaXMuZGlzcGF0Y2hDaGFuZ2UoKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRyYWcoc2VsZWN0KHRoaXMuYmFja2dyb3VuZCkpO1xyXG5cclxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKCkgPT4ge1xyXG4gICAgICAgIGlmKCF0aGlzLm1vdXNlRXZlbnQpIHtcclxuICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKCdmb2N1cycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNsYXNzTGlzdC5yZW1vdmUoJ2ZvY3VzJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge3JldHVybiBbJ21pbicsICdtYXgnLCAndmFsdWUnLCAnc3RlcCcsICd0aWNrcycsICdvcmlnaW4nLCAndGlja1ZhbHVlcycsICd0aWNrTGFiZWxzJ107IH1cclxuXHJcbiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ciwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XHJcbiAgICAgIGlmIChpc05hTihuZXdWYWx1ZSkgfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBuZXdWYWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICBpZiAoYXR0ciA9PSAnbWluJykge1xyXG4gICAgICAgIHRoaXMubWluID0gK25ld1ZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJywgdGhpcy5taW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhdHRyID09ICdtYXgnKSB7XHJcbiAgICAgICAgdGhpcy5tYXggPSArbmV3VmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtYXgnLCB0aGlzLm1heCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF0dHIgPT0gJ3ZhbHVlJykge1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCtuZXdWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF0dHIgPT0gJ29yaWdpbicpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbiA9ICtuZXdWYWx1ZTtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXR0ciA9PSAnc3RlcCcpIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0ZXAgPSArbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChhdHRyID09ICd0aWNrcycpIHtcclxuICAgICAgICB0aGlzLnRpY2tzID0gKG5ld1ZhbHVlID09PSAnJyA/IHRydWUgOiBuZXdWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbktleURvd24oZXZlbnQpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgIGxldCBzdG9wUHJvcGFnYXRpb24gPSBmYWxzZTtcclxuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgIGNhc2Uga2V5Q29kZXMubGVmdDpcclxuICAgICAgY2FzZSBrZXlDb2Rlcy5kb3duOlxyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMudmFsdWUgLSB0aGlzLnN0ZXApO1xyXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2Uga2V5Q29kZXMucmlnaHQ6XHJcbiAgICAgIGNhc2Uga2V5Q29kZXMudXA6XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy52YWx1ZSArIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBrZXlDb2Rlcy5wYWdlVXA6XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy52YWx1ZSArIHRoaXMuc3RlcCAqIDEwKTtcclxuICAgICAgICBzdG9wUHJvcGFnYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBrZXlDb2Rlcy5wYWdlRG93bjpcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlICsgdGhpcy5zdGVwICogMTApO1xyXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2Uga2V5Q29kZXMuaG9tZTpcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLm1pbik7XHJcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBrZXlDb2Rlcy5lbmQ6XHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5tYXgpO1xyXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKCdmb2N1cycpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlVmFsdWUgIT09IHRoaXMudmFsdWUpIHRoaXMuZGlzcGF0Y2hDaGFuZ2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlVmFsdWVSYW5nZShtaW4sIG1heCwgdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG1heCwgdmFsdWUpLCBtaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHF1YW50aXplVmFsdWUodmFsdWUsIHN0ZXApIHtcclxuICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgZHJhZ1VwZGF0ZSgpIHtcclxuICAgICAgY29uc3QgYmJveCA9IHRoaXMuYmFja2dyb3VuZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgY29uc3QgeCA9IGV2ZW50Lng7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gYmJveC53aWR0aDtcclxuICAgICAgdGhpcy51cGRhdGUodGhpcy5zY2FsZS5pbnZlcnQoeCAvIHdpZHRoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHZhbHVlKSB7XHJcbiAgICAgIGxldCB2ID0gdmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLnN0ZXAgIT09ICdhbnknKSB7XHJcbiAgICAgICAgdiA9IHRoaXMucXVhbnRpemVWYWx1ZSh2YWx1ZSwgdGhpcy5zdGVwKTtcclxuICAgICAgfVxyXG4gICAgICB2ID0gdGhpcy52YWxpZGF0ZVZhbHVlUmFuZ2UodGhpcy5taW4sIHRoaXMubWF4LCB2KTtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5rbm9iLnN0eWxlLmxlZnQgPSB0aGlzLnNjYWxlKHYpICogMTAwICsgJyUnO1xyXG4gICAgICAgIHRoaXMudHJhY2tGaWxsLnN0eWxlLndpZHRoID0gdGhpcy5zY2FsZSh0aGlzLm1pbiArIE1hdGguYWJzKHYgLSB0aGlzLm9yaWdpbikpICogMTAwICsgJyUnO1xyXG4gICAgICAgIHRoaXMudHJhY2tGaWxsLnN0eWxlLmxlZnQgPSB0aGlzLnNjYWxlKE1hdGgubWluKHYsIHRoaXMub3JpZ2luKSkgKiAxMDAgKyAnJSc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHYpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdjtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hJbnB1dCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGlzcGF0Y2hlcyBvbmx5IG9uIGEgY29tbWl0dGVkIGNoYW5nZSAoYmFzaWNhbGx5IG9ubHkgb24gbW91c2V1cCkuXHJcbiAgICBkaXNwYXRjaENoYW5nZSgpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFdmVudCgnY2hhbmdlJyk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGlzcGF0Y2hlcyBvbiBlYWNoIHZhbHVlIGNoYW5nZS5cclxuICAgIGRpc3BhdGNoSW5wdXQoKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXZlbnQoJ2lucHV0Jyk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyVGlja3MoKSB7XHJcbiAgICAgIGNvbnN0IHRpY2tzQ29udGFpbmVyID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy50aWNrcycpO1xyXG4gICAgICBpZiAodGhpcy50aWNrcyAhPT0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgdGlja0RhdGEgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50aWNrcyA+IDApIHtcclxuICAgICAgICAgIHRpY2tEYXRhID0gdGhpcy5zY2FsZS50aWNrcyh0aGlzLnRpY2tzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcCA9PT0gJ2FueScpIHtcclxuICAgICAgICAgIHRpY2tEYXRhID0gdGhpcy5zY2FsZS50aWNrcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aWNrRGF0YSA9IHJhbmdlKHRoaXMubWluLCB0aGlzLm1heCArIDFlLTYsIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpY2tEYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0aWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICB0aWNrLmNsYXNzTGlzdC5hZGQoJ3RpY2snKTtcclxuICAgICAgICAgIHRpY2suc3R5bGUubGVmdCA9IHRoaXMuc2NhbGUoZCkgKiAxMDAgKyAnJSc7XHJcbiAgICAgICAgICB0aWNrc0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aWNrKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aWNrc0NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgbG9nbyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCItNjA3IDQxOSA2NCA2NFxcXCI+XFxuICA8cGF0aCBkPVxcXCJNLTU3My40LDQ3OC45Yy04LDAtMTQuNi02LjQtMTQuNi0xNC41czE0LjYtMjUuOSwxNC42LTQwLjhjMCwxNC45LDE0LjYsMzIuOCwxNC42LDQwLjhTLTU2NS40LDQ3OC45LTU3My40LDQ3OC45elxcXCIvPlxcbjwvc3ZnPlxcblwiO1xyXG5cclxuICBjb25zdCBoZWFkZXJUZW1wbGF0ZSA9IGBcclxuPHN0eWxlPlxyXG5kaXN0aWxsLWhlYWRlciB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGhlaWdodDogNjBweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMjAwLCA2MCUsIDE1JSk7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICB6LWluZGV4OiAyO1xyXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCk7XHJcbiAgYm94LXNoYWRvdzogMCAxcHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XHJcbn1cclxuZGlzdGlsbC1oZWFkZXIgLmNvbnRlbnQge1xyXG4gIGhlaWdodDogNzBweDtcclxuICBncmlkLWNvbHVtbjogcGFnZTtcclxufVxyXG5kaXN0aWxsLWhlYWRlciBhIHtcclxuICBmb250LXNpemU6IDE2cHg7XHJcbiAgaGVpZ2h0OiA2MHB4O1xyXG4gIGxpbmUtaGVpZ2h0OiA2MHB4O1xyXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xyXG4gIHBhZGRpbmc6IDIycHggMDtcclxufVxyXG5kaXN0aWxsLWhlYWRlciBhOmhvdmVyIHtcclxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAxKTtcclxufVxyXG5kaXN0aWxsLWhlYWRlciBzdmcge1xyXG4gIHdpZHRoOiAyNHB4O1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB0b3A6IDRweDtcclxuICBtYXJnaW4tcmlnaHQ6IDJweDtcclxufVxyXG5AbWVkaWEobWluLXdpZHRoOiAxMDgwcHgpIHtcclxuICBkaXN0aWxsLWhlYWRlciB7XHJcbiAgICBoZWlnaHQ6IDcwcHg7XHJcbiAgfVxyXG4gIGRpc3RpbGwtaGVhZGVyIGEge1xyXG4gICAgaGVpZ2h0OiA3MHB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDcwcHg7XHJcbiAgICBwYWRkaW5nOiAyOHB4IDA7XHJcbiAgfVxyXG4gIGRpc3RpbGwtaGVhZGVyIC5sb2dvIHtcclxuICB9XHJcbn1cclxuZGlzdGlsbC1oZWFkZXIgc3ZnIHBhdGgge1xyXG4gIGZpbGw6IG5vbmU7XHJcbiAgc3Ryb2tlOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XHJcbiAgc3Ryb2tlLXdpZHRoOiAzcHg7XHJcbn1cclxuZGlzdGlsbC1oZWFkZXIgLmxvZ28ge1xyXG4gIGZvbnQtc2l6ZTogMTdweDtcclxuICBmb250LXdlaWdodDogMjAwO1xyXG59XHJcbmRpc3RpbGwtaGVhZGVyIC5uYXYge1xyXG4gIGZsb2F0OiByaWdodDtcclxuICBmb250LXdlaWdodDogMzAwO1xyXG59XHJcbmRpc3RpbGwtaGVhZGVyIC5uYXYgYSB7XHJcbiAgZm9udC1zaXplOiAxMnB4O1xyXG4gIG1hcmdpbi1sZWZ0OiAyNHB4O1xyXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XHJcbn1cclxuPC9zdHlsZT5cclxuPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICA8YSBocmVmPVwiL1wiIGNsYXNzPVwibG9nb1wiPlxyXG4gICAgJHtsb2dvfVxyXG4gICAgRGlzdGlsbFxyXG4gIDwvYT5cclxuICA8bmF2IGNsYXNzPVwibmF2XCI+XHJcbiAgICA8YSBocmVmPVwiL2Fib3V0L1wiPkFib3V0PC9hPlxyXG4gICAgPGEgaHJlZj1cIi9wcml6ZS9cIj5Qcml6ZTwvYT5cclxuICAgIDxhIGhyZWY9XCIvam91cm5hbC9cIj5TdWJtaXQ8L2E+XHJcbiAgPC9uYXY+XHJcbjwvZGl2PlxyXG5gO1xyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkYiA9IFRlbXBsYXRlKCdkaXN0aWxsLWhlYWRlcicsIGhlYWRlclRlbXBsYXRlLCBmYWxzZSk7XHJcblxyXG4gIGNsYXNzIERpc3RpbGxIZWFkZXIgZXh0ZW5kcyBUJGIoSFRNTEVsZW1lbnQpIHtcclxuXHJcbiAgfVxyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IHN0eWxlcyQyID0gYFxyXG48c3R5bGU+XHJcbiAgZGlzdGlsbC1hcHBlbmRpeCB7XHJcbiAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7XHJcbiAgfVxyXG5cclxuICBkaXN0aWxsLWFwcGVuZGl4IC5jaXRhdGlvbiB7XHJcbiAgICBmb250LXNpemU6IDExcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTVweDtcclxuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEpO1xyXG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTtcclxuICAgIHBhZGRpbmc6IDEwcHggMThweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgIGNvbG9yOiByZ2JhKDE1MCwgMTUwLCAxNTAsIDEpO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIG1hcmdpbi10b3A6IC0xMnB4O1xyXG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xyXG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xyXG4gIH1cclxuXHJcbiAgZGlzdGlsbC1hcHBlbmRpeCA+ICoge1xyXG4gICAgZ3JpZC1jb2x1bW46IHRleHQ7XHJcbiAgfVxyXG48L3N0eWxlPlxyXG5gO1xyXG5cclxuICBmdW5jdGlvbiBhcHBlbmRpeFRlbXBsYXRlKGZyb250TWF0dGVyKSB7XHJcbiAgICBsZXQgaHRtbCA9IHN0eWxlcyQyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZnJvbnRNYXR0ZXIuZ2l0aHViVXJsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBodG1sICs9IGBcclxuICAgIDxoMyBpZD1cInVwZGF0ZXMtYW5kLWNvcnJlY3Rpb25zXCI+VXBkYXRlcyBhbmQgQ29ycmVjdGlvbnM8L2gzPlxyXG4gICAgPHA+YDtcclxuICAgICAgaWYgKGZyb250TWF0dGVyLmdpdGh1YkNvbXBhcmVVcGRhdGVzVXJsKSB7XHJcbiAgICAgICAgaHRtbCArPSBgPGEgaHJlZj1cIiR7ZnJvbnRNYXR0ZXIuZ2l0aHViQ29tcGFyZVVwZGF0ZXNVcmx9XCI+VmlldyBhbGwgY2hhbmdlczwvYT4gdG8gdGhpcyBhcnRpY2xlIHNpbmNlIGl0IHdhcyBmaXJzdCBwdWJsaXNoZWQuYDtcclxuICAgICAgfVxyXG4gICAgICBodG1sICs9IGBcclxuICAgIElmIHlvdSBzZWUgbWlzdGFrZXMgb3Igd2FudCB0byBzdWdnZXN0IGNoYW5nZXMsIHBsZWFzZSA8YSBocmVmPVwiJHtmcm9udE1hdHRlci5naXRodWJVcmwgKyAnL2lzc3Vlcy9uZXcnfVwiPmNyZWF0ZSBhbiBpc3N1ZSBvbiBHaXRIdWI8L2E+LiA8L3A+XHJcbiAgICBgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGpvdXJuYWwgPSBmcm9udE1hdHRlci5qb3VybmFsO1xyXG4gICAgaWYgKHR5cGVvZiBqb3VybmFsICE9PSAndW5kZWZpbmVkJyAmJiBqb3VybmFsLnRpdGxlID09PSAnRGlzdGlsbCcpIHtcclxuICAgICAgaHRtbCArPSBgXHJcbiAgICA8aDMgaWQ9XCJyZXVzZVwiPlJldXNlPC9oMz5cclxuICAgIDxwPkRpYWdyYW1zIGFuZCB0ZXh0IGFyZSBsaWNlbnNlZCB1bmRlciBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDxhIGhyZWY9XCJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL1wiPkNDLUJZIDQuMDwvYT4gd2l0aCB0aGUgPGEgY2xhc3M9XCJnaXRodWJcIiBocmVmPVwiJHtmcm9udE1hdHRlci5naXRodWJVcmx9XCI+c291cmNlIGF2YWlsYWJsZSBvbiBHaXRIdWI8L2E+LCB1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLiBUaGUgZmlndXJlcyB0aGF0IGhhdmUgYmVlbiByZXVzZWQgZnJvbSBvdGhlciBzb3VyY2VzIGRvbuKAmXQgZmFsbCB1bmRlciB0aGlzIGxpY2Vuc2UgYW5kIGNhbiBiZSByZWNvZ25pemVkIGJ5IGEgbm90ZSBpbiB0aGVpciBjYXB0aW9uOiDigJxGaWd1cmUgZnJvbSDigKbigJ0uPC9wPlxyXG4gICAgYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGZyb250TWF0dGVyLnB1Ymxpc2hlZERhdGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGh0bWwgKz0gYFxyXG4gICAgPGgzIGlkPVwiY2l0YXRpb25cIj5DaXRhdGlvbjwvaDM+XHJcbiAgICA8cD5Gb3IgYXR0cmlidXRpb24gaW4gYWNhZGVtaWMgY29udGV4dHMsIHBsZWFzZSBjaXRlIHRoaXMgd29yayBhczwvcD5cclxuICAgIDxwcmUgY2xhc3M9XCJjaXRhdGlvbiBzaG9ydFwiPiR7ZnJvbnRNYXR0ZXIuY29uY2F0ZW5hdGVkQXV0aG9yc30sIFwiJHtmcm9udE1hdHRlci50aXRsZX1cIiwgRGlzdGlsbCwgJHtmcm9udE1hdHRlci5wdWJsaXNoZWRZZWFyfS48L3ByZT5cclxuICAgIDxwPkJpYlRlWCBjaXRhdGlvbjwvcD5cclxuICAgIDxwcmUgY2xhc3M9XCJjaXRhdGlvbiBsb25nXCI+JHtzZXJpYWxpemVGcm9udG1hdHRlclRvQmlidGV4KGZyb250TWF0dGVyKX08L3ByZT5cclxuICAgIGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuICBjbGFzcyBEaXN0aWxsQXBwZW5kaXggZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcblxyXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkaXN0aWxsLWFwcGVuZGl4JzsgfVxyXG5cclxuICAgIHNldCBmcm9udE1hdHRlcihmcm9udE1hdHRlcikge1xyXG4gICAgICB0aGlzLmlubmVySFRNTCA9IGFwcGVuZGl4VGVtcGxhdGUoZnJvbnRNYXR0ZXIpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNvbnN0IGZvb3RlclRlbXBsYXRlID0gYFxyXG48c3R5bGU+XHJcblxyXG46aG9zdCB7XHJcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcclxuICBmb250LXdlaWdodDogMzAwO1xyXG4gIHBhZGRpbmc6IDJyZW0gMDtcclxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IGhzbCgxODAsIDUlLCAxNSUpOyAvKmhzbCgyMDAsIDYwJSwgMTUlKTsqL1xyXG4gIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgY29udGFpbjogY29udGVudDtcclxufVxyXG5cclxuLmZvb3Rlci1jb250YWluZXIgLmxvZ28gc3ZnIHtcclxuICB3aWR0aDogMjRweDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgdG9wOiA0cHg7XHJcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XHJcbn1cclxuXHJcbi5mb290ZXItY29udGFpbmVyIC5sb2dvIHN2ZyBwYXRoIHtcclxuICBmaWxsOiBub25lO1xyXG4gIHN0cm9rZTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xyXG4gIHN0cm9rZS13aWR0aDogM3B4O1xyXG59XHJcblxyXG4uZm9vdGVyLWNvbnRhaW5lciAubG9nbyB7XHJcbiAgZm9udC1zaXplOiAxN3B4O1xyXG4gIGZvbnQtd2VpZ2h0OiAyMDA7XHJcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcclxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XHJcbn1cclxuXHJcbi5mb290ZXItY29udGFpbmVyIHtcclxuICBncmlkLWNvbHVtbjogdGV4dDtcclxufVxyXG5cclxuLmZvb3Rlci1jb250YWluZXIgLm5hdiB7XHJcbiAgZm9udC1zaXplOiAwLjllbTtcclxuICBtYXJnaW4tdG9wOiAxLjVlbTtcclxufVxyXG5cclxuLmZvb3Rlci1jb250YWluZXIgLm5hdiBhIHtcclxuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xyXG4gIG1hcmdpbi1yaWdodDogNnB4O1xyXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG5cclxuPC9zdHlsZT5cclxuXHJcbjxkaXYgY2xhc3M9J2Zvb3Rlci1jb250YWluZXInPlxyXG5cclxuICA8YSBocmVmPVwiL1wiIGNsYXNzPVwibG9nb1wiPlxyXG4gICAgJHtsb2dvfVxyXG4gICAgRGlzdGlsbFxyXG4gIDwvYT4gaXMgZGVkaWNhdGVkIHRvIGNsZWFyIGV4cGxhbmF0aW9ucyBvZiBtYWNoaW5lIGxlYXJuaW5nXHJcblxyXG4gIDxkaXYgY2xhc3M9XCJuYXZcIj5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL2Rpc3RpbGwucHViL2Fib3V0L1wiPkFib3V0PC9hPlxyXG4gICAgPGEgaHJlZj1cImh0dHBzOi8vZGlzdGlsbC5wdWIvam91cm5hbC9cIj5TdWJtaXQ8L2E+XHJcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi9wcml6ZS9cIj5Qcml6ZTwvYT5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL2Rpc3RpbGwucHViL2FyY2hpdmUvXCI+QXJjaGl2ZTwvYT5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL2Rpc3RpbGwucHViL3Jzcy54bWxcIj5SU1M8L2E+XHJcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2Rpc3RpbGxwdWJcIj5HaXRIdWI8L2E+XHJcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly90d2l0dGVyLmNvbS9kaXN0aWxscHViXCI+VHdpdHRlcjwvYT5cclxuICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBJU1NOIDI0NzYtMDc1N1xyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG5gO1xyXG5cclxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXHJcblxyXG4gIGNvbnN0IFQkYyA9IFRlbXBsYXRlKCdkaXN0aWxsLWZvb3RlcicsIGZvb3RlclRlbXBsYXRlKTtcclxuXHJcbiAgY2xhc3MgRGlzdGlsbEZvb3RlciBleHRlbmRzIFQkYyhIVE1MRWxlbWVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcclxuXHJcbiAgbGV0IHRlbXBsYXRlSXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgbGV0IHJ1bmxldmVsID0gMDtcclxuICBjb25zdCBpbml0aWFsaXplID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93LmRpc3RpbGwucnVubGV2ZWwgPCAxKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkluc3VmZmljaWVudCBSdW5sZXZlbCBmb3IgRGlzdGlsbCBUZW1wbGF0ZSFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyogMS4gRmxhZyB0aGF0IHdlJ3JlIGJlaW5nIGxvYWRlZCAqL1xyXG4gICAgaWYgKFwiZGlzdGlsbFwiIGluIHdpbmRvdyAmJiB3aW5kb3cuZGlzdGlsbC50ZW1wbGF0ZUlzTG9hZGluZykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgXCJSdW5sZXZlbCAxOiBEaXN0aWxsIFRlbXBsYXRlIGlzIGdldHRpbmcgbG9hZGVkIG1vcmUgdGhhbiBvbmNlLCBhYm9ydGluZyFcIlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2luZG93LmRpc3RpbGwudGVtcGxhdGVJc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMTogRGlzdGlsbCBUZW1wbGF0ZSBoYXMgc3RhcnRlZCBsb2FkaW5nLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiAyLiBBZGQgc3R5bGVzIGlmIHRoZXkgd2VyZW4ndCBhZGRlZCBkdXJpbmcgcHJlcmVuZGVyaW5nICovXHJcbiAgICBtYWtlU3R5bGVUYWcoZG9jdW1lbnQpO1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDE6IFN0YXRpYyBEaXN0aWxsIHN0eWxlcyBoYXZlIGJlZW4gYWRkZWQuXCIpO1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDEtPjIuXCIpO1xyXG4gICAgd2luZG93LmRpc3RpbGwucnVubGV2ZWwgKz0gMTtcclxuXHJcbiAgICAvKiAzLiBSZWdpc3RlciBDb250cm9sbGVyIGxpc3RlbmVyIGZ1bmN0aW9ucyAqL1xyXG4gICAgLyogTmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBjb21wb25lbnRzIHRvIHRoZWlyIGNvbm5lY3RlZCBjYWxsYmFja3MgaGF2ZSBhIGNvbnRyb2xsZXIgdG8gdGFsayB0by4gKi9cclxuICAgIGZvciAoY29uc3QgW2Z1bmN0aW9uTmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKENvbnRyb2xsZXIubGlzdGVuZXJzKSkge1xyXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2spO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSdW5sZXZlbCAyOiBDb250cm9sbGVyIGxpc3RlbmVycyBuZWVkIHRvIGJlIGZ1bmN0aW9ucyFcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCAyOiBXZSBjYW4gbm93IGxpc3RlbiB0byBjb250cm9sbGVyIGV2ZW50cy5cIik7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMi0+My5cIik7XHJcbiAgICB3aW5kb3cuZGlzdGlsbC5ydW5sZXZlbCArPSAxO1xyXG5cclxuICAgIC8qIDQuIFJlZ2lzdGVyIGNvbXBvbmVudHMgKi9cclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXHJcbiAgICAgIEFic3RyYWN0LCBBcHBlbmRpeCwgQXJ0aWNsZSwgQmlibGlvZ3JhcGh5LCBCeWxpbmUsIENpdGUsIENpdGF0aW9uTGlzdCwgQ29kZSxcclxuICAgICAgRm9vdG5vdGUsIEZvb3Rub3RlTGlzdCwgRnJvbnRNYXR0ZXIkMSwgSG92ZXJCb3gsIFRpdGxlLCBETWF0aCwgUmVmZXJlbmNlcywgVE9DLCBGaWd1cmUsXHJcbiAgICAgIFNsaWRlciwgSW50ZXJzdGl0aWFsXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGRpc3RpbGxDb21wb25lbnRzID0gW0Rpc3RpbGxIZWFkZXIsIERpc3RpbGxBcHBlbmRpeCwgRGlzdGlsbEZvb3Rlcl07XHJcblxyXG4gICAgaWYgKHdpbmRvdy5kaXN0aWxsLnJ1bmxldmVsIDwgMikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnN1ZmZpY2llbnQgUnVubGV2ZWwgZm9yIGFkZGluZyBjdXN0b20gZWxlbWVudHMhXCIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWxsQ29tcG9uZW50cyA9IGNvbXBvbmVudHMuY29uY2F0KGRpc3RpbGxDb21wb25lbnRzKTtcclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGFsbENvbXBvbmVudHMpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDI6IFJlZ2lzdGVyaW5nIGN1c3RvbSBlbGVtZW50OiBcIiArIGNvbXBvbmVudC5pcyk7XHJcbiAgICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZShjb21wb25lbnQuaXMsIGNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5kZWJ1ZyhcclxuICAgICAgXCJSdW5sZXZlbCAzOiBEaXN0aWxsIFRlbXBsYXRlIGZpbmlzaGVkIHJlZ2lzdGVyaW5nIGN1c3RvbSBlbGVtZW50cy5cIlxyXG4gICAgKTtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCAzLT40LlwiKTtcclxuICAgIHdpbmRvdy5kaXN0aWxsLnJ1bmxldmVsICs9IDE7XHJcblxyXG4gICAgLy8gSWYgdGVtcGxhdGUgd2FzIGFkZGVkIGFmdGVyIERPTUNvbnRlbnRMb2FkZWQgd2UgbWF5IGhhdmUgbWlzc2VkIHRoYXQgZXZlbnQuXHJcbiAgICAvLyBDb250cm9sbGVyIHdpbGwgY2hlY2sgZm9yIHRoYXQgY2FzZSwgc28gdHJpZ2dlciB0aGUgZXZlbnQgZXhwbGljaXRseTpcclxuICAgIGlmIChkb21Db250ZW50TG9hZGVkKCkpIHtcclxuICAgICAgQ29udHJvbGxlci5saXN0ZW5lcnMuRE9NQ29udGVudExvYWRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCA0OiBEaXN0aWxsIFRlbXBsYXRlIGluaXRpYWxpc2F0aW9uIGNvbXBsZXRlLlwiKTtcclxuICAgIHdpbmRvdy5kaXN0aWxsLnRlbXBsYXRlSXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB3aW5kb3cuZGlzdGlsbC50ZW1wbGF0ZUhhc0xvYWRlZCA9IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgd2luZG93LmRpc3RpbGwgPSB7IHJ1bmxldmVsLCBpbml0aWFsaXplLCB0ZW1wbGF0ZUlzTG9hZGluZyB9O1xyXG5cclxuICAvKiAwLiBDaGVjayBicm93c2VyIGZlYXR1cmUgc3VwcG9ydDsgc3luY2hyb25vdXNseSBwb2x5ZmlsbCBpZiBuZWVkZWQgKi9cclxuICBpZiAoUG9seWZpbGxzLmJyb3dzZXJTdXBwb3J0c0FsbEZlYXR1cmVzKCkpIHtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCAwOiBObyBuZWVkIGZvciBwb2x5ZmlsbHMuXCIpO1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDAtPjEuXCIpO1xyXG4gICAgd2luZG93LmRpc3RpbGwucnVubGV2ZWwgKz0gMTtcclxuICAgIHdpbmRvdy5kaXN0aWxsLmluaXRpYWxpemUoKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDA6IERpc3RpbGwgVGVtcGxhdGUgaXMgbG9hZGluZyBwb2x5ZmlsbHMuXCIpO1xyXG4gICAgUG9seWZpbGxzLmxvYWQod2luZG93LmRpc3RpbGwuaW5pdGlhbGl6ZSk7XHJcbiAgfVxyXG5cclxufSkpKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGVtcGxhdGUudjIuanMubWFwXHJcbiJdLCJuYW1lcyI6WyJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiZGF5cyIsIm1vbnRocyIsInplcm9QYWQiLCJuIiwiUkZDIiwiZGF0ZSIsImRheSIsImdldERheSIsInN1YnN0cmluZyIsInBhZGRlZERhdGUiLCJnZXREYXRlIiwibW9udGgiLCJnZXRNb250aCIsInllYXIiLCJnZXRGdWxsWWVhciIsInRvU3RyaW5nIiwiaG91cnMiLCJnZXRVVENIb3VycyIsIm1pbnV0ZXMiLCJnZXRVVENNaW51dGVzIiwic2Vjb25kcyIsImdldFVUQ1NlY29uZHMiLCJjb25jYXQiLCJvYmplY3RGcm9tTWFwIiwibWFwIiwib2JqZWN0IiwiQXJyYXkiLCJmcm9tIiwicmVkdWNlIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsIm1hcEZyb21PYmplY3QiLCJNYXAiLCJwcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwic2V0IiwiQXV0aG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwibmFtZSIsImF1dGhvciIsInBlcnNvbmFsVVJMIiwiYXV0aG9yVVJMIiwiYWZmaWxpYXRpb24iLCJhZmZpbGlhdGlvblVSTCIsImFmZmlsaWF0aW9ucyIsIl9jcmVhdGVDbGFzcyIsImdldCIsIm5hbWVzIiwic3BsaXQiLCJzbGljZSIsImxlbmd0aCIsImpvaW4iLCJtZXJnZUZyb21ZTUxGcm9udG1hdHRlciIsInRhcmdldCIsInNvdXJjZSIsInRpdGxlIiwicHVibGlzaGVkIiwiRGF0ZSIsInB1Ymxpc2hlZERhdGUiLCJjb25zdHJ1Y3RvciIsIlN0cmluZyIsImNvbnNvbGUiLCJlcnJvciIsImRlc2NyaXB0aW9uIiwiYXV0aG9ycyIsImF1dGhvck9iamVjdCIsImthdGV4IiwicGFzc3dvcmQiLCJkb2kiLCJGcm9udE1hdHRlciIsImJpYmxpb2dyYXBoeSIsImJpYmxpb2dyYXBoeVBhcnNlZCIsImNpdGF0aW9ucyIsImNpdGF0aW9uc0NvbGxlY3RlZCIsImpvdXJuYWwiLCJ1bmRlZmluZWQiLCJfdXJsIiwiZGlzdGlsbFBhdGgiLCJ1cmwiLCJnaXRodWJQYXRoIiwiX3ByZXZpZXdVUkwiLCJ1cGRhdGVkRGF0ZSIsInRvSVNPU3RyaW5nIiwidm9sdW1lIiwicHVibGlzaGVkWWVhciIsIkVycm9yIiwibGFzdE5hbWUiLCJmaXJzdE5hbWUiLCJzbHVnIiwidG9Mb3dlckNhc2UiLCJfdGhpcyIsImNpdGF0aW9uS2V5IiwiZW50cnkiLCJfYmlibGlvZ3JhcGh5IiwiX3R5cGVvZiIsImFzc2lnblRvT2JqZWN0IiwiYmlibGlvZ3JhcGh5RW50cmllcyIsImdpdGh1YlVybCIsInByZXZpZXdVUkwiLCJpc3N1ZSIsInB1Ymxpc2hlZERhdGVSRkMiLCJwdWJsaXNoZWRNb250aCIsInB1Ymxpc2hlZERheSIsInB1Ymxpc2hlZE1vbnRoUGFkZGVkIiwicHVibGlzaGVkRGF5UGFkZGVkIiwidXBkYXRlZERhdGVSRkMiLCJjb25jYXRlbmF0ZWRBdXRob3JzIiwiYmlidGV4QXV0aG9ycyIsImZyb21PYmplY3QiLCJmcm9udE1hdHRlciIsIk11dGF0aW5nIiwic3VwZXJjbGFzcyIsIl9zdXBlcmNsYXNzIiwiX2NsYXNzIiwiX3RoaXMyIiwiX2NhbGxTdXBlciIsIm9wdGlvbnMiLCJjaGlsZExpc3QiLCJjaGFyYWN0ZXJEYXRhIiwic3VidHJlZSIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJJZlBvc3NpYmxlIiwib2JzZXJ2ZSIsIl9pbmhlcml0cyIsImNvbm5lY3RlZENhbGxiYWNrIiwiX3N1cGVyUHJvcEdldCIsInRleHRDb250ZW50Iiwicm9vdCIsInJlbmRlckNvbnRlbnQiLCJUZW1wbGF0ZSIsInRlbXBsYXRlU3RyaW5nIiwidXNlU2hhZG93IiwiYXJndW1lbnRzIiwidGVtcGxhdGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJ3aW5kb3ciLCJTaGFkeUNTUyIsInByZXBhcmVUZW1wbGF0ZSIsIl9zdXBlcmNsYXNzMiIsIl9jbGFzczIiLCJfdGhpczMiLCJjbG9uZSIsImltcG9ydE5vZGUiLCJjb250ZW50IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsInNoYWRvd1Jvb3QiLCJhcHBlbmRDaGlsZCIsImhhc0F0dHJpYnV0ZSIsInN0eWxlRWxlbWVudCIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCIkIiwicXVlcnkiLCJxdWVyeVNlbGVjdG9yIiwiJCQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWF0aCIsImZpbmRFbmRPZk1hdGgiLCJkZWxpbWl0ZXIiLCJ0ZXh0Iiwic3RhcnRJbmRleCIsImluZGV4IiwiYnJhY2VMZXZlbCIsImRlbGltTGVuZ3RoIiwiY2hhcmFjdGVyIiwic3BsaXRBdERlbGltaXRlcnMiLCJzdGFydERhdGEiLCJsZWZ0RGVsaW0iLCJyaWdodERlbGltIiwiZGlzcGxheSIsImZpbmFsRGF0YSIsImkiLCJ0eXBlIiwiZGF0YSIsImxvb2tpbmdGb3JMZWZ0IiwiY3VyckluZGV4IiwibmV4dEluZGV4IiwiaW5kZXhPZiIsInB1c2giLCJyYXdEYXRhIiwic3BsaXRXaXRoRGVsaW1pdGVycyIsImRlbGltaXRlcnMiLCJsZWZ0IiwicmlnaHQiLCJyZW5kZXJNYXRoSW5UZXh0Iiwib3B0aW9uc0NvcHkiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsInRhZyIsImRpc3BsYXlNb2RlIiwic2V0QXR0cmlidXRlIiwiZSIsIlBhcnNlRXJyb3IiLCJlcnJvckNhbGxiYWNrIiwicmVuZGVyRWxlbSIsImVsZW0iLCJjaGlsZE5vZGVzIiwiY2hpbGROb2RlIiwibm9kZVR5cGUiLCJtaWdodEhhdmVNYXRoIiwiZnJhZyIsInJlcGxhY2VDaGlsZCIsInNob3VsZFJlbmRlciIsImlnbm9yZWRUYWdzIiwibm9kZU5hbWUiLCJkZWZhdWx0QXV0b1JlbmRlck9wdGlvbnMiLCJtc2ciLCJlcnIiLCJyZW5kZXJNYXRoSW5FbGVtZW50IiwiZGVsaW1pdGVyU3RyaW5ncyIsImZsYXRNYXAiLCJkIiwic29tZSIsImthdGV4SlNVUkwiLCJrYXRleENTU1RhZyIsIlQiLCJETWF0aCIsIl9NdXRhdGluZyIsImxvY2FsT3B0aW9ucyIsImthdGV4T3B0aW9ucyIsImthdGV4QWRkZWQiLCJhZGRLYXRleCIsImNvbnRhaW5lciIsInJlbmRlciIsIl9rYXRleE9wdGlvbnMiLCJrYXRleExvYWRlZENhbGxiYWNrIiwibWF0aFRhZ3MiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsImRvbmUiLCJtYXRoVGFnIiwiZiIsImJvZHkiLCJoZWFkIiwiaW5zZXJ0QWRqYWNlbnRIVE1MIiwic2NyaXB0VGFnIiwic3JjIiwiYXN5bmMiLCJvbmxvYWQiLCJjcm9zc29yaWdpbiIsIkhUTUxFbGVtZW50IiwiaW5saW5lTWF0aFJlbmRlcmVkIiwiY29sbGVjdF9jaXRhdGlvbnMiLCJkb20iLCJTZXQiLCJjaXRlVGFncyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJrZXlTdHJpbmciLCJnZXRBdHRyaWJ1dGUiLCJrZXlzIiwiayIsInRyaW0iLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiYWRkIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXV0aG9yX3N0cmluZyIsImVudCIsInNlcCIsImZpbmFsU2VwIiwibmFtZV9zdHJpbmdzIiwibGFzdCIsImZpcnN0cyIsImluaXRpYWxzIiwicmVwbGFjZSIsInN0ciIsInZlbnVlX3N0cmluZyIsImNpdGUiLCJib29rdGl0bGUiLCJudW1iZXIiLCJwYWdlcyIsInB1Ymxpc2hlciIsImxpbmtfc3RyaW5nIiwiYXJ4aXZfbWF0Y2giLCJleGVjIiwibGFiZWwiLCJkb2lfc3RyaW5nIiwibmV3X2xpbmUiLCJ0aXRsZV9zdHJpbmciLCJiaWJsaW9ncmFwaHlfY2l0ZSIsImZhbmN5IiwiaG92ZXJfY2l0ZSIsImFfc3RyIiwidl9zdHIiLCJNYXRoIiwibWluIiwiZG9tQ29udGVudExvYWRlZCIsInJlYWR5U3RhdGUiLCJfbW92ZUxlZ2FjeUFmZmlsaWF0aW9uRm9ybWF0SW50b0FycmF5IiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImhhc09sZFN0eWxlIiwiQm9vbGVhbiIsImhhc05ld1N0eWxlIiwid2FybiIsIm5ld0FmZmlsaWF0aW9uIiwicGFyc2VGcm9udG1hdHRlciIsImVsZW1lbnQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIkZyb250TWF0dGVyJDEiLCJfSFRNTEVsZW1lbnQiLCJfdGhpczQiLCJlbnRyaWVzIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsIm5vdGlmeSIsImRldGFpbCIsImJ1YmJsZXMiLCJldmVudCIsIkN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIl93cmFwTmF0aXZlU3VwZXIiLCJvcHRpb25hbENvbXBvbmVudHMiLCJhcnRpY2xlIiwiYnlsaW5lIiwiaDEiLCJoYXNQYXNzd29yZCIsImludGVyc3RpdGlhbCIsImluQnJvd3NlciIsIm9uTG9jYWxob3N0IiwibG9jYXRpb24iLCJob3N0bmFtZSIsImluY2x1ZGVzIiwicGFyZW50RWxlbWVudCIsInJlbW92ZUNoaWxkIiwiYXBwZW5kaXgiLCJmb290bm90ZUxpc3QiLCJjaXRhdGlvbkxpc3QiLCJDb250cm9sbGVyIiwid2FpdGluZ09uIiwibGlzdGVuZXJzIiwib25DaXRlS2V5Q3JlYXRlZCIsIl9ldmVudCRkZXRhaWwiLCJjaXRlVGFnIiwibnVtYmVycyIsIm9uQ2l0ZUtleUNoYW5nZWQiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2Iiwid2FpdGluZ0NhbGxiYWNrIiwiY2l0YXRpb25MaXN0VGFnIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsImxvZyIsIm9uQ2l0ZUtleVJlbW92ZWQiLCJvbkJpYmxpb2dyYXBoeUNoYW5nZWQiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4IiwiZGVidWciLCJvbkZvb3Rub3RlQ2hhbmdlZCIsImZvb3Rub3Rlc0xpc3QiLCJmb290bm90ZXMiLCJvbkZyb250TWF0dGVyQ2hhbmdlZCIsInByZXJlbmRlcmVkIiwiRE9NQ29udGVudExvYWRlZCIsImxvYWRlZCIsImZyb250TWF0dGVyVGFnIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsIl9pdGVyYXRvcjEwIiwiX3N0ZXAxMCIsImJhc2UiLCJsYXlvdXQiLCJwcmludCIsInN0eWxlcyIsIm1ha2VTdHlsZVRhZyIsInN0eWxlVGFnSWQiLCJwcmVyZW5kZXJlZFRhZyIsImdldEVsZW1lbnRCeUlkIiwic3R5bGVUYWciLCJpZCIsImNzc1RleHRUYWciLCJmaXJzdFNjcmlwdFRhZyIsImFkZFBvbHlmaWxsIiwicG9seWZpbGwiLCJwb2x5ZmlsbExvYWRlZENhbGxiYWNrIiwic2NyaXB0Iiwib25lcnJvciIsInBvbHlmaWxscyIsInN1cHBvcnQiLCJFbGVtZW50IiwicHJvdG90eXBlIiwiUG9seWZpbGxzIiwiYnJvd3NlclN1cHBvcnRzQWxsRmVhdHVyZXMiLCJldmVyeSIsInBvbHkiLCJsb2FkIiwiY2FsbGJhY2siLCJwb2x5ZmlsbExvYWRlZCIsIm5lZWRlZFBvbHlmaWxscyIsImRpc3RpbGxSdW5sZXZlbCIsIl9pdGVyYXRvcjExIiwiX3N0ZXAxMSIsIl9uZWVkZWRQb2x5ZmlsbHMiLCJmaWx0ZXIiLCJzZWxlY3RvciIsIlQkMSIsIkFic3RyYWN0IiwiX1QkIiwiVCQyIiwiQXBwZW5kaXgiLCJfVCQyIiwiaXNPbmx5V2hpdGVzcGFjZSIsIkFydGljbGUiLCJfSFRNTEVsZW1lbnQyIiwiX3RoaXM1IiwibXV0YXRpb25zIiwiX2l0ZXJhdG9yMTIiLCJfc3RlcDEyIiwibXV0YXRpb24iLCJfaXRlcmF0b3IxMyIsImFkZGVkTm9kZXMiLCJfc3RlcDEzIiwiYWRkZWROb2RlIiwibm9kZVZhbHVlIiwidGVzdCIsIndyYXBwZXIiLCJwYXJlbnROb2RlIiwiY29tbW9uanNHbG9iYWwiLCJnbG9iYWxUaGlzIiwiZ2xvYmFsIiwic2VsZiIsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIiwiZm4iLCJtb2R1bGUiLCJleHBvcnRzIiwiYmlidGV4UGFyc2UiLCJCaWJ0ZXhQYXJzZXIiLCJub3RLZXkiLCJwb3MiLCJpbnB1dCIsImN1cnJlbnRFbnRyeSIsInNldElucHV0IiwidCIsImdldEVudHJpZXMiLCJpc1doaXRlc3BhY2UiLCJtYXRjaCIsImNhbkNvbW1lbnRPdXQiLCJza2lwV2hpdGVzcGFjZSIsInRyeU1hdGNoIiwibWF0Y2hBdCIsInZhbHVlX2JyYWNlcyIsImJyYWNlY291bnQiLCJzdGFydCIsImVzY2FwZWQiLCJlbmQiLCJ2YWx1ZV9jb21tZW50IiwiYnJja3RDbnQiLCJ2YWx1ZV9xdW90ZXMiLCJzaW5nbGVfdmFsdWUiLCJ2YWx1ZXMiLCJrZXlfZXF1YWxzX3ZhbHVlIiwidmFsIiwia2V5X3ZhbHVlX2xpc3QiLCJrdiIsImVudHJ5X2JvZHkiLCJkaXJlY3RpdmUiLCJwcmVhbWJsZSIsImNvbW1lbnQiLCJiaWJ0ZXgiLCJzdHJpbmciLCJ0b0pTT04iLCJiIiwidG9CaWJ0ZXgiLCJqc29uIiwib3V0IiwiZW50cnlUeXBlIiwiZW50cnlUYWdzIiwidGFncyIsImpkeCIsIm5vcm1hbGl6ZVRhZyIsImZ1bGwiLCJ4IiwiY2hhciIsInBhcnNlQmlidGV4IiwicGFyc2VkRW50cmllcyIsIl9pdGVyYXRvcjE0IiwiX3N0ZXAxNCIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwic2VyaWFsaXplRnJvbnRtYXR0ZXJUb0JpYnRleCIsIkJpYmxpb2dyYXBoeSIsIl9IVE1MRWxlbWVudDMiLCJfdGhpczYiLCJfaXRlcmF0b3IxNSIsIl9zdGVwMTUiLCJwYXJzZUlmUG9zc2libGUiLCJfdGhpczciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJuZXdCaWJ0ZXgiLCJyZWNlaXZlZEJpYnRleCIsInJlc3BvbnNlIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIiwib2xkVmFsdWUiLCJuZXdWYWx1ZSIsIl90aGlzOCIsIm9SZXEiLCJYTUxIdHRwUmVxdWVzdCIsInJlc3BvbnNlVHlwZSIsIm9wZW4iLCJzZW5kIiwiYnlsaW5lVGVtcGxhdGUiLCJCeWxpbmUiLCJfSFRNTEVsZW1lbnQ0IiwiVCQzIiwiQ2l0ZSIsIl9UJDMiLCJfdGhpczkiLCJfbnVtYmVycyIsIl9lbnRyaWVzIiwiX3RoaXMxMCIsIm91dGVyU3BhbiIsImlubmVyU3BhbiIsImhvdmVyQm94IiwiY3VzdG9tRWxlbWVudHMiLCJ3aGVuRGVmaW5lZCIsInRoZW4iLCJsaXN0ZW4iLCJkaXNwbGF5TnVtYmVycyIsImRpc3BsYXlFbnRyaWVzIiwiZXZlbnROYW1lIiwicmVzdWx0IiwibnVtYmVyU3RyaW5ncyIsImh0bWwiLCJzdHlsZXMkMSIsInJlbmRlckNpdGF0aW9uTGlzdCIsInNpemUiLCJzdHlsZSIsImxpc3QiLCJzdHlsZXNUYWciLCJoZWFkaW5nIiwiY2xhc3NOYW1lIiwiX2l0ZXJhdG9yMTYiLCJfc3RlcDE2IiwiX3N0ZXAxNiR2YWx1ZSIsImxpc3RJdGVtIiwiQ2l0YXRpb25MaXN0IiwiX0hUTUxFbGVtZW50NSIsInByaXNtIiwiX3NlbGYiLCJXb3JrZXJHbG9iYWxTY29wZSIsIlByaXNtIiwibGFuZyIsInVuaXF1ZUlkIiwiXyIsIm1hbnVhbCIsImRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlciIsInV0aWwiLCJlbmNvZGUiLCJ0b2tlbnMiLCJUb2tlbiIsImFsaWFzIiwiaXNBcnJheSIsIm8iLCJjYWxsIiwib2JqSWQiLCJvYmoiLCJkZWZpbmVQcm9wZXJ0eSIsImRlZXBDbG9uZSIsInZpc2l0ZWQiLCJmb3JFYWNoIiwidiIsImdldExhbmd1YWdlIiwiY3VycmVudFNjcmlwdCIsInN0YWNrIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGFuZ3VhZ2VzIiwiZXh0ZW5kIiwicmVkZWYiLCJpbnNpZGUiLCJiZWZvcmUiLCJpbnNlcnQiLCJncmFtbWFyIiwicmV0IiwidG9rZW4iLCJuZXdUb2tlbiIsIm9sZCIsIkRGUyIsInByb3BlcnR5VHlwZSIsInBsdWdpbnMiLCJoaWdobGlnaHRBbGwiLCJoaWdobGlnaHRBbGxVbmRlciIsImVudiIsImhvb2tzIiwicnVuIiwiZWxlbWVudHMiLCJhcHBseSIsImhpZ2hsaWdodEVsZW1lbnQiLCJsYW5ndWFnZSIsInBhcmVudCIsImNvZGUiLCJpbnNlcnRIaWdobGlnaHRlZENvZGUiLCJoaWdobGlnaHRlZENvZGUiLCJXb3JrZXIiLCJ3b3JrZXIiLCJmaWxlbmFtZSIsIm9ubWVzc2FnZSIsImV2dCIsInBvc3RNZXNzYWdlIiwic3RyaW5naWZ5IiwiaW1tZWRpYXRlQ2xvc2UiLCJoaWdobGlnaHQiLCJ0b2tlbml6ZSIsInJlc3QiLCJ0b2tlbkxpc3QiLCJMaW5rZWRMaXN0IiwiYWRkQWZ0ZXIiLCJtYXRjaEdyYW1tYXIiLCJ0b0FycmF5IiwiYWxsIiwiY2FsbGJhY2tzIiwibWF0Y2hlZFN0ciIsImdyZWVkeSIsImNsYXNzZXMiLCJhdHRyaWJ1dGVzIiwiYWxpYXNlcyIsInN0YXJ0Tm9kZSIsInN0YXJ0UG9zIiwib25lc2hvdCIsInBhdHRlcm5zIiwiaiIsInBhdHRlcm4iLCJsb29rYmVoaW5kIiwibG9va2JlaGluZExlbmd0aCIsImZsYWdzIiwiUmVnRXhwIiwiY3VycmVudE5vZGUiLCJuZXh0IiwidGFpbCIsInJlbW92ZUNvdW50IiwicHJldiIsImxhc3RJbmRleCIsInRvIiwicCIsImFmdGVyIiwicmVtb3ZlRnJvbSIsInJlbW92ZVJhbmdlIiwid3JhcHBlZCIsIm5vZGUiLCJuZXdOb2RlIiwiY291bnQiLCJhcnJheSIsImFkZEV2ZW50TGlzdGVuZXIiLCJtZXNzYWdlIiwiY2xvc2UiLCJoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2siLCJkZWZlciIsInNldFRpbWVvdXQiLCJtYXJrdXAiLCJhZGRJbmxpbmVkIiwidGFnTmFtZSIsImluY2x1ZGVkQ2RhdGFJbnNpZGUiLCJkZWYiLCJ4bWwiLCJtYXRobWwiLCJzdmciLCJjc3MiLCJjbGlrZSIsImphdmFzY3JpcHQiLCJqcyIsImZpbGVIaWdobGlnaHQiLCJFeHRlbnNpb25zIiwicHJlIiwiZXh0ZW5zaW9uIiwieGhyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwic3RhdHVzIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsInB5dGhvbiIsInB5IiwibHVhIiwiZW52VmFycyIsImluc2lkZVN0cmluZyIsImJhc2giLCJ2YXJpYWJsZSIsInRvQmVDb3BpZWQiLCJzaGVsbCIsImdvIiwiaW5uZXIiLCJjcmVhdGVJbmxpbmUiLCJzdGFyQWx0ZXJuYXRpdmUiLCJ0YWJsZUNlbGwiLCJ0YWJsZVJvdyIsInRhYmxlTGluZSIsIm1hcmtkb3duIiwicHVuY3R1YXRpb24iLCJ3YWxrVG9rZW5zIiwibCIsImNvZGVMYW5nIiwiY29kZUJsb2NrIiwiY2xzIiwiYXV0b2xvYWRlciIsInZhbHVlT2YiLCJmbG9vciIsInJhbmRvbSIsImxvYWRMYW5ndWFnZXMiLCJlbGUiLCJtZCIsImp1bGlhIiwiVCQ0IiwiQ29kZSIsIl9NdXRhdGluZzIiLCJsYW5ndWFnZU5hbWUiLCJjb2RlVGFnIiwidGFicyIsIlNoYWRvd1Jvb3QiLCJwcmVUYWciLCJUJDUiLCJGb290bm90ZSIsIl9UJDQiLCJfdGhpczExIiwiX3RoaXMxMiIsImN1cnJlbnRGb290bm90ZUlkIiwiSWRTdHJpbmciLCJob3N0Iiwic3BhbiIsIlQkNiIsIkZvb3Rub3RlTGlzdCIsIl9UJDUiLCJfaXRlcmF0b3IxNyIsIl9zdGVwMTciLCJmb290bm90ZSIsImJhY2tsaW5rIiwiaHJlZiIsIlQkNyIsIkhvdmVyQm94IiwiX1QkNiIsImJpbmREaXZFdmVudHMiLCJiaW5kVHJpZ2dlckV2ZW50cyIsIl90aGlzMTMiLCJ2aXNpYmxlIiwic2hvd0F0Tm9kZSIsInN0b3BUaW1lb3V0IiwiZXh0ZW5kVGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsInBhc3NpdmUiLCJoaWRlIiwiX3RoaXMxNCIsInNob3ciLCJwb3NpdGlvbiIsInRvcCIsInJvdW5kIiwiYmJveCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIm9mZnNldExlZnQiLCJ3aWR0aCIsIm9mZnNldFRvcCIsImhlaWdodCIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJ0aW1lIiwiX3RoaXMxNSIsIlRpdGxlIiwiX0hUTUxFbGVtZW50NiIsIlQkOCIsIlJlZmVyZW5jZXMiLCJfVCQ3IiwiVE9DIiwiX0hUTUxFbGVtZW50NyIsIl90aGlzMTYiLCJoZWFkaW5ncyIsInJlbmRlclRPQyIsIlRvQyIsIl9pdGVyYXRvcjE4IiwiX3N0ZXAxOCIsImVsIiwiaXNJblRpdGxlIiwiaXNFeGNlcHRpb24iLCJsaW5rIiwibmV3TGluZSIsIkZpZ3VyZSIsIl9IVE1MRWxlbWVudDgiLCJfdGhpczE3IiwiX3JlYWR5IiwiX29uc2NyZWVuIiwiX29mZnNjcmVlbiIsImxvYWRzV2hpbGVTY3JvbGxpbmciLCJtYXJnaW5PYnNlcnZlciIsImRpcmVjdE9ic2VydmVyIiwiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCJ1bm9ic2VydmUiLCJyZWFkeVF1ZXVlIiwicnVuUmVhZHlRdWV1ZSIsIm9uc2NyZWVuIiwicmVhZHkiLCJvZmZzY3JlZW4iLCJfcmVhZHlRdWV1ZSIsImFkZFRvUmVhZHlRdWV1ZSIsImZpZ3VyZSIsInNvcnQiLCJhIiwiX3NlZW5PblNjcmVlbiIsInBvcCIsIl9tYXJnaW5PYnNlcnZlciIsInZpZXdwb3J0SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJtYXJnaW4iLCJyb290TWFyZ2luIiwidGhyZXNob2xkIiwiZGlkT2JzZXJ2ZU1hcmdpbkludGVyc2VjdGlvbiIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiX2l0ZXJhdG9yMTkiLCJfc3RlcDE5IiwiaXNJbnRlcnNlY3RpbmciLCJfZGlyZWN0T2JzZXJ2ZXIiLCJkaWRPYnNlcnZlRGlyZWN0SW50ZXJzZWN0aW9uIiwiX2l0ZXJhdG9yMjAiLCJfc3RlcDIwIiwiaXNTY3JvbGxpbmciLCJyZXNldFRpbWVyIiwicHJvZHVjdGlvbkhvc3RuYW1lIiwiVCQ5IiwiSW50ZXJzdGl0aWFsIiwiX1QkOCIsIl90aGlzMTgiLCJzaG91bGRSZW1vdmVTZWxmIiwicGFzc3dvcmRJbnB1dCIsIm9uaW5wdXQiLCJwYXNzd29yZENoYW5nZWQiLCJlbnRlcmVkIiwiU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJsb2NhbFN0b3JhZ2VJZGVudGlmaWVyIiwiZ2V0SXRlbSIsInByZWZpeCIsInN1ZmZpeCIsInBhdGhuYW1lIiwiYXNjZW5kaW5nIiwiTmFOIiwiYmlzZWN0b3IiLCJjb21wYXJlIiwiYXNjZW5kaW5nQ29tcGFyYXRvciIsImxvIiwiaGkiLCJtaWQiLCJhc2NlbmRpbmdCaXNlY3QiLCJiaXNlY3RSaWdodCIsInJhbmdlIiwic3RvcCIsInN0ZXAiLCJtYXgiLCJjZWlsIiwiZTEwIiwic3FydCIsImU1IiwiZTIiLCJ0aWNrcyIsInJldmVyc2UiLCJ0aWNrSW5jcmVtZW50IiwiaXNGaW5pdGUiLCJwb3dlciIsIkxOMTAiLCJwb3ciLCJ0aWNrU3RlcCIsInN0ZXAwIiwiYWJzIiwic3RlcDEiLCJpbml0UmFuZ2UiLCJkb21haW4iLCJkZWZpbml0aW9uIiwiY3JlYXRlIiwiQ29sb3IiLCJkYXJrZXIiLCJicmlnaHRlciIsInJlSSIsInJlTiIsInJlUCIsInJlSGV4IiwicmVSZ2JJbnRlZ2VyIiwicmVSZ2JQZXJjZW50IiwicmVSZ2JhSW50ZWdlciIsInJlUmdiYVBlcmNlbnQiLCJyZUhzbFBlcmNlbnQiLCJyZUhzbGFQZXJjZW50IiwibmFtZWQiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImNvbG9yIiwiY29weSIsImNoYW5uZWxzIiwiZGlzcGxheWFibGUiLCJyZ2IiLCJoZXgiLCJjb2xvcl9mb3JtYXRIZXgiLCJmb3JtYXRIZXgiLCJmb3JtYXRIc2wiLCJjb2xvcl9mb3JtYXRIc2wiLCJmb3JtYXRSZ2IiLCJjb2xvcl9mb3JtYXRSZ2IiLCJoc2xDb252ZXJ0IiwiZm9ybWF0IiwibSIsInBhcnNlSW50IiwicmdibiIsIlJnYiIsInJnYmEiLCJoc2xhIiwiciIsImciLCJyZ2JDb252ZXJ0Iiwib3BhY2l0eSIsInJnYl9mb3JtYXRIZXgiLCJyZ2JfZm9ybWF0UmdiIiwiaXNOYU4iLCJoIiwiSHNsIiwiaHNsIiwibTIiLCJtMSIsImhzbDJyZ2IiLCJkZWcycmFkIiwiUEkiLCJyYWQyZGVnIiwiSyIsIlhuIiwiWW4iLCJabiIsInQwIiwidDEiLCJ0MiIsInQzIiwibGFiQ29udmVydCIsIkxhYiIsIkhjbCIsImhjbDJsYWIiLCJyZ2IybHJnYiIsInkiLCJ4eXoybGFiIiwieiIsImxhYiIsImxhYjJ4eXoiLCJscmdiMnJnYiIsImhjbENvbnZlcnQiLCJjIiwiYXRhbjIiLCJoY2wiLCJjb3MiLCJzaW4iLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkVEIiwiRUIiLCJCQ19EQSIsImN1YmVoZWxpeENvbnZlcnQiLCJDdWJlaGVsaXgiLCJibCIsImN1YmVoZWxpeCIsImNvc2giLCJzaW5oIiwiY29uc3RhbnQiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImdhbW1hIiwibm9nYW1tYSIsInJnYiQxIiwicmdiR2FtbWEiLCJudW1iZXJBcnJheSIsImlzTnVtYmVyQXJyYXkiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsIkRhdGFWaWV3IiwiZ2VuZXJpY0FycmF5IiwibmIiLCJuYSIsImludGVycG9sYXRlIiwic2V0VGltZSIsImludGVycG9sYXRlTnVtYmVyIiwicmVBIiwicmVCIiwiemVybyIsIm9uZSIsImJpIiwiYW0iLCJibSIsImJzIiwicSIsImludGVycG9sYXRlUm91bmQiLCJjb25zdGFudCQxIiwidW5pdCIsImlkZW50aXR5Iiwibm9ybWFsaXplIiwiY2xhbXBlciIsImJpbWFwIiwiZDAiLCJkMSIsInIwIiwicjEiLCJwb2x5bWFwIiwiY2xhbXAiLCJ1bmtub3duIiwidHJhbnNmb3JtZXIiLCJpbnRlcnBvbGF0ZSQxIiwidHJhbnNmb3JtIiwidW50cmFuc2Zvcm0iLCJwaWVjZXdpc2UiLCJvdXRwdXQiLCJyZXNjYWxlIiwic2NhbGUiLCJpbnZlcnQiLCJyYW5nZVJvdW5kIiwidSIsImNvbnRpbnVvdXMiLCJmb3JtYXREZWNpbWFsIiwidG9FeHBvbmVudGlhbCIsImNvZWZmaWNpZW50IiwiZXhwb25lbnQiLCJmb3JtYXRHcm91cCIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiZm9ybWF0TnVtZXJhbHMiLCJudW1lcmFscyIsInJlIiwiZm9ybWF0U3BlY2lmaWVyIiwic3BlY2lmaWVyIiwiRm9ybWF0U3BlY2lmaWVyIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsImNvbW1hIiwicHJlY2lzaW9uIiwiZm9ybWF0VHJpbSIsImkwIiwiaTEiLCJwcmVmaXhFeHBvbmVudCIsImZvcm1hdFByZWZpeEF1dG8iLCJmb3JtYXRSb3VuZGVkIiwiZm9ybWF0VHlwZXMiLCJ0b0ZpeGVkIiwidG9QcmVjaXNpb24iLCJYIiwidG9VcHBlckNhc2UiLCJpZGVudGl0eSQxIiwicHJlZml4ZXMiLCJmb3JtYXRMb2NhbGUiLCJsb2NhbGUiLCJncm91cCIsIk51bWJlciIsImN1cnJlbmN5UHJlZml4IiwiY3VycmVuY3kiLCJjdXJyZW5jeVN1ZmZpeCIsImRlY2ltYWwiLCJwZXJjZW50IiwibWludXMiLCJuYW4iLCJuZXdGb3JtYXQiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsImNoYXJDb2RlQXQiLCJJbmZpbml0eSIsInBhZGRpbmciLCJmb3JtYXRQcmVmaXgiLCJkZWZhdWx0TG9jYWxlIiwicHJlY2lzaW9uRml4ZWQiLCJwcmVjaXNpb25QcmVmaXgiLCJwcmVjaXNpb25Sb3VuZCIsInRpY2tGb3JtYXQiLCJsaW5lYXJpc2giLCJuaWNlIiwibGluZWFyJDEiLCJ0MCQxIiwidDEkMSIsIm5ld0ludGVydmFsIiwiZmxvb3JpIiwib2Zmc2V0aSIsImZpZWxkIiwiaW50ZXJ2YWwiLCJvZmZzZXQiLCJwcmV2aW91cyIsIm1pbGxpc2Vjb25kIiwiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwic2Vjb25kIiwiZ2V0TWlsbGlzZWNvbmRzIiwibWludXRlIiwiZ2V0U2Vjb25kcyIsImdldE1pbnV0ZXMiLCJob3VyIiwiZ2V0SG91cnMiLCJzZXRIb3VycyIsInNldERhdGUiLCJnZXRUaW1lem9uZU9mZnNldCIsIndlZWtkYXkiLCJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSIsInNldE1vbnRoIiwic2V0RnVsbFllYXIiLCJ1dGNNaW51dGUiLCJzZXRVVENTZWNvbmRzIiwidXRjSG91ciIsInNldFVUQ01pbnV0ZXMiLCJ1dGNEYXkiLCJzZXRVVENIb3VycyIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwidXRjV2Vla2RheSIsImdldFVUQ0RheSIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsInV0Y1R1ZXNkYXkiLCJ1dGNXZWRuZXNkYXkiLCJ1dGNUaHVyc2RheSIsInV0Y0ZyaWRheSIsInV0Y1NhdHVyZGF5IiwidXRjTW9udGgiLCJzZXRVVENNb250aCIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJ1dGNZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJsb2NhbERhdGUiLCJIIiwiTSIsIlMiLCJMIiwidXRjRGF0ZSIsIlVUQyIsIm5ld0RhdGUiLCJmb3JtYXRMb2NhbGUkMSIsImxvY2FsZV9kYXRlVGltZSIsImRhdGVUaW1lIiwibG9jYWxlX2RhdGUiLCJsb2NhbGVfdGltZSIsImxvY2FsZV9wZXJpb2RzIiwicGVyaW9kcyIsImxvY2FsZV93ZWVrZGF5cyIsImxvY2FsZV9zaG9ydFdlZWtkYXlzIiwic2hvcnREYXlzIiwibG9jYWxlX21vbnRocyIsImxvY2FsZV9zaG9ydE1vbnRocyIsInNob3J0TW9udGhzIiwicGVyaW9kUmUiLCJmb3JtYXRSZSIsInBlcmlvZExvb2t1cCIsImZvcm1hdExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiZm9ybWF0U2hvcnRXZWVrZGF5IiwiZm9ybWF0V2Vla2RheSIsImZvcm1hdFNob3J0TW9udGgiLCJmb3JtYXRNb250aCIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRQZXJpb2QiLCJmb3JtYXRRdWFydGVyIiwiZm9ybWF0VW5peFRpbWVzdGFtcCIsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIiwiZm9ybWF0U2Vjb25kcyIsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5IiwiZm9ybWF0V2Vla051bWJlcklTTyIsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdEZ1bGxZZWFyIiwiZm9ybWF0Wm9uZSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwidXRjRm9ybWF0cyIsImZvcm1hdFVUQ1Nob3J0V2Vla2RheSIsImZvcm1hdFVUQ1dlZWtkYXkiLCJmb3JtYXRVVENTaG9ydE1vbnRoIiwiZm9ybWF0VVRDTW9udGgiLCJmb3JtYXRVVENEYXlPZk1vbnRoIiwiZm9ybWF0VVRDTWljcm9zZWNvbmRzIiwiZm9ybWF0VVRDSG91cjI0IiwiZm9ybWF0VVRDSG91cjEyIiwiZm9ybWF0VVRDRGF5T2ZZZWFyIiwiZm9ybWF0VVRDTWlsbGlzZWNvbmRzIiwiZm9ybWF0VVRDTW9udGhOdW1iZXIiLCJmb3JtYXRVVENNaW51dGVzIiwiZm9ybWF0VVRDUGVyaW9kIiwiZm9ybWF0VVRDUXVhcnRlciIsImZvcm1hdFVUQ1NlY29uZHMiLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIsImZvcm1hdFVUQ1llYXIiLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ1pvbmUiLCJwYXJzZXMiLCJwYXJzZVNob3J0V2Vla2RheSIsInBhcnNlV2Vla2RheSIsInBhcnNlU2hvcnRNb250aCIsInBhcnNlTW9udGgiLCJwYXJzZUxvY2FsZURhdGVUaW1lIiwicGFyc2VEYXlPZk1vbnRoIiwicGFyc2VNaWNyb3NlY29uZHMiLCJwYXJzZUhvdXIyNCIsInBhcnNlRGF5T2ZZZWFyIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1vbnRoTnVtYmVyIiwicGFyc2VNaW51dGVzIiwicGFyc2VQZXJpb2QiLCJwYXJzZVF1YXJ0ZXIiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5IiwicGFyc2VXZWVrTnVtYmVyU3VuZGF5IiwicGFyc2VXZWVrTnVtYmVySVNPIiwicGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5IiwicGFyc2VXZWVrTnVtYmVyTW9uZGF5IiwicGFyc2VMb2NhbGVEYXRlIiwicGFyc2VMb2NhbGVUaW1lIiwicGFyc2VZZWFyIiwicGFyc2VGdWxsWWVhciIsInBhcnNlWm9uZSIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYWQiLCJwYWRzIiwiY2hhckF0IiwibmV3UGFyc2UiLCJaIiwicGFyc2VTcGVjaWZpZXIiLCJ3ZWVrIiwiZGF5JDEiLCJRIiwiViIsInciLCJXIiwiVSIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJyZXF1b3RlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZG93IiwibG9jYWxlJDEiLCJ0aW1lRm9ybWF0IiwidGltZVBhcnNlIiwiZGVmYXVsdExvY2FsZSQxIiwiaXNvU3BlY2lmaWVyIiwiZm9ybWF0SXNvTmF0aXZlIiwiZm9ybWF0SXNvIiwicGFyc2VJc29OYXRpdmUiLCJwYXJzZUlzbyIsIm5vb3AiLCJkaXNwYXRjaCIsIkRpc3BhdGNoIiwicGFyc2VUeXBlbmFtZXMiLCJ0eXBlbmFtZXMiLCJ0eXBlcyIsIm9uIiwidHlwZW5hbWUiLCJ0aGF0IiwiYXJncyIsInhodG1sIiwibmFtZXNwYWNlcyIsInhsaW5rIiwieG1sbnMiLCJuYW1lc3BhY2UiLCJzcGFjZSIsImxvY2FsIiwiY3JlYXRvckluaGVyaXQiLCJvd25lckRvY3VtZW50IiwidXJpIiwibmFtZXNwYWNlVVJJIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRvckZpeGVkIiwiZnVsbG5hbWUiLCJjcmVhdG9yIiwibm9uZSIsInNlbGVjdGlvbl9zZWxlY3QiLCJzZWxlY3QiLCJncm91cHMiLCJfZ3JvdXBzIiwic3ViZ3JvdXBzIiwic3ViZ3JvdXAiLCJzdWJub2RlIiwiX19kYXRhX18iLCJTZWxlY3Rpb24iLCJfcGFyZW50cyIsImVtcHR5Iiwic2VsZWN0b3JBbGwiLCJzZWxlY3Rpb25fc2VsZWN0QWxsIiwicGFyZW50cyIsIm1hdGNoZXIiLCJtYXRjaGVzIiwic2VsZWN0aW9uX2ZpbHRlciIsInNwYXJzZSIsInVwZGF0ZSIsInNlbGVjdGlvbl9lbnRlciIsIl9lbnRlciIsIkVudGVyTm9kZSIsImRhdHVtIiwiX25leHQiLCJfcGFyZW50IiwiY2hpbGQiLCJjb25zdGFudCQyIiwia2V5UHJlZml4IiwiYmluZEluZGV4IiwiZW50ZXIiLCJleGl0IiwiZ3JvdXBMZW5ndGgiLCJkYXRhTGVuZ3RoIiwiYmluZEtleSIsIm5vZGVCeUtleVZhbHVlIiwia2V5VmFsdWVzIiwia2V5VmFsdWUiLCJzZWxlY3Rpb25fZGF0YSIsImVhY2giLCJiaW5kIiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwiZXhpdEdyb3VwIiwiX2V4aXQiLCJzZWxlY3Rpb25fZXhpdCIsInNlbGVjdGlvbl9qb2luIiwib25lbnRlciIsIm9udXBkYXRlIiwib25leGl0IiwiYXBwZW5kIiwicmVtb3ZlIiwibWVyZ2UiLCJvcmRlciIsInNlbGVjdGlvbl9tZXJnZSIsInNlbGVjdGlvbiIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtZXJnZXMiLCJncm91cDAiLCJncm91cDEiLCJzZWxlY3Rpb25fb3JkZXIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInNlbGVjdGlvbl9zb3J0IiwiYXNjZW5kaW5nJDEiLCJjb21wYXJlTm9kZSIsInNvcnRncm91cHMiLCJzb3J0Z3JvdXAiLCJzZWxlY3Rpb25fY2FsbCIsInNlbGVjdGlvbl9ub2RlcyIsIm5vZGVzIiwic2VsZWN0aW9uX25vZGUiLCJzZWxlY3Rpb25fc2l6ZSIsInNlbGVjdGlvbl9lbXB0eSIsInNlbGVjdGlvbl9lYWNoIiwiYXR0clJlbW92ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImF0dHJSZW1vdmVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiYXR0ckNvbnN0YW50IiwiYXR0ckNvbnN0YW50TlMiLCJzZXRBdHRyaWJ1dGVOUyIsImF0dHJGdW5jdGlvbiIsImF0dHJGdW5jdGlvbk5TIiwic2VsZWN0aW9uX2F0dHIiLCJnZXRBdHRyaWJ1dGVOUyIsImRlZmF1bHRWaWV3Iiwic3R5bGVSZW1vdmUiLCJyZW1vdmVQcm9wZXJ0eSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInNldFByb3BlcnR5Iiwic3R5bGVGdW5jdGlvbiIsInNlbGVjdGlvbl9zdHlsZSIsInN0eWxlVmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInByb3BlcnR5UmVtb3ZlIiwicHJvcGVydHlDb25zdGFudCIsInByb3BlcnR5RnVuY3Rpb24iLCJzZWxlY3Rpb25fcHJvcGVydHkiLCJjbGFzc0FycmF5IiwiY2xhc3NMaXN0IiwiQ2xhc3NMaXN0IiwiX25vZGUiLCJfbmFtZXMiLCJzcGxpY2UiLCJjb250YWlucyIsImNsYXNzZWRBZGQiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJzZWxlY3Rpb25fY2xhc3NlZCIsInRleHRSZW1vdmUiLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJzZWxlY3Rpb25fdGV4dCIsImh0bWxSZW1vdmUiLCJodG1sQ29uc3RhbnQiLCJodG1sRnVuY3Rpb24iLCJzZWxlY3Rpb25faHRtbCIsInJhaXNlIiwibmV4dFNpYmxpbmciLCJzZWxlY3Rpb25fcmFpc2UiLCJsb3dlciIsInByZXZpb3VzU2libGluZyIsInNlbGVjdGlvbl9sb3dlciIsInNlbGVjdGlvbl9hcHBlbmQiLCJjb25zdGFudE51bGwiLCJzZWxlY3Rpb25faW5zZXJ0Iiwic2VsZWN0aW9uX3JlbW92ZSIsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciLCJjbG9uZU5vZGUiLCJzZWxlY3Rpb25fY2xvbmVEZWVwIiwic2VsZWN0aW9uX2Nsb25lIiwiZGVlcCIsInNlbGVjdGlvbl9kYXR1bSIsImZpbHRlckV2ZW50cyIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiZmlsdGVyQ29udGV4dExpc3RlbmVyIiwibGlzdGVuZXIiLCJjb250ZXh0TGlzdGVuZXIiLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImV2ZW50MSIsImV2ZW50MCIsInBhcnNlVHlwZW5hbWVzJDEiLCJvblJlbW92ZSIsIl9fb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2FwdHVyZSIsIm9uQWRkIiwid3JhcCIsInNlbGVjdGlvbl9vbiIsImN1c3RvbUV2ZW50Iiwic291cmNlRXZlbnQiLCJwYXJhbXMiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImNhbmNlbGFibGUiLCJkaXNwYXRjaENvbnN0YW50IiwiZGlzcGF0Y2hGdW5jdGlvbiIsInNlbGVjdGlvbl9kaXNwYXRjaCIsInNlbGVjdEFsbCIsImF0dHIiLCJjbGFzc2VkIiwiY3VycmVudCIsInBvaW50Iiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJyZWN0IiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsIm1vdXNlIiwiY2hhbmdlZFRvdWNoZXMiLCJ0b3VjaCIsInRvdWNoZXMiLCJpZGVudGlmaWVyIiwibm9wcm9wYWdhdGlvbiIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsIm5vZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm5vZHJhZyIsInZpZXciLCJfX25vc2VsZWN0IiwiTW96VXNlclNlbGVjdCIsInllc2RyYWciLCJub2NsaWNrIiwiY29uc3RhbnQkMyIsIkRyYWdFdmVudCIsInN1YmplY3QiLCJhY3RpdmUiLCJkeCIsImR5IiwiZGVmYXVsdEZpbHRlciIsImN0cmxLZXkiLCJidXR0b24iLCJkZWZhdWx0Q29udGFpbmVyIiwiZGVmYXVsdFN1YmplY3QiLCJkZWZhdWx0VG91Y2hhYmxlIiwibmF2aWdhdG9yIiwibWF4VG91Y2hQb2ludHMiLCJkcmFnIiwidG91Y2hhYmxlIiwiZ2VzdHVyZXMiLCJtb3VzZWRvd254IiwibW91c2Vkb3dueSIsIm1vdXNlbW92aW5nIiwidG91Y2hlbmRpbmciLCJjbGlja0Rpc3RhbmNlMiIsIm1vdXNlZG93bmVkIiwidG91Y2hzdGFydGVkIiwidG91Y2htb3ZlZCIsInRvdWNoZW5kZWQiLCJnZXN0dXJlIiwiYmVmb3Jlc3RhcnQiLCJtb3VzZW1vdmVkIiwibW91c2V1cHBlZCIsInN1Ymxpc3RlbmVycyIsInAwIiwiY2xpY2tEaXN0YW5jZSIsIlQkYSIsImtleUNvZGVzIiwidXAiLCJkb3duIiwicGFnZVVwIiwicGFnZURvd24iLCJob21lIiwiU2xpZGVyIiwiX1QkYSIsIl90aGlzMTkiLCJjb25uZWN0ZWQiLCJtb3VzZUV2ZW50Iiwia25vYiIsImJhY2tncm91bmQiLCJ0cmFja0ZpbGwiLCJ0cmFjayIsIm9yaWdpbiIsInJlbmRlclRpY2tzIiwiY2hhbmdlVmFsdWUiLCJkcmFnVXBkYXRlIiwiZGlzcGF0Y2hDaGFuZ2UiLCJvbktleURvd24iLCJrZXlDb2RlIiwidmFsaWRhdGVWYWx1ZVJhbmdlIiwicXVhbnRpemVWYWx1ZSIsImRpc3BhdGNoSW5wdXQiLCJFdmVudCIsIl90aGlzMjAiLCJ0aWNrc0NvbnRhaW5lciIsInRpY2tEYXRhIiwidGljayIsImxvZ28iLCJoZWFkZXJUZW1wbGF0ZSIsIlQkYiIsIkRpc3RpbGxIZWFkZXIiLCJfVCRiIiwic3R5bGVzJDIiLCJhcHBlbmRpeFRlbXBsYXRlIiwiZ2l0aHViQ29tcGFyZVVwZGF0ZXNVcmwiLCJEaXN0aWxsQXBwZW5kaXgiLCJfSFRNTEVsZW1lbnQ5IiwiZm9vdGVyVGVtcGxhdGUiLCJUJGMiLCJEaXN0aWxsRm9vdGVyIiwiX1QkYyIsInRlbXBsYXRlSXNMb2FkaW5nIiwicnVubGV2ZWwiLCJpbml0aWFsaXplIiwiZGlzdGlsbCIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiZnVuY3Rpb25OYW1lIiwiY29tcG9uZW50cyIsImRpc3RpbGxDb21wb25lbnRzIiwiYWxsQ29tcG9uZW50cyIsIl9pdGVyYXRvcjIxIiwiX3N0ZXAyMSIsImNvbXBvbmVudCIsImlzIiwidGVtcGxhdGVIYXNMb2FkZWQiXSwic291cmNlUm9vdCI6IiJ9\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"); +/******/ +/******/ })() +; \ No newline at end of file