2
0
mirror of https://github.com/tenrok/vue-context.git synced 2026-06-09 01:22:23 +03:00
Files
vue-context/test/js/dist/index.js
T

214 lines
1.5 MiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./dist/js/vue-context.js":
/*!********************************!*\
!*** ./dist/js/vue-context.js ***!
\********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n!function (e, t) {\n if (\"object\" == ( false ? undefined : _typeof(exports)) && \"object\" == ( false ? undefined : _typeof(module))) module.exports = t();else if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else { var r, n; }\n}(window, function () {\n return function (e) {\n var t = {};\n\n function n(r) {\n if (t[r]) return t[r].exports;\n var i = t[r] = {\n i: r,\n l: !1,\n exports: {}\n };\n return e[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports;\n }\n\n return n.m = e, n.c = t, n.d = function (e, t, r) {\n n.o(e, t) || Object.defineProperty(e, t, {\n enumerable: !0,\n get: r\n });\n }, n.r = function (e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }, n.t = function (e, t) {\n if (1 & t && (e = n(e)), 8 & t) return e;\n if (4 & t && \"object\" == _typeof(e) && e && e.__esModule) return e;\n var r = Object.create(null);\n if (n.r(r), Object.defineProperty(r, \"default\", {\n enumerable: !0,\n value: e\n }), 2 & t && \"string\" != typeof e) for (var i in e) {\n n.d(r, i, function (t) {\n return e[t];\n }.bind(null, i));\n }\n return r;\n }, n.n = function (e) {\n var t = e && e.__esModule ? function () {\n return e[\"default\"];\n } : function () {\n return e;\n };\n return n.d(t, \"a\", t), t;\n }, n.o = function (e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }, n.p = \"/\", n(n.s = 2);\n }([function (e, t, n) {\n e.exports = n(3);\n }, function (e, t) {\n var n;\n\n n = function () {\n return this;\n }();\n\n try {\n n = n || new Function(\"return this\")();\n } catch (e) {\n \"object\" == (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) && (n = window);\n }\n\n e.exports = n;\n }, function (e, t, n) {\n e.exports = n(7);\n }, function (e, t, n) {\n \"use strict\";\n\n (function (t, n) {\n var r = Object.freeze({});\n\n function i(e) {\n return null == e;\n }\n\n function o(e) {\n return null != e;\n }\n\n function a(e) {\n return !0 === e;\n }\n\n function s(e) {\n return \"string\" == typeof e || \"number\" == typeof e || \"symbol\" == _typeof(e) || \"boolean\" == typeof e;\n }\n\n function c(e) {\n return null !== e && \"object\" == _typeof(e);\n }\n\n var l = Object.prototype.toString;\n\n function u(e) {\n return \"[object Object]\" === l.call(e);\n }\n\n function f(e) {\n var t = parseFloat(String(e));\n return t >= 0 && Math.floor(t) === t && isFinite(e);\n }\n\n function d(e) {\n return o(e) && \"function\" == typeof e.then && \"function\" == typeof e[\"catch\"];\n }\n\n function p(e) {\n return null == e ? \"\" : Array.isArray(e) || u(e) && e.toString === l ? JSON.stringify(e, null, 2) : String(e);\n }\n\n function v(e) {\n var t = parseFloat(e);\n return isNaN(t) ? e : t;\n }\n\n function h(e, t) {\n for (var n = Object.create(null), r = e.split(\",\"), i = 0; i < r.length; i++) {\n n[r[i]] = !0;\n }\n\n return t ? function (e) {\n return n[e.toLowerCase()];\n } : function (e) {\n return n[e];\n };\n }\n\n var m = h(\"slot,component\", !0),\n y = h(\"key,ref,slot,slot-scope,is\");\n\n function g(e, t) {\n if (e.length) {\n var n = e.indexOf(t);\n if (n > -1) return e.splice(n, 1);\n }\n }\n\n var _ = Object.prototype.hasOwnProperty;\n\n function b(e, t) {\n return _.call(e, t);\n }\n\n function w(e) {\n var t = Object.create(null);\n return function (n) {\n return t[n] || (t[n] = e(n));\n };\n }\n\n var $ = /-(\\w)/g,\n x = w(function (e) {\n return e.replace($, function (e, t) {\n return t ? t.toUpperCase() : \"\";\n });\n }),\n C = w(function (e) {\n return e.charAt(0).toUpperCase() + e.slice(1);\n }),\n k = /\\B([A-Z])/g,\n A = w(function (e) {\n return e.replace(k, \"-$1\").toLowerCase();\n }),\n S = Function.prototype.bind ? function (e, t) {\n return e.bind(t);\n } : function (e, t) {\n function n(n) {\n var r = arguments.length;\n return r ? r > 1 ? e.apply(t, arguments) : e.call(t, n) : e.call(t);\n }\n\n return n._length = e.length, n;\n };\n\n function O(e, t) {\n t = t || 0;\n\n for (var n = e.length - t, r = new Array(n); n--;) {\n r[n] = e[n + t];\n }\n\n return r;\n }\n\n function T(e, t) {\n for (var n in t) {\n e[n] = t[n];\n }\n\n return e;\n }\n\n function E(e) {\n for (var t = {}, n = 0; n < e.length; n++) {\n e[n] && T(t, e[n]);\n }\n\n return t;\n }\n\n function I(e, t, n) {}\n\n var j = function j(e, t, n) {\n return !1;\n },\n L = function L(e) {\n return e;\n };\n\n function N(e, t) {\n if (e === t) return !0;\n var n = c(e),\n r = c(t);\n if (!n || !r) return !n && !r && String(e) === String(t);\n\n try {\n var i = Array.isArray(e),\n o = Array.isArray(t);\n if (i && o) return e.length === t.length && e.every(function (e, n) {\n return N(e, t[n]);\n });\n if (e instanceof Date && t instanceof Date) return e.getTime() === t.getTime();\n if (i || o) return !1;\n var a = Object.keys(e),\n s = Object.keys(t);\n return a.length === s.length && a.every(function (n) {\n return N(e[n], t[n]);\n });\n } catch (e) {\n return !1;\n }\n }\n\n function M(e, t) {\n for (var n = 0; n < e.length; n++) {\n if (N(e[n], t)) return n;\n }\n\n return -1;\n }\n\n function D(e) {\n var t = !1;\n return function () {\n t || (t = !0, e.apply(this, arguments));\n };\n }\n\n var P = \"data-server-rendered\",\n F = [\"component\", \"directive\", \"filter\"],\n R = [\"beforeCreate\", \"created\", \"beforeMount\", \"mounted\", \"beforeUpdate\", \"updated\", \"beforeDestroy\", \"destroyed\", \"activated\", \"deactivated\", \"errorCaptured\", \"serverPrefetch\"],\n H = {\n optionMergeStrategies: Object.create(null),\n silent: !1,\n productionTip: !1,\n devtools: !1,\n performance: !1,\n errorHandler: null,\n warnHandler: null,\n ignoredElements: [],\n keyCodes: Object.create(null),\n isReservedTag: j,\n isReservedAttr: j,\n isUnknownElement: j,\n getTagNamespace: I,\n parsePlatformTagName: L,\n mustUseProp: j,\n async: !0,\n _lifecycleHooks: R\n },\n B = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n function U(e, t, n, r) {\n Object.defineProperty(e, t, {\n value: n,\n enumerable: !!r,\n writable: !0,\n configurable: !0\n });\n }\n\n var z,\n V = new RegExp(\"[^\" + B.source + \".$_\\\\d]\"),\n K = \"__proto__\" in {},\n J = \"undefined\" != typeof window,\n q = \"undefined\" != typeof WXEnvironment && !!WXEnvironment.platform,\n W = q && WXEnvironment.platform.toLowerCase(),\n Z = J && window.navigator.userAgent.toLowerCase(),\n G = Z && /msie|trident/.test(Z),\n X = Z && Z.indexOf(\"msie 9.0\") > 0,\n Y = Z && Z.indexOf(\"edge/\") > 0,\n Q = (Z && Z.indexOf(\"android\"), Z && /iphone|ipad|ipod|ios/.test(Z) || \"ios\" === W),\n ee = (Z && /chrome\\/\\d+/.test(Z), Z && /phantomjs/.test(Z), Z && Z.match(/firefox\\/(\\d+)/)),\n te = {}.watch,\n ne = !1;\n if (J) try {\n var re = {};\n Object.defineProperty(re, \"passive\", {\n get: function get() {\n ne = !0;\n }\n }), window.addEventListener(\"test-passive\", null, re);\n } catch (r) {}\n\n var ie = function ie() {\n return void 0 === z && (z = !J && !q && void 0 !== t && t.process && \"server\" === t.process.env.VUE_ENV), z;\n },\n oe = J && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n function ae(e) {\n return \"function\" == typeof e && /native code/.test(e.toString());\n }\n\n var se,\n ce = \"undefined\" != typeof Symbol && ae(Symbol) && \"undefined\" != typeof Reflect && ae(Reflect.ownKeys);\n se = \"undefined\" != typeof Set && ae(Set) ? Set : function () {\n function e() {\n this.set = Object.create(null);\n }\n\n return e.prototype.has = function (e) {\n return !0 === this.set[e];\n }, e.prototype.add = function (e) {\n this.set[e] = !0;\n }, e.prototype.clear = function () {\n this.set = Object.create(null);\n }, e;\n }();\n\n var le = I,\n ue = 0,\n fe = function fe() {\n this.id = ue++, this.subs = [];\n };\n\n fe.prototype.addSub = function (e) {\n this.subs.push(e);\n }, fe.prototype.removeSub = function (e) {\n g(this.subs, e);\n }, fe.prototype.depend = function () {\n fe.target && fe.target.addDep(this);\n }, fe.prototype.notify = function () {\n for (var e = this.subs.slice(), t = 0, n = e.length; t < n; t++) {\n e[t].update();\n }\n }, fe.target = null;\n var de = [];\n\n function pe(e) {\n de.push(e), fe.target = e;\n }\n\n function ve() {\n de.pop(), fe.target = de[de.length - 1];\n }\n\n var he = function he(e, t, n, r, i, o, a, s) {\n this.tag = e, this.data = t, this.children = n, this.text = r, this.elm = i, this.ns = void 0, this.context = o, this.fnContext = void 0, this.fnOptions = void 0, this.fnScopeId = void 0, this.key = t && t.key, this.componentOptions = a, this.componentInstance = void 0, this.parent = void 0, this.raw = !1, this.isStatic = !1, this.isRootInsert = !0, this.isComment = !1, this.isCloned = !1, this.isOnce = !1, this.asyncFactory = s, this.asyncMeta = void 0, this.isAsyncPlaceholder = !1;\n },\n me = {\n child: {\n configurable: !0\n }\n };\n\n me.child.get = function () {\n return this.componentInstance;\n }, Object.defineProperties(he.prototype, me);\n\n var ye = function ye(e) {\n void 0 === e && (e = \"\");\n var t = new he();\n return t.text = e, t.isComment = !0, t;\n };\n\n function ge(e) {\n return new he(void 0, void 0, void 0, String(e));\n }\n\n function _e(e) {\n var t = new he(e.tag, e.data, e.children && e.children.slice(), e.text, e.elm, e.context, e.componentOptions, e.asyncFactory);\n return t.ns = e.ns, t.isStatic = e.isStatic, t.key = e.key, t.isComment = e.isComment, t.fnContext = e.fnContext, t.fnOptions = e.fnOptions, t.fnScopeId = e.fnScopeId, t.asyncMeta = e.asyncMeta, t.isCloned = !0, t;\n }\n\n var be = Array.prototype,\n we = Object.create(be);\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\", \"sort\", \"reverse\"].forEach(function (e) {\n var t = be[e];\n U(we, e, function () {\n for (var n = [], r = arguments.length; r--;) {\n n[r] = arguments[r];\n }\n\n var i,\n o = t.apply(this, n),\n a = this.__ob__;\n\n switch (e) {\n case \"push\":\n case \"unshift\":\n i = n;\n break;\n\n case \"splice\":\n i = n.slice(2);\n }\n\n return i && a.observeArray(i), a.dep.notify(), o;\n });\n });\n var $e = Object.getOwnPropertyNames(we),\n xe = !0;\n\n function Ce(e) {\n xe = e;\n }\n\n var ke = function ke(e) {\n var t;\n this.value = e, this.dep = new fe(), this.vmCount = 0, U(e, \"__ob__\", this), Array.isArray(e) ? (K ? (t = we, e.__proto__ = t) : function (e, t, n) {\n for (var r = 0, i = n.length; r < i; r++) {\n var o = n[r];\n U(e, o, t[o]);\n }\n }(e, we, $e), this.observeArray(e)) : this.walk(e);\n };\n\n function Ae(e, t) {\n var n;\n if (c(e) && !(e instanceof he)) return b(e, \"__ob__\") && e.__ob__ instanceof ke ? n = e.__ob__ : xe && !ie() && (Array.isArray(e) || u(e)) && Object.isExtensible(e) && !e._isVue && (n = new ke(e)), t && n && n.vmCount++, n;\n }\n\n function Se(e, t, n, r, i) {\n var o = new fe(),\n a = Object.getOwnPropertyDescriptor(e, t);\n\n if (!a || !1 !== a.configurable) {\n var s = a && a.get,\n c = a && a.set;\n s && !c || 2 !== arguments.length || (n = e[t]);\n var l = !i && Ae(n);\n Object.defineProperty(e, t, {\n enumerable: !0,\n configurable: !0,\n get: function get() {\n var t = s ? s.call(e) : n;\n return fe.target && (o.depend(), l && (l.dep.depend(), Array.isArray(t) && function e(t) {\n for (var n = void 0, r = 0, i = t.length; r < i; r++) {\n (n = t[r]) && n.__ob__ && n.__ob__.dep.depend(), Array.isArray(n) && e(n);\n }\n }(t))), t;\n },\n set: function set(t) {\n var r = s ? s.call(e) : n;\n t === r || t != t && r != r || s && !c || (c ? c.call(e, t) : n = t, l = !i && Ae(t), o.notify());\n }\n });\n }\n }\n\n function Oe(e, t, n) {\n if (Array.isArray(e) && f(t)) return e.length = Math.max(e.length, t), e.splice(t, 1, n), n;\n if (t in e && !(t in Object.prototype)) return e[t] = n, n;\n var r = e.__ob__;\n return e._isVue || r && r.vmCount ? n : r ? (Se(r.value, t, n), r.dep.notify(), n) : (e[t] = n, n);\n }\n\n function Te(e, t) {\n if (Array.isArray(e) && f(t)) e.splice(t, 1);else {\n var n = e.__ob__;\n e._isVue || n && n.vmCount || b(e, t) && (delete e[t], n && n.dep.notify());\n }\n }\n\n ke.prototype.walk = function (e) {\n for (var t = Object.keys(e), n = 0; n < t.length; n++) {\n Se(e, t[n]);\n }\n }, ke.prototype.observeArray = function (e) {\n for (var t = 0, n = e.length; t < n; t++) {\n Ae(e[t]);\n }\n };\n var Ee = H.optionMergeStrategies;\n\n function Ie(e, t) {\n if (!t) return e;\n\n for (var n, r, i, o = ce ? Reflect.ownKeys(t) : Object.keys(t), a = 0; a < o.length; a++) {\n \"__ob__\" !== (n = o[a]) && (r = e[n], i = t[n], b(e, n) ? r !== i && u(r) && u(i) && Ie(r, i) : Oe(e, n, i));\n }\n\n return e;\n }\n\n function je(e, t, n) {\n return n ? function () {\n var r = \"function\" == typeof t ? t.call(n, n) : t,\n i = \"function\" == typeof e ? e.call(n, n) : e;\n return r ? Ie(r, i) : i;\n } : t ? e ? function () {\n return Ie(\"function\" == typeof t ? t.call(this, this) : t, \"function\" == typeof e ? e.call(this, this) : e);\n } : t : e;\n }\n\n function Le(e, t) {\n var n = t ? e ? e.concat(t) : Array.isArray(t) ? t : [t] : e;\n return n ? function (e) {\n for (var t = [], n = 0; n < e.length; n++) {\n -1 === t.indexOf(e[n]) && t.push(e[n]);\n }\n\n return t;\n }(n) : n;\n }\n\n function Ne(e, t, n, r) {\n var i = Object.create(e || null);\n return t ? T(i, t) : i;\n }\n\n Ee.data = function (e, t, n) {\n return n ? je(e, t, n) : t && \"function\" != typeof t ? e : je(e, t);\n }, R.forEach(function (e) {\n Ee[e] = Le;\n }), F.forEach(function (e) {\n Ee[e + \"s\"] = Ne;\n }), Ee.watch = function (e, t, n, r) {\n if (e === te && (e = void 0), t === te && (t = void 0), !t) return Object.create(e || null);\n if (!e) return t;\n var i = {};\n\n for (var o in T(i, e), t) {\n var a = i[o],\n s = t[o];\n a && !Array.isArray(a) && (a = [a]), i[o] = a ? a.concat(s) : Array.isArray(s) ? s : [s];\n }\n\n return i;\n }, Ee.props = Ee.methods = Ee.inject = Ee.computed = function (e, t, n, r) {\n if (!e) return t;\n var i = Object.create(null);\n return T(i, e), t && T(i, t), i;\n }, Ee.provide = je;\n\n var Me = function Me(e, t) {\n return void 0 === t ? e : t;\n };\n\n function De(e, t, n) {\n if (\"function\" == typeof t && (t = t.options), function (e, t) {\n var n = e.props;\n\n if (n) {\n var r,\n i,\n o = {};\n if (Array.isArray(n)) for (r = n.length; r--;) {\n \"string\" == typeof (i = n[r]) && (o[x(i)] = {\n type: null\n });\n } else if (u(n)) for (var a in n) {\n i = n[a], o[x(a)] = u(i) ? i : {\n type: i\n };\n }\n e.props = o;\n }\n }(t), function (e, t) {\n var n = e.inject;\n\n if (n) {\n var r = e.inject = {};\n if (Array.isArray(n)) for (var i = 0; i < n.length; i++) {\n r[n[i]] = {\n from: n[i]\n };\n } else if (u(n)) for (var o in n) {\n var a = n[o];\n r[o] = u(a) ? T({\n from: o\n }, a) : {\n from: a\n };\n }\n }\n }(t), function (e) {\n var t = e.directives;\n if (t) for (var n in t) {\n var r = t[n];\n \"function\" == typeof r && (t[n] = {\n bind: r,\n update: r\n });\n }\n }(t), !t._base && (t[\"extends\"] && (e = De(e, t[\"extends\"], n)), t.mixins)) for (var r = 0, i = t.mixins.length; r < i; r++) {\n e = De(e, t.mixins[r], n);\n }\n var o,\n a = {};\n\n for (o in e) {\n s(o);\n }\n\n for (o in t) {\n b(e, o) || s(o);\n }\n\n function s(r) {\n var i = Ee[r] || Me;\n a[r] = i(e[r], t[r], n, r);\n }\n\n return a;\n }\n\n function Pe(e, t, n, r) {\n if (\"string\" == typeof n) {\n var i = e[t];\n if (b(i, n)) return i[n];\n var o = x(n);\n if (b(i, o)) return i[o];\n var a = C(o);\n return b(i, a) ? i[a] : i[n] || i[o] || i[a];\n }\n }\n\n function Fe(e, t, n, r) {\n var i = t[e],\n o = !b(n, e),\n a = n[e],\n s = Be(Boolean, i.type);\n if (s > -1) if (o && !b(i, \"default\")) a = !1;else if (\"\" === a || a === A(e)) {\n var c = Be(String, i.type);\n (c < 0 || s < c) && (a = !0);\n }\n\n if (void 0 === a) {\n a = function (e, t, n) {\n if (b(t, \"default\")) {\n var r = t[\"default\"];\n return e && e.$options.propsData && void 0 === e.$options.propsData[n] && void 0 !== e._props[n] ? e._props[n] : \"function\" == typeof r && \"Function\" !== Re(t.type) ? r.call(e) : r;\n }\n }(r, i, e);\n\n var l = xe;\n Ce(!0), Ae(a), Ce(l);\n }\n\n return a;\n }\n\n function Re(e) {\n var t = e && e.toString().match(/^\\s*function (\\w+)/);\n return t ? t[1] : \"\";\n }\n\n function He(e, t) {\n return Re(e) === Re(t);\n }\n\n function Be(e, t) {\n if (!Array.isArray(t)) return He(t, e) ? 0 : -1;\n\n for (var n = 0, r = t.length; n < r; n++) {\n if (He(t[n], e)) return n;\n }\n\n return -1;\n }\n\n function Ue(e, t, n) {\n pe();\n\n try {\n if (t) for (var r = t; r = r.$parent;) {\n var i = r.$options.errorCaptured;\n if (i) for (var o = 0; o < i.length; o++) {\n try {\n if (!1 === i[o].call(r, e, t, n)) return;\n } catch (e) {\n Ve(e, r, \"errorCaptured hook\");\n }\n }\n }\n Ve(e, t, n);\n } finally {\n ve();\n }\n }\n\n function ze(e, t, n, r, i) {\n var o;\n\n try {\n (o = n ? e.apply(t, n) : e.call(t)) && !o._isVue && d(o) && !o._handled && (o[\"catch\"](function (e) {\n return Ue(e, r, i + \" (Promise/async)\");\n }), o._handled = !0);\n } catch (e) {\n Ue(e, r, i);\n }\n\n return o;\n }\n\n function Ve(e, t, n) {\n if (H.errorHandler) try {\n return H.errorHandler.call(null, e, t, n);\n } catch (t) {\n t !== e && Ke(t, null, \"config.errorHandler\");\n }\n Ke(e, t, n);\n }\n\n function Ke(e, t, n) {\n if (!J && !q || \"undefined\" == typeof console) throw e;\n console.error(e);\n }\n\n var Je,\n qe = !1,\n We = [],\n Ze = !1;\n\n function Ge() {\n Ze = !1;\n var e = We.slice(0);\n We.length = 0;\n\n for (var t = 0; t < e.length; t++) {\n e[t]();\n }\n }\n\n if (\"undefined\" != typeof Promise && ae(Promise)) {\n var Xe = Promise.resolve();\n Je = function Je() {\n Xe.then(Ge), Q && setTimeout(I);\n }, qe = !0;\n } else if (G || \"undefined\" == typeof MutationObserver || !ae(MutationObserver) && \"[object MutationObserverConstructor]\" !== MutationObserver.toString()) Je = void 0 !== n && ae(n) ? function () {\n n(Ge);\n } : function () {\n setTimeout(Ge, 0);\n };else {\n var Ye = 1,\n Qe = new MutationObserver(Ge),\n et = document.createTextNode(String(Ye));\n Qe.observe(et, {\n characterData: !0\n }), Je = function Je() {\n Ye = (Ye + 1) % 2, et.data = String(Ye);\n }, qe = !0;\n }\n\n function tt(e, t) {\n var n;\n if (We.push(function () {\n if (e) try {\n e.call(t);\n } catch (e) {\n Ue(e, t, \"nextTick\");\n } else n && n(t);\n }), Ze || (Ze = !0, Je()), !e && \"undefined\" != typeof Promise) return new Promise(function (e) {\n n = e;\n });\n }\n\n var nt = new se();\n\n function rt(e) {\n !function e(t, n) {\n var r,\n i,\n o = Array.isArray(t);\n\n if (!(!o && !c(t) || Object.isFrozen(t) || t instanceof he)) {\n if (t.__ob__) {\n var a = t.__ob__.dep.id;\n if (n.has(a)) return;\n n.add(a);\n }\n\n if (o) for (r = t.length; r--;) {\n e(t[r], n);\n } else for (r = (i = Object.keys(t)).length; r--;) {\n e(t[i[r]], n);\n }\n }\n }(e, nt), nt.clear();\n }\n\n var it = w(function (e) {\n var t = \"&\" === e.charAt(0),\n n = \"~\" === (e = t ? e.slice(1) : e).charAt(0),\n r = \"!\" === (e = n ? e.slice(1) : e).charAt(0);\n return {\n name: e = r ? e.slice(1) : e,\n once: n,\n capture: r,\n passive: t\n };\n });\n\n function ot(e, t) {\n function n() {\n var e = arguments,\n r = n.fns;\n if (!Array.isArray(r)) return ze(r, null, arguments, t, \"v-on handler\");\n\n for (var i = r.slice(), o = 0; o < i.length; o++) {\n ze(i[o], null, e, t, \"v-on handler\");\n }\n }\n\n return n.fns = e, n;\n }\n\n function at(e, t, n, r, o, s) {\n var c, l, u, f;\n\n for (c in e) {\n l = e[c], u = t[c], f = it(c), i(l) || (i(u) ? (i(l.fns) && (l = e[c] = ot(l, s)), a(f.once) && (l = e[c] = o(f.name, l, f.capture)), n(f.name, l, f.capture, f.passive, f.params)) : l !== u && (u.fns = l, e[c] = u));\n }\n\n for (c in t) {\n i(e[c]) && r((f = it(c)).name, t[c], f.capture);\n }\n }\n\n function st(e, t, n) {\n var r;\n e instanceof he && (e = e.data.hook || (e.data.hook = {}));\n var s = e[t];\n\n function c() {\n n.apply(this, arguments), g(r.fns, c);\n }\n\n i(s) ? r = ot([c]) : o(s.fns) && a(s.merged) ? (r = s).fns.push(c) : r = ot([s, c]), r.merged = !0, e[t] = r;\n }\n\n function ct(e, t, n, r, i) {\n if (o(t)) {\n if (b(t, n)) return e[n] = t[n], i || delete t[n], !0;\n if (b(t, r)) return e[n] = t[r], i || delete t[r], !0;\n }\n\n return !1;\n }\n\n function lt(e) {\n return s(e) ? [ge(e)] : Array.isArray(e) ? function e(t, n) {\n var r,\n c,\n l,\n u,\n f = [];\n\n for (r = 0; r < t.length; r++) {\n i(c = t[r]) || \"boolean\" == typeof c || (u = f[l = f.length - 1], Array.isArray(c) ? c.length > 0 && (ut((c = e(c, (n || \"\") + \"_\" + r))[0]) && ut(u) && (f[l] = ge(u.text + c[0].text), c.shift()), f.push.apply(f, c)) : s(c) ? ut(u) ? f[l] = ge(u.text + c) : \"\" !== c && f.push(ge(c)) : ut(c) && ut(u) ? f[l] = ge(u.text + c.text) : (a(t._isVList) && o(c.tag) && i(c.key) && o(n) && (c.key = \"__vlist\" + n + \"_\" + r + \"__\"), f.push(c)));\n }\n\n return f;\n }(e) : void 0;\n }\n\n function ut(e) {\n return o(e) && o(e.text) && !1 === e.isComment;\n }\n\n function ft(e, t) {\n if (e) {\n for (var n = Object.create(null), r = ce ? Reflect.ownKeys(e) : Object.keys(e), i = 0; i < r.length; i++) {\n var o = r[i];\n\n if (\"__ob__\" !== o) {\n for (var a = e[o].from, s = t; s;) {\n if (s._provided && b(s._provided, a)) {\n n[o] = s._provided[a];\n break;\n }\n\n s = s.$parent;\n }\n\n if (!s && \"default\" in e[o]) {\n var c = e[o][\"default\"];\n n[o] = \"function\" == typeof c ? c.call(t) : c;\n }\n }\n }\n\n return n;\n }\n }\n\n function dt(e, t) {\n if (!e || !e.length) return {};\n\n for (var n = {}, r = 0, i = e.length; r < i; r++) {\n var o = e[r],\n a = o.data;\n if (a && a.attrs && a.attrs.slot && delete a.attrs.slot, o.context !== t && o.fnContext !== t || !a || null == a.slot) (n[\"default\"] || (n[\"default\"] = [])).push(o);else {\n var s = a.slot,\n c = n[s] || (n[s] = []);\n \"template\" === o.tag ? c.push.apply(c, o.children || []) : c.push(o);\n }\n }\n\n for (var l in n) {\n n[l].every(pt) && delete n[l];\n }\n\n return n;\n }\n\n function pt(e) {\n return e.isComment && !e.asyncFactory || \" \" === e.text;\n }\n\n function vt(e, t, n) {\n var i,\n o = Object.keys(t).length > 0,\n a = e ? !!e.$stable : !o,\n s = e && e.$key;\n\n if (e) {\n if (e._normalized) return e._normalized;\n if (a && n && n !== r && s === n.$key && !o && !n.$hasNormal) return n;\n\n for (var c in i = {}, e) {\n e[c] && \"$\" !== c[0] && (i[c] = ht(t, c, e[c]));\n }\n } else i = {};\n\n for (var l in t) {\n l in i || (i[l] = mt(t, l));\n }\n\n return e && Object.isExtensible(e) && (e._normalized = i), U(i, \"$stable\", a), U(i, \"$key\", s), U(i, \"$hasNormal\", o), i;\n }\n\n function ht(e, t, n) {\n var r = function r() {\n var e = arguments.length ? n.apply(null, arguments) : n({});\n return (e = e && \"object\" == _typeof(e) && !Array.isArray(e) ? [e] : lt(e)) && (0 === e.length || 1 === e.length && e[0].isComment) ? void 0 : e;\n };\n\n return n.proxy && Object.defineProperty(e, t, {\n get: r,\n enumerable: !0,\n configurable: !0\n }), r;\n }\n\n function mt(e, t) {\n return function () {\n return e[t];\n };\n }\n\n function yt(e, t) {\n var n, r, i, a, s;\n if (Array.isArray(e) || \"string\" == typeof e) for (n = new Array(e.length), r = 0, i = e.length; r < i; r++) {\n n[r] = t(e[r], r);\n } else if (\"number\" == typeof e) for (n = new Array(e), r = 0; r < e; r++) {\n n[r] = t(r + 1, r);\n } else if (c(e)) if (ce && e[Symbol.iterator]) {\n n = [];\n\n for (var l = e[Symbol.iterator](), u = l.next(); !u.done;) {\n n.push(t(u.value, n.length)), u = l.next();\n }\n } else for (a = Object.keys(e), n = new Array(a.length), r = 0, i = a.length; r < i; r++) {\n s = a[r], n[r] = t(e[s], s, r);\n }\n return o(n) || (n = []), n._isVList = !0, n;\n }\n\n function gt(e, t, n, r) {\n var i,\n o = this.$scopedSlots[e];\n o ? (n = n || {}, r && (n = T(T({}, r), n)), i = o(n) || t) : i = this.$slots[e] || t;\n var a = n && n.slot;\n return a ? this.$createElement(\"template\", {\n slot: a\n }, i) : i;\n }\n\n function _t(e) {\n return Pe(this.$options, \"filters\", e) || L;\n }\n\n function bt(e, t) {\n return Array.isArray(e) ? -1 === e.indexOf(t) : e !== t;\n }\n\n function wt(e, t, n, r, i) {\n var o = H.keyCodes[t] || n;\n return i && r && !H.keyCodes[t] ? bt(i, r) : o ? bt(o, e) : r ? A(r) !== t : void 0;\n }\n\n function $t(e, t, n, r, i) {\n if (n && c(n)) {\n var o;\n Array.isArray(n) && (n = E(n));\n\n var a = function a(_a2) {\n if (\"class\" === _a2 || \"style\" === _a2 || y(_a2)) o = e;else {\n var s = e.attrs && e.attrs.type;\n o = r || H.mustUseProp(t, s, _a2) ? e.domProps || (e.domProps = {}) : e.attrs || (e.attrs = {});\n }\n var c = x(_a2),\n l = A(_a2);\n c in o || l in o || (o[_a2] = n[_a2], i && ((e.on || (e.on = {}))[\"update:\" + _a2] = function (e) {\n n[_a2] = e;\n }));\n };\n\n for (var s in n) {\n a(s);\n }\n }\n\n return e;\n }\n\n function xt(e, t) {\n var n = this._staticTrees || (this._staticTrees = []),\n r = n[e];\n return r && !t ? r : (kt(r = n[e] = this.$options.staticRenderFns[e].call(this._renderProxy, null, this), \"__static__\" + e, !1), r);\n }\n\n function Ct(e, t, n) {\n return kt(e, \"__once__\" + t + (n ? \"_\" + n : \"\"), !0), e;\n }\n\n function kt(e, t, n) {\n if (Array.isArray(e)) for (var r = 0; r < e.length; r++) {\n e[r] && \"string\" != typeof e[r] && At(e[r], t + \"_\" + r, n);\n } else At(e, t, n);\n }\n\n function At(e, t, n) {\n e.isStatic = !0, e.key = t, e.isOnce = n;\n }\n\n function St(e, t) {\n if (t && u(t)) {\n var n = e.on = e.on ? T({}, e.on) : {};\n\n for (var r in t) {\n var i = n[r],\n o = t[r];\n n[r] = i ? [].concat(i, o) : o;\n }\n }\n\n return e;\n }\n\n function Ot(e, t, n, r) {\n t = t || {\n $stable: !n\n };\n\n for (var i = 0; i < e.length; i++) {\n var o = e[i];\n Array.isArray(o) ? Ot(o, t, n) : o && (o.proxy && (o.fn.proxy = !0), t[o.key] = o.fn);\n }\n\n return r && (t.$key = r), t;\n }\n\n function Tt(e, t) {\n for (var n = 0; n < t.length; n += 2) {\n var r = t[n];\n \"string\" == typeof r && r && (e[t[n]] = t[n + 1]);\n }\n\n return e;\n }\n\n function Et(e, t) {\n return \"string\" == typeof e ? t + e : e;\n }\n\n function It(e) {\n e._o = Ct, e._n = v, e._s = p, e._l = yt, e._t = gt, e._q = N, e._i = M, e._m = xt, e._f = _t, e._k = wt, e._b = $t, e._v = ge, e._e = ye, e._u = Ot, e._g = St, e._d = Tt, e._p = Et;\n }\n\n function jt(e, t, n, i, o) {\n var s,\n c = this,\n l = o.options;\n b(i, \"_uid\") ? (s = Object.create(i))._original = i : (s = i, i = i._original);\n var u = a(l._compiled),\n f = !u;\n this.data = e, this.props = t, this.children = n, this.parent = i, this.listeners = e.on || r, this.injections = ft(l.inject, i), this.slots = function () {\n return c.$slots || vt(e.scopedSlots, c.$slots = dt(n, i)), c.$slots;\n }, Object.defineProperty(this, \"scopedSlots\", {\n enumerable: !0,\n get: function get() {\n return vt(e.scopedSlots, this.slots());\n }\n }), u && (this.$options = l, this.$slots = this.slots(), this.$scopedSlots = vt(e.scopedSlots, this.$slots)), l._scopeId ? this._c = function (e, t, n, r) {\n var o = Bt(s, e, t, n, r, f);\n return o && !Array.isArray(o) && (o.fnScopeId = l._scopeId, o.fnContext = i), o;\n } : this._c = function (e, t, n, r) {\n return Bt(s, e, t, n, r, f);\n };\n }\n\n function Lt(e, t, n, r, i) {\n var o = _e(e);\n\n return o.fnContext = n, o.fnOptions = r, t.slot && ((o.data || (o.data = {})).slot = t.slot), o;\n }\n\n function Nt(e, t) {\n for (var n in t) {\n e[x(n)] = t[n];\n }\n }\n\n It(jt.prototype);\n var Mt = {\n init: function init(e, t) {\n if (e.componentInstance && !e.componentInstance._isDestroyed && e.data.keepAlive) {\n var n = e;\n Mt.prepatch(n, n);\n } else (e.componentInstance = function (e, t) {\n var n = {\n _isComponent: !0,\n _parentVnode: e,\n parent: Xt\n },\n r = e.data.inlineTemplate;\n return o(r) && (n.render = r.render, n.staticRenderFns = r.staticRenderFns), new e.componentOptions.Ctor(n);\n }(e)).$mount(t ? e.elm : void 0, t);\n },\n prepatch: function prepatch(e, t) {\n var n = t.componentOptions;\n !function (e, t, n, i, o) {\n var a = i.data.scopedSlots,\n s = e.$scopedSlots,\n c = !!(a && !a.$stable || s !== r && !s.$stable || a && e.$scopedSlots.$key !== a.$key),\n l = !!(o || e.$options._renderChildren || c);\n\n if (e.$options._parentVnode = i, e.$vnode = i, e._vnode && (e._vnode.parent = i), e.$options._renderChildren = o, e.$attrs = i.data.attrs || r, e.$listeners = n || r, t && e.$options.props) {\n Ce(!1);\n\n for (var u = e._props, f = e.$options._propKeys || [], d = 0; d < f.length; d++) {\n var p = f[d],\n v = e.$options.props;\n u[p] = Fe(p, v, t, e);\n }\n\n Ce(!0), e.$options.propsData = t;\n }\n\n n = n || r;\n var h = e.$options._parentListeners;\n e.$options._parentListeners = n, Gt(e, n, h), l && (e.$slots = dt(o, i.context), e.$forceUpdate());\n }(t.componentInstance = e.componentInstance, n.propsData, n.listeners, t, n.children);\n },\n insert: function insert(e) {\n var t,\n n = e.context,\n r = e.componentInstance;\n r._isMounted || (r._isMounted = !0, tn(r, \"mounted\")), e.data.keepAlive && (n._isMounted ? ((t = r)._inactive = !1, rn.push(t)) : en(r, !0));\n },\n destroy: function destroy(e) {\n var t = e.componentInstance;\n t._isDestroyed || (e.data.keepAlive ? function e(t, n) {\n if (!(n && (t._directInactive = !0, Qt(t)) || t._inactive)) {\n t._inactive = !0;\n\n for (var r = 0; r < t.$children.length; r++) {\n e(t.$children[r]);\n }\n\n tn(t, \"deactivated\");\n }\n }(t, !0) : t.$destroy());\n }\n },\n Dt = Object.keys(Mt);\n\n function Pt(e, t, n, s, l) {\n if (!i(e)) {\n var u = n.$options._base;\n\n if (c(e) && (e = u.extend(e)), \"function\" == typeof e) {\n var f;\n if (i(e.cid) && void 0 === (e = function (e, t) {\n if (a(e.error) && o(e.errorComp)) return e.errorComp;\n if (o(e.resolved)) return e.resolved;\n var n = zt;\n if (n && o(e.owners) && -1 === e.owners.indexOf(n) && e.owners.push(n), a(e.loading) && o(e.loadingComp)) return e.loadingComp;\n\n if (n && !o(e.owners)) {\n var r = e.owners = [n],\n s = !0,\n l = null,\n u = null;\n n.$on(\"hook:destroyed\", function () {\n return g(r, n);\n });\n\n var f = function f(e) {\n for (var t = 0, n = r.length; t < n; t++) {\n r[t].$forceUpdate();\n }\n\n e && (r.length = 0, null !== l && (clearTimeout(l), l = null), null !== u && (clearTimeout(u), u = null));\n },\n p = D(function (n) {\n e.resolved = Vt(n, t), s ? r.length = 0 : f(!0);\n }),\n v = D(function (t) {\n o(e.errorComp) && (e.error = !0, f(!0));\n }),\n h = e(p, v);\n\n return c(h) && (d(h) ? i(e.resolved) && h.then(p, v) : d(h.component) && (h.component.then(p, v), o(h.error) && (e.errorComp = Vt(h.error, t)), o(h.loading) && (e.loadingComp = Vt(h.loading, t), 0 === h.delay ? e.loading = !0 : l = setTimeout(function () {\n l = null, i(e.resolved) && i(e.error) && (e.loading = !0, f(!1));\n }, h.delay || 200)), o(h.timeout) && (u = setTimeout(function () {\n u = null, i(e.resolved) && v(null);\n }, h.timeout)))), s = !1, e.loading ? e.loadingComp : e.resolved;\n }\n }(f = e, u))) return function (e, t, n, r, i) {\n var o = ye();\n return o.asyncFactory = e, o.asyncMeta = {\n data: t,\n context: n,\n children: r,\n tag: i\n }, o;\n }(f, t, n, s, l);\n t = t || {}, xn(e), o(t.model) && function (e, t) {\n var n = e.model && e.model.prop || \"value\",\n r = e.model && e.model.event || \"input\";\n (t.attrs || (t.attrs = {}))[n] = t.model.value;\n var i = t.on || (t.on = {}),\n a = i[r],\n s = t.model.callback;\n o(a) ? (Array.isArray(a) ? -1 === a.indexOf(s) : a !== s) && (i[r] = [s].concat(a)) : i[r] = s;\n }(e.options, t);\n\n var p = function (e, t, n) {\n var r = t.options.props;\n\n if (!i(r)) {\n var a = {},\n s = e.attrs,\n c = e.props;\n if (o(s) || o(c)) for (var l in r) {\n var u = A(l);\n ct(a, c, l, u, !0) || ct(a, s, l, u, !1);\n }\n return a;\n }\n }(t, e);\n\n if (a(e.options.functional)) return function (e, t, n, i, a) {\n var s = e.options,\n c = {},\n l = s.props;\n if (o(l)) for (var u in l) {\n c[u] = Fe(u, l, t || r);\n } else o(n.attrs) && Nt(c, n.attrs), o(n.props) && Nt(c, n.props);\n var f = new jt(n, c, a, i, e),\n d = s.render.call(null, f._c, f);\n if (d instanceof he) return Lt(d, n, f.parent, s);\n\n if (Array.isArray(d)) {\n for (var p = lt(d) || [], v = new Array(p.length), h = 0; h < p.length; h++) {\n v[h] = Lt(p[h], n, f.parent, s);\n }\n\n return v;\n }\n }(e, p, t, n, s);\n var v = t.on;\n\n if (t.on = t.nativeOn, a(e.options[\"abstract\"])) {\n var h = t.slot;\n t = {}, h && (t.slot = h);\n }\n\n !function (e) {\n for (var t = e.hook || (e.hook = {}), n = 0; n < Dt.length; n++) {\n var r = Dt[n],\n i = t[r],\n o = Mt[r];\n i === o || i && i._merged || (t[r] = i ? Ft(o, i) : o);\n }\n }(t);\n var m = e.options.name || l;\n return new he(\"vue-component-\" + e.cid + (m ? \"-\" + m : \"\"), t, void 0, void 0, void 0, n, {\n Ctor: e,\n propsData: p,\n listeners: v,\n tag: l,\n children: s\n }, f);\n }\n }\n }\n\n function Ft(e, t) {\n var n = function n(_n2, r) {\n e(_n2, r), t(_n2, r);\n };\n\n return n._merged = !0, n;\n }\n\n var Rt = 1,\n Ht = 2;\n\n function Bt(e, t, n, r, l, u) {\n return (Array.isArray(n) || s(n)) && (l = r, r = n, n = void 0), a(u) && (l = Ht), function (e, t, n, r, s) {\n if (o(n) && o(n.__ob__)) return ye();\n if (o(n) && o(n.is) && (t = n.is), !t) return ye();\n var l, u, f;\n (Array.isArray(r) && \"function\" == typeof r[0] && ((n = n || {}).scopedSlots = {\n \"default\": r[0]\n }, r.length = 0), s === Ht ? r = lt(r) : s === Rt && (r = function (e) {\n for (var t = 0; t < e.length; t++) {\n if (Array.isArray(e[t])) return Array.prototype.concat.apply([], e);\n }\n\n return e;\n }(r)), \"string\" == typeof t) ? (u = e.$vnode && e.$vnode.ns || H.getTagNamespace(t), l = H.isReservedTag(t) ? new he(H.parsePlatformTagName(t), n, r, void 0, void 0, e) : n && n.pre || !o(f = Pe(e.$options, \"components\", t)) ? new he(t, n, r, void 0, void 0, e) : Pt(f, n, e, r, t)) : l = Pt(t, n, e, r);\n return Array.isArray(l) ? l : o(l) ? (o(u) && function e(t, n, r) {\n if (t.ns = n, \"foreignObject\" === t.tag && (n = void 0, r = !0), o(t.children)) for (var s = 0, c = t.children.length; s < c; s++) {\n var l = t.children[s];\n o(l.tag) && (i(l.ns) || a(r) && \"svg\" !== l.tag) && e(l, n, r);\n }\n }(l, u), o(n) && function (e) {\n c(e.style) && rt(e.style), c(e[\"class\"]) && rt(e[\"class\"]);\n }(n), l) : ye();\n }(e, t, n, r, l);\n }\n\n var Ut,\n zt = null;\n\n function Vt(e, t) {\n return (e.__esModule || ce && \"Module\" === e[Symbol.toStringTag]) && (e = e[\"default\"]), c(e) ? t.extend(e) : e;\n }\n\n function Kt(e) {\n return e.isComment && e.asyncFactory;\n }\n\n function Jt(e) {\n if (Array.isArray(e)) for (var t = 0; t < e.length; t++) {\n var n = e[t];\n if (o(n) && (o(n.componentOptions) || Kt(n))) return n;\n }\n }\n\n function qt(e, t) {\n Ut.$on(e, t);\n }\n\n function Wt(e, t) {\n Ut.$off(e, t);\n }\n\n function Zt(e, t) {\n var n = Ut;\n return function r() {\n null !== t.apply(null, arguments) && n.$off(e, r);\n };\n }\n\n function Gt(e, t, n) {\n Ut = e, at(t, n || {}, qt, Wt, Zt, e), Ut = void 0;\n }\n\n var Xt = null;\n\n function Yt(e) {\n var t = Xt;\n return Xt = e, function () {\n Xt = t;\n };\n }\n\n function Qt(e) {\n for (; e && (e = e.$parent);) {\n if (e._inactive) return !0;\n }\n\n return !1;\n }\n\n function en(e, t) {\n if (t) {\n if (e._directInactive = !1, Qt(e)) return;\n } else if (e._directInactive) return;\n\n if (e._inactive || null === e._inactive) {\n e._inactive = !1;\n\n for (var n = 0; n < e.$children.length; n++) {\n en(e.$children[n]);\n }\n\n tn(e, \"activated\");\n }\n }\n\n function tn(e, t) {\n pe();\n var n = e.$options[t],\n r = t + \" hook\";\n if (n) for (var i = 0, o = n.length; i < o; i++) {\n ze(n[i], e, null, e, r);\n }\n e._hasHookEvent && e.$emit(\"hook:\" + t), ve();\n }\n\n var nn = [],\n rn = [],\n on = {},\n an = !1,\n sn = !1,\n cn = 0,\n ln = 0,\n un = Date.now;\n\n if (J && !G) {\n var fn = window.performance;\n fn && \"function\" == typeof fn.now && un() > document.createEvent(\"Event\").timeStamp && (un = function un() {\n return fn.now();\n });\n }\n\n function dn() {\n var e, t;\n\n for (ln = un(), sn = !0, nn.sort(function (e, t) {\n return e.id - t.id;\n }), cn = 0; cn < nn.length; cn++) {\n (e = nn[cn]).before && e.before(), t = e.id, on[t] = null, e.run();\n }\n\n var n = rn.slice(),\n r = nn.slice();\n cn = nn.length = rn.length = 0, on = {}, an = sn = !1, function (e) {\n for (var t = 0; t < e.length; t++) {\n e[t]._inactive = !0, en(e[t], !0);\n }\n }(n), function (e) {\n for (var t = e.length; t--;) {\n var n = e[t],\n r = n.vm;\n r._watcher === n && r._isMounted && !r._isDestroyed && tn(r, \"updated\");\n }\n }(r), oe && H.devtools && oe.emit(\"flush\");\n }\n\n var pn = 0,\n vn = function vn(e, t, n, r, i) {\n this.vm = e, i && (e._watcher = this), e._watchers.push(this), r ? (this.deep = !!r.deep, this.user = !!r.user, this.lazy = !!r.lazy, this.sync = !!r.sync, this.before = r.before) : this.deep = this.user = this.lazy = this.sync = !1, this.cb = n, this.id = ++pn, this.active = !0, this.dirty = this.lazy, this.deps = [], this.newDeps = [], this.depIds = new se(), this.newDepIds = new se(), this.expression = \"\", \"function\" == typeof t ? this.getter = t : (this.getter = function (e) {\n if (!V.test(e)) {\n var t = e.split(\".\");\n return function (e) {\n for (var n = 0; n < t.length; n++) {\n if (!e) return;\n e = e[t[n]];\n }\n\n return e;\n };\n }\n }(t), this.getter || (this.getter = I)), this.value = this.lazy ? void 0 : this.get();\n };\n\n vn.prototype.get = function () {\n var e;\n pe(this);\n var t = this.vm;\n\n try {\n e = this.getter.call(t, t);\n } catch (e) {\n if (!this.user) throw e;\n Ue(e, t, 'getter for watcher \"' + this.expression + '\"');\n } finally {\n this.deep && rt(e), ve(), this.cleanupDeps();\n }\n\n return e;\n }, vn.prototype.addDep = function (e) {\n var t = e.id;\n this.newDepIds.has(t) || (this.newDepIds.add(t), this.newDeps.push(e), this.depIds.has(t) || e.addSub(this));\n }, vn.prototype.cleanupDeps = function () {\n for (var e = this.deps.length; e--;) {\n var t = this.deps[e];\n this.newDepIds.has(t.id) || t.removeSub(this);\n }\n\n var n = this.depIds;\n this.depIds = this.newDepIds, this.newDepIds = n, this.newDepIds.clear(), n = this.deps, this.deps = this.newDeps, this.newDeps = n, this.newDeps.length = 0;\n }, vn.prototype.update = function () {\n this.lazy ? this.dirty = !0 : this.sync ? this.run() : function (e) {\n var t = e.id;\n\n if (null == on[t]) {\n if (on[t] = !0, sn) {\n for (var n = nn.length - 1; n > cn && nn[n].id > e.id;) {\n n--;\n }\n\n nn.splice(n + 1, 0, e);\n } else nn.push(e);\n\n an || (an = !0, tt(dn));\n }\n }(this);\n }, vn.prototype.run = function () {\n if (this.active) {\n var e = this.get();\n\n if (e !== this.value || c(e) || this.deep) {\n var t = this.value;\n if (this.value = e, this.user) try {\n this.cb.call(this.vm, e, t);\n } catch (e) {\n Ue(e, this.vm, 'callback for watcher \"' + this.expression + '\"');\n } else this.cb.call(this.vm, e, t);\n }\n }\n }, vn.prototype.evaluate = function () {\n this.value = this.get(), this.dirty = !1;\n }, vn.prototype.depend = function () {\n for (var e = this.deps.length; e--;) {\n this.deps[e].depend();\n }\n }, vn.prototype.teardown = function () {\n if (this.active) {\n this.vm._isBeingDestroyed || g(this.vm._watchers, this);\n\n for (var e = this.deps.length; e--;) {\n this.deps[e].removeSub(this);\n }\n\n this.active = !1;\n }\n };\n var hn = {\n enumerable: !0,\n configurable: !0,\n get: I,\n set: I\n };\n\n function mn(e, t, n) {\n hn.get = function () {\n return this[t][n];\n }, hn.set = function (e) {\n this[t][n] = e;\n }, Object.defineProperty(e, n, hn);\n }\n\n var yn = {\n lazy: !0\n };\n\n function gn(e, t, n) {\n var r = !ie();\n \"function\" == typeof n ? (hn.get = r ? _n(t) : bn(n), hn.set = I) : (hn.get = n.get ? r && !1 !== n.cache ? _n(t) : bn(n.get) : I, hn.set = n.set || I), Object.defineProperty(e, t, hn);\n }\n\n function _n(e) {\n return function () {\n var t = this._computedWatchers && this._computedWatchers[e];\n if (t) return t.dirty && t.evaluate(), fe.target && t.depend(), t.value;\n };\n }\n\n function bn(e) {\n return function () {\n return e.call(this, this);\n };\n }\n\n function wn(e, t, n, r) {\n return u(n) && (r = n, n = n.handler), \"string\" == typeof n && (n = e[n]), e.$watch(t, n, r);\n }\n\n var $n = 0;\n\n function xn(e) {\n var t = e.options;\n\n if (e[\"super\"]) {\n var n = xn(e[\"super\"]);\n\n if (n !== e.superOptions) {\n e.superOptions = n;\n\n var r = function (e) {\n var t,\n n = e.options,\n r = e.sealedOptions;\n\n for (var i in n) {\n n[i] !== r[i] && (t || (t = {}), t[i] = n[i]);\n }\n\n return t;\n }(e);\n\n r && T(e.extendOptions, r), (t = e.options = De(n, e.extendOptions)).name && (t.components[t.name] = e);\n }\n }\n\n return t;\n }\n\n function Cn(e) {\n this._init(e);\n }\n\n function kn(e) {\n return e && (e.Ctor.options.name || e.tag);\n }\n\n function An(e, t) {\n return Array.isArray(e) ? e.indexOf(t) > -1 : \"string\" == typeof e ? e.split(\",\").indexOf(t) > -1 : (n = e, \"[object RegExp]\" === l.call(n) && e.test(t));\n var n;\n }\n\n function Sn(e, t) {\n var n = e.cache,\n r = e.keys,\n i = e._vnode;\n\n for (var o in n) {\n var a = n[o];\n\n if (a) {\n var s = kn(a.componentOptions);\n s && !t(s) && On(n, o, r, i);\n }\n }\n }\n\n function On(e, t, n, r) {\n var i = e[t];\n !i || r && i.tag === r.tag || i.componentInstance.$destroy(), e[t] = null, g(n, t);\n }\n\n Cn.prototype._init = function (e) {\n var t = this;\n t._uid = $n++, t._isVue = !0, e && e._isComponent ? function (e, t) {\n var n = e.$options = Object.create(e.constructor.options),\n r = t._parentVnode;\n n.parent = t.parent, n._parentVnode = r;\n var i = r.componentOptions;\n n.propsData = i.propsData, n._parentListeners = i.listeners, n._renderChildren = i.children, n._componentTag = i.tag, t.render && (n.render = t.render, n.staticRenderFns = t.staticRenderFns);\n }(t, e) : t.$options = De(xn(t.constructor), e || {}, t), t._renderProxy = t, t._self = t, function (e) {\n var t = e.$options,\n n = t.parent;\n\n if (n && !t[\"abstract\"]) {\n for (; n.$options[\"abstract\"] && n.$parent;) {\n n = n.$parent;\n }\n\n n.$children.push(e);\n }\n\n e.$parent = n, e.$root = n ? n.$root : e, e.$children = [], e.$refs = {}, e._watcher = null, e._inactive = null, e._directInactive = !1, e._isMounted = !1, e._isDestroyed = !1, e._isBeingDestroyed = !1;\n }(t), function (e) {\n e._events = Object.create(null), e._hasHookEvent = !1;\n var t = e.$options._parentListeners;\n t && Gt(e, t);\n }(t), function (e) {\n e._vnode = null, e._staticTrees = null;\n var t = e.$options,\n n = e.$vnode = t._parentVnode,\n i = n && n.context;\n e.$slots = dt(t._renderChildren, i), e.$scopedSlots = r, e._c = function (t, n, r, i) {\n return Bt(e, t, n, r, i, !1);\n }, e.$createElement = function (t, n, r, i) {\n return Bt(e, t, n, r, i, !0);\n };\n var o = n && n.data;\n Se(e, \"$attrs\", o && o.attrs || r, null, !0), Se(e, \"$listeners\", t._parentListeners || r, null, !0);\n }(t), tn(t, \"beforeCreate\"), function (e) {\n var t = ft(e.$options.inject, e);\n t && (Ce(!1), Object.keys(t).forEach(function (n) {\n Se(e, n, t[n]);\n }), Ce(!0));\n }(t), function (e) {\n e._watchers = [];\n var t = e.$options;\n t.props && function (e, t) {\n var n = e.$options.propsData || {},\n r = e._props = {},\n i = e.$options._propKeys = [];\n e.$parent && Ce(!1);\n\n var o = function o(_o2) {\n i.push(_o2);\n var a = Fe(_o2, t, n, e);\n Se(r, _o2, a), _o2 in e || mn(e, \"_props\", _o2);\n };\n\n for (var a in t) {\n o(a);\n }\n\n Ce(!0);\n }(e, t.props), t.methods && function (e, t) {\n for (var n in e.$options.props, t) {\n e[n] = \"function\" != typeof t[n] ? I : S(t[n], e);\n }\n }(e, t.methods), t.data ? function (e) {\n var t = e.$options.data;\n u(t = e._data = \"function\" == typeof t ? function (e, t) {\n pe();\n\n try {\n return e.call(t, t);\n } catch (e) {\n return Ue(e, t, \"data()\"), {};\n } finally {\n ve();\n }\n }(t, e) : t || {}) || (t = {});\n\n for (var n, r = Object.keys(t), i = e.$options.props, o = (e.$options.methods, r.length); o--;) {\n var a = r[o];\n i && b(i, a) || 36 !== (n = (a + \"\").charCodeAt(0)) && 95 !== n && mn(e, \"_data\", a);\n }\n\n Ae(t, !0);\n }(e) : Ae(e._data = {}, !0), t.computed && function (e, t) {\n var n = e._computedWatchers = Object.create(null),\n r = ie();\n\n for (var i in t) {\n var o = t[i],\n a = \"function\" == typeof o ? o : o.get;\n r || (n[i] = new vn(e, a || I, I, yn)), i in e || gn(e, i, o);\n }\n }(e, t.computed), t.watch && t.watch !== te && function (e, t) {\n for (var n in t) {\n var r = t[n];\n if (Array.isArray(r)) for (var i = 0; i < r.length; i++) {\n wn(e, n, r[i]);\n } else wn(e, n, r);\n }\n }(e, t.watch);\n }(t), function (e) {\n var t = e.$options.provide;\n t && (e._provided = \"function\" == typeof t ? t.call(e) : t);\n }(t), tn(t, \"created\"), t.$options.el && t.$mount(t.$options.el);\n }, function (e) {\n Object.defineProperty(e.prototype, \"$data\", {\n get: function get() {\n return this._data;\n }\n }), Object.defineProperty(e.prototype, \"$props\", {\n get: function get() {\n return this._props;\n }\n }), e.prototype.$set = Oe, e.prototype.$delete = Te, e.prototype.$watch = function (e, t, n) {\n if (u(t)) return wn(this, e, t, n);\n (n = n || {}).user = !0;\n var r = new vn(this, e, t, n);\n if (n.immediate) try {\n t.call(this, r.value);\n } catch (e) {\n Ue(e, this, 'callback for immediate watcher \"' + r.expression + '\"');\n }\n return function () {\n r.teardown();\n };\n };\n }(Cn), function (e) {\n var t = /^hook:/;\n e.prototype.$on = function (e, n) {\n var r = this;\n if (Array.isArray(e)) for (var i = 0, o = e.length; i < o; i++) {\n r.$on(e[i], n);\n } else (r._events[e] || (r._events[e] = [])).push(n), t.test(e) && (r._hasHookEvent = !0);\n return r;\n }, e.prototype.$once = function (e, t) {\n var n = this;\n\n function r() {\n n.$off(e, r), t.apply(n, arguments);\n }\n\n return r.fn = t, n.$on(e, r), n;\n }, e.prototype.$off = function (e, t) {\n var n = this;\n if (!arguments.length) return n._events = Object.create(null), n;\n\n if (Array.isArray(e)) {\n for (var r = 0, i = e.length; r < i; r++) {\n n.$off(e[r], t);\n }\n\n return n;\n }\n\n var o,\n a = n._events[e];\n if (!a) return n;\n if (!t) return n._events[e] = null, n;\n\n for (var s = a.length; s--;) {\n if ((o = a[s]) === t || o.fn === t) {\n a.splice(s, 1);\n break;\n }\n }\n\n return n;\n }, e.prototype.$emit = function (e) {\n var t = this._events[e];\n\n if (t) {\n t = t.length > 1 ? O(t) : t;\n\n for (var n = O(arguments, 1), r = 'event handler for \"' + e + '\"', i = 0, o = t.length; i < o; i++) {\n ze(t[i], this, n, this, r);\n }\n }\n\n return this;\n };\n }(Cn), function (e) {\n e.prototype._update = function (e, t) {\n var n = this,\n r = n.$el,\n i = n._vnode,\n o = Yt(n);\n n._vnode = e, n.$el = i ? n.__patch__(i, e) : n.__patch__(n.$el, e, t, !1), o(), r && (r.__vue__ = null), n.$el && (n.$el.__vue__ = n), n.$vnode && n.$parent && n.$vnode === n.$parent._vnode && (n.$parent.$el = n.$el);\n }, e.prototype.$forceUpdate = function () {\n this._watcher && this._watcher.update();\n }, e.prototype.$destroy = function () {\n var e = this;\n\n if (!e._isBeingDestroyed) {\n tn(e, \"beforeDestroy\"), e._isBeingDestroyed = !0;\n var t = e.$parent;\n !t || t._isBeingDestroyed || e.$options[\"abstract\"] || g(t.$children, e), e._watcher && e._watcher.teardown();\n\n for (var n = e._watchers.length; n--;) {\n e._watchers[n].teardown();\n }\n\n e._data.__ob__ && e._data.__ob__.vmCount--, e._isDestroyed = !0, e.__patch__(e._vnode, null), tn(e, \"destroyed\"), e.$off(), e.$el && (e.$el.__vue__ = null), e.$vnode && (e.$vnode.parent = null);\n }\n };\n }(Cn), function (e) {\n It(e.prototype), e.prototype.$nextTick = function (e) {\n return tt(e, this);\n }, e.prototype._render = function () {\n var e,\n t = this,\n n = t.$options,\n r = n.render,\n i = n._parentVnode;\n i && (t.$scopedSlots = vt(i.data.scopedSlots, t.$slots, t.$scopedSlots)), t.$vnode = i;\n\n try {\n zt = t, e = r.call(t._renderProxy, t.$createElement);\n } catch (n) {\n Ue(n, t, \"render\"), e = t._vnode;\n } finally {\n zt = null;\n }\n\n return Array.isArray(e) && 1 === e.length && (e = e[0]), e instanceof he || (e = ye()), e.parent = i, e;\n };\n }(Cn);\n var Tn = [String, RegExp, Array],\n En = {\n KeepAlive: {\n name: \"keep-alive\",\n \"abstract\": !0,\n props: {\n include: Tn,\n exclude: Tn,\n max: [String, Number]\n },\n created: function created() {\n this.cache = Object.create(null), this.keys = [];\n },\n destroyed: function destroyed() {\n for (var e in this.cache) {\n On(this.cache, e, this.keys);\n }\n },\n mounted: function mounted() {\n var e = this;\n this.$watch(\"include\", function (t) {\n Sn(e, function (e) {\n return An(t, e);\n });\n }), this.$watch(\"exclude\", function (t) {\n Sn(e, function (e) {\n return !An(t, e);\n });\n });\n },\n render: function render() {\n var e = this.$slots[\"default\"],\n t = Jt(e),\n n = t && t.componentOptions;\n\n if (n) {\n var r = kn(n),\n i = this.include,\n o = this.exclude;\n if (i && (!r || !An(i, r)) || o && r && An(o, r)) return t;\n var a = this.cache,\n s = this.keys,\n c = null == t.key ? n.Ctor.cid + (n.tag ? \"::\" + n.tag : \"\") : t.key;\n a[c] ? (t.componentInstance = a[c].componentInstance, g(s, c), s.push(c)) : (a[c] = t, s.push(c), this.max && s.length > parseInt(this.max) && On(a, s[0], s, this._vnode)), t.data.keepAlive = !0;\n }\n\n return t || e && e[0];\n }\n }\n };\n !function (e) {\n var t = {\n get: function get() {\n return H;\n }\n };\n Object.defineProperty(e, \"config\", t), e.util = {\n warn: le,\n extend: T,\n mergeOptions: De,\n defineReactive: Se\n }, e.set = Oe, e[\"delete\"] = Te, e.nextTick = tt, e.observable = function (e) {\n return Ae(e), e;\n }, e.options = Object.create(null), F.forEach(function (t) {\n e.options[t + \"s\"] = Object.create(null);\n }), e.options._base = e, T(e.options.components, En), function (e) {\n e.use = function (e) {\n var t = this._installedPlugins || (this._installedPlugins = []);\n if (t.indexOf(e) > -1) return this;\n var n = O(arguments, 1);\n return n.unshift(this), \"function\" == typeof e.install ? e.install.apply(e, n) : \"function\" == typeof e && e.apply(null, n), t.push(e), this;\n };\n }(e), function (e) {\n e.mixin = function (e) {\n return this.options = De(this.options, e), this;\n };\n }(e), function (e) {\n e.cid = 0;\n var t = 1;\n\n e.extend = function (e) {\n e = e || {};\n var n = this,\n r = n.cid,\n i = e._Ctor || (e._Ctor = {});\n if (i[r]) return i[r];\n\n var o = e.name || n.options.name,\n a = function a(e) {\n this._init(e);\n };\n\n return (a.prototype = Object.create(n.prototype)).constructor = a, a.cid = t++, a.options = De(n.options, e), a[\"super\"] = n, a.options.props && function (e) {\n var t = e.options.props;\n\n for (var n in t) {\n mn(e.prototype, \"_props\", n);\n }\n }(a), a.options.computed && function (e) {\n var t = e.options.computed;\n\n for (var n in t) {\n gn(e.prototype, n, t[n]);\n }\n }(a), a.extend = n.extend, a.mixin = n.mixin, a.use = n.use, F.forEach(function (e) {\n a[e] = n[e];\n }), o && (a.options.components[o] = a), a.superOptions = n.options, a.extendOptions = e, a.sealedOptions = T({}, a.options), i[r] = a, a;\n };\n }(e), function (e) {\n F.forEach(function (t) {\n e[t] = function (e, n) {\n return n ? (\"component\" === t && u(n) && (n.name = n.name || e, n = this.options._base.extend(n)), \"directive\" === t && \"function\" == typeof n && (n = {\n bind: n,\n update: n\n }), this.options[t + \"s\"][e] = n, n) : this.options[t + \"s\"][e];\n };\n });\n }(e);\n }(Cn), Object.defineProperty(Cn.prototype, \"$isServer\", {\n get: ie\n }), Object.defineProperty(Cn.prototype, \"$ssrContext\", {\n get: function get() {\n return this.$vnode && this.$vnode.ssrContext;\n }\n }), Object.defineProperty(Cn, \"FunctionalRenderContext\", {\n value: jt\n }), Cn.version = \"2.6.10\";\n\n var In = h(\"style,class\"),\n jn = h(\"input,textarea,option,select,progress\"),\n Ln = function Ln(e, t, n) {\n return \"value\" === n && jn(e) && \"button\" !== t || \"selected\" === n && \"option\" === e || \"checked\" === n && \"input\" === e || \"muted\" === n && \"video\" === e;\n },\n Nn = h(\"contenteditable,draggable,spellcheck\"),\n Mn = h(\"events,caret,typing,plaintext-only\"),\n Dn = function Dn(e, t) {\n return Bn(t) || \"false\" === t ? \"false\" : \"contenteditable\" === e && Mn(t) ? t : \"true\";\n },\n Pn = h(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),\n Fn = \"http://www.w3.org/1999/xlink\",\n Rn = function Rn(e) {\n return \":\" === e.charAt(5) && \"xlink\" === e.slice(0, 5);\n },\n Hn = function Hn(e) {\n return Rn(e) ? e.slice(6, e.length) : \"\";\n },\n Bn = function Bn(e) {\n return null == e || !1 === e;\n };\n\n function Un(e, t) {\n return {\n staticClass: zn(e.staticClass, t.staticClass),\n \"class\": o(e[\"class\"]) ? [e[\"class\"], t[\"class\"]] : t[\"class\"]\n };\n }\n\n function zn(e, t) {\n return e ? t ? e + \" \" + t : e : t || \"\";\n }\n\n function Vn(e) {\n return Array.isArray(e) ? function (e) {\n for (var t, n = \"\", r = 0, i = e.length; r < i; r++) {\n o(t = Vn(e[r])) && \"\" !== t && (n && (n += \" \"), n += t);\n }\n\n return n;\n }(e) : c(e) ? function (e) {\n var t = \"\";\n\n for (var n in e) {\n e[n] && (t && (t += \" \"), t += n);\n }\n\n return t;\n }(e) : \"string\" == typeof e ? e : \"\";\n }\n\n var Kn = {\n svg: \"http://www.w3.org/2000/svg\",\n math: \"http://www.w3.org/1998/Math/MathML\"\n },\n Jn = h(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),\n qn = h(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\", !0),\n Wn = function Wn(e) {\n return Jn(e) || qn(e);\n };\n\n function Zn(e) {\n return qn(e) ? \"svg\" : \"math\" === e ? \"math\" : void 0;\n }\n\n var Gn = Object.create(null),\n Xn = h(\"text,number,password,search,email,tel,url\");\n\n function Yn(e) {\n return \"string\" == typeof e ? document.querySelector(e) || document.createElement(\"div\") : e;\n }\n\n var Qn = Object.freeze({\n createElement: function createElement(e, t) {\n var n = document.createElement(e);\n return \"select\" !== e ? n : (t.data && t.data.attrs && void 0 !== t.data.attrs.multiple && n.setAttribute(\"multiple\", \"multiple\"), n);\n },\n createElementNS: function createElementNS(e, t) {\n return document.createElementNS(Kn[e], t);\n },\n createTextNode: function createTextNode(e) {\n return document.createTextNode(e);\n },\n createComment: function createComment(e) {\n return document.createComment(e);\n },\n insertBefore: function insertBefore(e, t, n) {\n e.insertBefore(t, n);\n },\n removeChild: function removeChild(e, t) {\n e.removeChild(t);\n },\n appendChild: function appendChild(e, t) {\n e.appendChild(t);\n },\n parentNode: function parentNode(e) {\n return e.parentNode;\n },\n nextSibling: function nextSibling(e) {\n return e.nextSibling;\n },\n tagName: function tagName(e) {\n return e.tagName;\n },\n setTextContent: function setTextContent(e, t) {\n e.textContent = t;\n },\n setStyleScope: function setStyleScope(e, t) {\n e.setAttribute(t, \"\");\n }\n }),\n er = {\n create: function create(e, t) {\n tr(t);\n },\n update: function update(e, t) {\n e.data.ref !== t.data.ref && (tr(e, !0), tr(t));\n },\n destroy: function destroy(e) {\n tr(e, !0);\n }\n };\n\n function tr(e, t) {\n var n = e.data.ref;\n\n if (o(n)) {\n var r = e.context,\n i = e.componentInstance || e.elm,\n a = r.$refs;\n t ? Array.isArray(a[n]) ? g(a[n], i) : a[n] === i && (a[n] = void 0) : e.data.refInFor ? Array.isArray(a[n]) ? a[n].indexOf(i) < 0 && a[n].push(i) : a[n] = [i] : a[n] = i;\n }\n }\n\n var nr = new he(\"\", {}, []),\n rr = [\"create\", \"activate\", \"update\", \"remove\", \"destroy\"];\n\n function ir(e, t) {\n return e.key === t.key && (e.tag === t.tag && e.isComment === t.isComment && o(e.data) === o(t.data) && function (e, t) {\n if (\"input\" !== e.tag) return !0;\n var n,\n r = o(n = e.data) && o(n = n.attrs) && n.type,\n i = o(n = t.data) && o(n = n.attrs) && n.type;\n return r === i || Xn(r) && Xn(i);\n }(e, t) || a(e.isAsyncPlaceholder) && e.asyncFactory === t.asyncFactory && i(t.asyncFactory.error));\n }\n\n function or(e, t, n) {\n var r,\n i,\n a = {};\n\n for (r = t; r <= n; ++r) {\n o(i = e[r].key) && (a[i] = r);\n }\n\n return a;\n }\n\n var ar = {\n create: sr,\n update: sr,\n destroy: function destroy(e) {\n sr(e, nr);\n }\n };\n\n function sr(e, t) {\n (e.data.directives || t.data.directives) && function (e, t) {\n var n,\n r,\n i,\n o = e === nr,\n a = t === nr,\n s = lr(e.data.directives, e.context),\n c = lr(t.data.directives, t.context),\n l = [],\n u = [];\n\n for (n in c) {\n r = s[n], i = c[n], r ? (i.oldValue = r.value, i.oldArg = r.arg, fr(i, \"update\", t, e), i.def && i.def.componentUpdated && u.push(i)) : (fr(i, \"bind\", t, e), i.def && i.def.inserted && l.push(i));\n }\n\n if (l.length) {\n var f = function f() {\n for (var n = 0; n < l.length; n++) {\n fr(l[n], \"inserted\", t, e);\n }\n };\n\n o ? st(t, \"insert\", f) : f();\n }\n\n if (u.length && st(t, \"postpatch\", function () {\n for (var n = 0; n < u.length; n++) {\n fr(u[n], \"componentUpdated\", t, e);\n }\n }), !o) for (n in s) {\n c[n] || fr(s[n], \"unbind\", e, e, a);\n }\n }(e, t);\n }\n\n var cr = Object.create(null);\n\n function lr(e, t) {\n var n,\n r,\n i = Object.create(null);\n if (!e) return i;\n\n for (n = 0; n < e.length; n++) {\n (r = e[n]).modifiers || (r.modifiers = cr), i[ur(r)] = r, r.def = Pe(t.$options, \"directives\", r.name);\n }\n\n return i;\n }\n\n function ur(e) {\n return e.rawName || e.name + \".\" + Object.keys(e.modifiers || {}).join(\".\");\n }\n\n function fr(e, t, n, r, i) {\n var o = e.def && e.def[t];\n if (o) try {\n o(n.elm, e, n, r, i);\n } catch (r) {\n Ue(r, n.context, \"directive \" + e.name + \" \" + t + \" hook\");\n }\n }\n\n var dr = [er, ar];\n\n function pr(e, t) {\n var n = t.componentOptions;\n\n if (!(o(n) && !1 === n.Ctor.options.inheritAttrs || i(e.data.attrs) && i(t.data.attrs))) {\n var r,\n a,\n s = t.elm,\n c = e.data.attrs || {},\n l = t.data.attrs || {};\n\n for (r in o(l.__ob__) && (l = t.data.attrs = T({}, l)), l) {\n a = l[r], c[r] !== a && vr(s, r, a);\n }\n\n for (r in (G || Y) && l.value !== c.value && vr(s, \"value\", l.value), c) {\n i(l[r]) && (Rn(r) ? s.removeAttributeNS(Fn, Hn(r)) : Nn(r) || s.removeAttribute(r));\n }\n }\n }\n\n function vr(e, t, n) {\n e.tagName.indexOf(\"-\") > -1 ? hr(e, t, n) : Pn(t) ? Bn(n) ? e.removeAttribute(t) : (n = \"allowfullscreen\" === t && \"EMBED\" === e.tagName ? \"true\" : t, e.setAttribute(t, n)) : Nn(t) ? e.setAttribute(t, Dn(t, n)) : Rn(t) ? Bn(n) ? e.removeAttributeNS(Fn, Hn(t)) : e.setAttributeNS(Fn, t, n) : hr(e, t, n);\n }\n\n function hr(e, t, n) {\n if (Bn(n)) e.removeAttribute(t);else {\n if (G && !X && \"TEXTAREA\" === e.tagName && \"placeholder\" === t && \"\" !== n && !e.__ieph) {\n var r = function r(t) {\n t.stopImmediatePropagation(), e.removeEventListener(\"input\", r);\n };\n\n e.addEventListener(\"input\", r), e.__ieph = !0;\n }\n\n e.setAttribute(t, n);\n }\n }\n\n var mr = {\n create: pr,\n update: pr\n };\n\n function yr(e, t) {\n var n = t.elm,\n r = t.data,\n a = e.data;\n\n if (!(i(r.staticClass) && i(r[\"class\"]) && (i(a) || i(a.staticClass) && i(a[\"class\"])))) {\n var s = function (e) {\n for (var t = e.data, n = e, r = e; o(r.componentInstance);) {\n (r = r.componentInstance._vnode) && r.data && (t = Un(r.data, t));\n }\n\n for (; o(n = n.parent);) {\n n && n.data && (t = Un(t, n.data));\n }\n\n return function (e, t) {\n return o(e) || o(t) ? zn(e, Vn(t)) : \"\";\n }(t.staticClass, t[\"class\"]);\n }(t),\n c = n._transitionClasses;\n\n o(c) && (s = zn(s, Vn(c))), s !== n._prevClass && (n.setAttribute(\"class\", s), n._prevClass = s);\n }\n }\n\n var gr,\n _r,\n br,\n wr,\n $r,\n xr,\n Cr = {\n create: yr,\n update: yr\n },\n kr = /[\\w).+\\-_$\\]]/;\n\n function Ar(e) {\n var t,\n n,\n r,\n i,\n o,\n a = !1,\n s = !1,\n c = !1,\n l = !1,\n u = 0,\n f = 0,\n d = 0,\n p = 0;\n\n for (r = 0; r < e.length; r++) {\n if (n = t, t = e.charCodeAt(r), a) 39 === t && 92 !== n && (a = !1);else if (s) 34 === t && 92 !== n && (s = !1);else if (c) 96 === t && 92 !== n && (c = !1);else if (l) 47 === t && 92 !== n && (l = !1);else if (124 !== t || 124 === e.charCodeAt(r + 1) || 124 === e.charCodeAt(r - 1) || u || f || d) {\n switch (t) {\n case 34:\n s = !0;\n break;\n\n case 39:\n a = !0;\n break;\n\n case 96:\n c = !0;\n break;\n\n case 40:\n d++;\n break;\n\n case 41:\n d--;\n break;\n\n case 91:\n f++;\n break;\n\n case 93:\n f--;\n break;\n\n case 123:\n u++;\n break;\n\n case 125:\n u--;\n }\n\n if (47 === t) {\n for (var v = r - 1, h = void 0; v >= 0 && \" \" === (h = e.charAt(v)); v--) {\n ;\n }\n\n h && kr.test(h) || (l = !0);\n }\n } else void 0 === i ? (p = r + 1, i = e.slice(0, r).trim()) : m();\n }\n\n function m() {\n (o || (o = [])).push(e.slice(p, r).trim()), p = r + 1;\n }\n\n if (void 0 === i ? i = e.slice(0, r).trim() : 0 !== p && m(), o) for (r = 0; r < o.length; r++) {\n i = Sr(i, o[r]);\n }\n return i;\n }\n\n function Sr(e, t) {\n var n = t.indexOf(\"(\");\n if (n < 0) return '_f(\"' + t + '\")(' + e + \")\";\n var r = t.slice(0, n),\n i = t.slice(n + 1);\n return '_f(\"' + r + '\")(' + e + (\")\" !== i ? \",\" + i : i);\n }\n\n function Or(e, t) {\n console.error(\"[Vue compiler]: \" + e);\n }\n\n function Tr(e, t) {\n return e ? e.map(function (e) {\n return e[t];\n }).filter(function (e) {\n return e;\n }) : [];\n }\n\n function Er(e, t, n, r, i) {\n (e.props || (e.props = [])).push(Rr({\n name: t,\n value: n,\n dynamic: i\n }, r)), e.plain = !1;\n }\n\n function Ir(e, t, n, r, i) {\n (i ? e.dynamicAttrs || (e.dynamicAttrs = []) : e.attrs || (e.attrs = [])).push(Rr({\n name: t,\n value: n,\n dynamic: i\n }, r)), e.plain = !1;\n }\n\n function jr(e, t, n, r) {\n e.attrsMap[t] = n, e.attrsList.push(Rr({\n name: t,\n value: n\n }, r));\n }\n\n function Lr(e, t, n, r, i, o, a, s) {\n (e.directives || (e.directives = [])).push(Rr({\n name: t,\n rawName: n,\n value: r,\n arg: i,\n isDynamicArg: o,\n modifiers: a\n }, s)), e.plain = !1;\n }\n\n function Nr(e, t, n) {\n return n ? \"_p(\" + t + ',\"' + e + '\")' : e + t;\n }\n\n function Mr(e, t, n, i, o, a, s, c) {\n var l;\n (i = i || r).right ? c ? t = \"(\" + t + \")==='click'?'contextmenu':(\" + t + \")\" : \"click\" === t && (t = \"contextmenu\", delete i.right) : i.middle && (c ? t = \"(\" + t + \")==='click'?'mouseup':(\" + t + \")\" : \"click\" === t && (t = \"mouseup\")), i.capture && (delete i.capture, t = Nr(\"!\", t, c)), i.once && (delete i.once, t = Nr(\"~\", t, c)), i.passive && (delete i.passive, t = Nr(\"&\", t, c)), i[\"native\"] ? (delete i[\"native\"], l = e.nativeEvents || (e.nativeEvents = {})) : l = e.events || (e.events = {});\n var u = Rr({\n value: n.trim(),\n dynamic: c\n }, s);\n i !== r && (u.modifiers = i);\n var f = l[t];\n Array.isArray(f) ? o ? f.unshift(u) : f.push(u) : l[t] = f ? o ? [u, f] : [f, u] : u, e.plain = !1;\n }\n\n function Dr(e, t, n) {\n var r = Pr(e, \":\" + t) || Pr(e, \"v-bind:\" + t);\n if (null != r) return Ar(r);\n\n if (!1 !== n) {\n var i = Pr(e, t);\n if (null != i) return JSON.stringify(i);\n }\n }\n\n function Pr(e, t, n) {\n var r;\n if (null != (r = e.attrsMap[t])) for (var i = e.attrsList, o = 0, a = i.length; o < a; o++) {\n if (i[o].name === t) {\n i.splice(o, 1);\n break;\n }\n }\n return n && delete e.attrsMap[t], r;\n }\n\n function Fr(e, t) {\n for (var n = e.attrsList, r = 0, i = n.length; r < i; r++) {\n var o = n[r];\n if (t.test(o.name)) return n.splice(r, 1), o;\n }\n }\n\n function Rr(e, t) {\n return t && (null != t.start && (e.start = t.start), null != t.end && (e.end = t.end)), e;\n }\n\n function Hr(e, t, n) {\n var r = n || {},\n i = r.number,\n o = \"$$v\";\n r.trim && (o = \"(typeof $$v === 'string'? $$v.trim(): $$v)\"), i && (o = \"_n(\" + o + \")\");\n var a = Br(t, o);\n e.model = {\n value: \"(\" + t + \")\",\n expression: JSON.stringify(t),\n callback: \"function ($$v) {\" + a + \"}\"\n };\n }\n\n function Br(e, t) {\n var n = function (e) {\n if (e = e.trim(), gr = e.length, e.indexOf(\"[\") < 0 || e.lastIndexOf(\"]\") < gr - 1) return (wr = e.lastIndexOf(\".\")) > -1 ? {\n exp: e.slice(0, wr),\n key: '\"' + e.slice(wr + 1) + '\"'\n } : {\n exp: e,\n key: null\n };\n\n for (_r = e, wr = $r = xr = 0; !zr();) {\n Vr(br = Ur()) ? Jr(br) : 91 === br && Kr(br);\n }\n\n return {\n exp: e.slice(0, $r),\n key: e.slice($r + 1, xr)\n };\n }(e);\n\n return null === n.key ? e + \"=\" + t : \"$set(\" + n.exp + \", \" + n.key + \", \" + t + \")\";\n }\n\n function Ur() {\n return _r.charCodeAt(++wr);\n }\n\n function zr() {\n return wr >= gr;\n }\n\n function Vr(e) {\n return 34 === e || 39 === e;\n }\n\n function Kr(e) {\n var t = 1;\n\n for ($r = wr; !zr();) {\n if (Vr(e = Ur())) Jr(e);else if (91 === e && t++, 93 === e && t--, 0 === t) {\n xr = wr;\n break;\n }\n }\n }\n\n function Jr(e) {\n for (var t = e; !zr() && (e = Ur()) !== t;) {\n ;\n }\n }\n\n var qr,\n Wr = \"__r\",\n Zr = \"__c\";\n\n function Gr(e, t, n) {\n var r = qr;\n return function i() {\n null !== t.apply(null, arguments) && Qr(e, i, n, r);\n };\n }\n\n var Xr = qe && !(ee && Number(ee[1]) <= 53);\n\n function Yr(e, t, n, r) {\n if (Xr) {\n var i = ln,\n o = t;\n\n t = o._wrapper = function (e) {\n if (e.target === e.currentTarget || e.timeStamp >= i || e.timeStamp <= 0 || e.target.ownerDocument !== document) return o.apply(this, arguments);\n };\n }\n\n qr.addEventListener(e, t, ne ? {\n capture: n,\n passive: r\n } : n);\n }\n\n function Qr(e, t, n, r) {\n (r || qr).removeEventListener(e, t._wrapper || t, n);\n }\n\n function ei(e, t) {\n if (!i(e.data.on) || !i(t.data.on)) {\n var n = t.data.on || {},\n r = e.data.on || {};\n qr = t.elm, function (e) {\n if (o(e[Wr])) {\n var t = G ? \"change\" : \"input\";\n e[t] = [].concat(e[Wr], e[t] || []), delete e[Wr];\n }\n\n o(e[Zr]) && (e.change = [].concat(e[Zr], e.change || []), delete e[Zr]);\n }(n), at(n, r, Yr, Qr, Gr, t.context), qr = void 0;\n }\n }\n\n var ti,\n ni = {\n create: ei,\n update: ei\n };\n\n function ri(e, t) {\n if (!i(e.data.domProps) || !i(t.data.domProps)) {\n var n,\n r,\n a = t.elm,\n s = e.data.domProps || {},\n c = t.data.domProps || {};\n\n for (n in o(c.__ob__) && (c = t.data.domProps = T({}, c)), s) {\n n in c || (a[n] = \"\");\n }\n\n for (n in c) {\n if (r = c[n], \"textContent\" === n || \"innerHTML\" === n) {\n if (t.children && (t.children.length = 0), r === s[n]) continue;\n 1 === a.childNodes.length && a.removeChild(a.childNodes[0]);\n }\n\n if (\"value\" === n && \"PROGRESS\" !== a.tagName) {\n a._value = r;\n var l = i(r) ? \"\" : String(r);\n ii(a, l) && (a.value = l);\n } else if (\"innerHTML\" === n && qn(a.tagName) && i(a.innerHTML)) {\n (ti = ti || document.createElement(\"div\")).innerHTML = \"<svg>\" + r + \"</svg>\";\n\n for (var u = ti.firstChild; a.firstChild;) {\n a.removeChild(a.firstChild);\n }\n\n for (; u.firstChild;) {\n a.appendChild(u.firstChild);\n }\n } else if (r !== s[n]) try {\n a[n] = r;\n } catch (e) {}\n }\n }\n }\n\n function ii(e, t) {\n return !e.composing && (\"OPTION\" === e.tagName || function (e, t) {\n var n = !0;\n\n try {\n n = document.activeElement !== e;\n } catch (e) {}\n\n return n && e.value !== t;\n }(e, t) || function (e, t) {\n var n = e.value,\n r = e._vModifiers;\n\n if (o(r)) {\n if (r.number) return v(n) !== v(t);\n if (r.trim) return n.trim() !== t.trim();\n }\n\n return n !== t;\n }(e, t));\n }\n\n var oi = {\n create: ri,\n update: ri\n },\n ai = w(function (e) {\n var t = {},\n n = /:(.+)/;\n return e.split(/;(?![^(]*\\))/g).forEach(function (e) {\n if (e) {\n var r = e.split(n);\n r.length > 1 && (t[r[0].trim()] = r[1].trim());\n }\n }), t;\n });\n\n function si(e) {\n var t = ci(e.style);\n return e.staticStyle ? T(e.staticStyle, t) : t;\n }\n\n function ci(e) {\n return Array.isArray(e) ? E(e) : \"string\" == typeof e ? ai(e) : e;\n }\n\n var li,\n ui = /^--/,\n fi = /\\s*!important$/,\n di = function di(e, t, n) {\n if (ui.test(t)) e.style.setProperty(t, n);else if (fi.test(n)) e.style.setProperty(A(t), n.replace(fi, \"\"), \"important\");else {\n var r = vi(t);\n if (Array.isArray(n)) for (var i = 0, o = n.length; i < o; i++) {\n e.style[r] = n[i];\n } else e.style[r] = n;\n }\n },\n pi = [\"Webkit\", \"Moz\", \"ms\"],\n vi = w(function (e) {\n if (li = li || document.createElement(\"div\").style, \"filter\" !== (e = x(e)) && e in li) return e;\n\n for (var t = e.charAt(0).toUpperCase() + e.slice(1), n = 0; n < pi.length; n++) {\n var r = pi[n] + t;\n if (r in li) return r;\n }\n });\n\n function hi(e, t) {\n var n = t.data,\n r = e.data;\n\n if (!(i(n.staticStyle) && i(n.style) && i(r.staticStyle) && i(r.style))) {\n var a,\n s,\n c = t.elm,\n l = r.staticStyle,\n u = r.normalizedStyle || r.style || {},\n f = l || u,\n d = ci(t.data.style) || {};\n t.data.normalizedStyle = o(d.__ob__) ? T({}, d) : d;\n\n var p = function (e, t) {\n for (var n, r = {}, i = e; i.componentInstance;) {\n (i = i.componentInstance._vnode) && i.data && (n = si(i.data)) && T(r, n);\n }\n\n (n = si(e.data)) && T(r, n);\n\n for (var o = e; o = o.parent;) {\n o.data && (n = si(o.data)) && T(r, n);\n }\n\n return r;\n }(t);\n\n for (s in f) {\n i(p[s]) && di(c, s, \"\");\n }\n\n for (s in p) {\n (a = p[s]) !== f[s] && di(c, s, null == a ? \"\" : a);\n }\n }\n }\n\n var mi = {\n create: hi,\n update: hi\n },\n yi = /\\s+/;\n\n function gi(e, t) {\n if (t && (t = t.trim())) if (e.classList) t.indexOf(\" \") > -1 ? t.split(yi).forEach(function (t) {\n return e.classList.add(t);\n }) : e.classList.add(t);else {\n var n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \";\n n.indexOf(\" \" + t + \" \") < 0 && e.setAttribute(\"class\", (n + t).trim());\n }\n }\n\n function _i(e, t) {\n if (t && (t = t.trim())) if (e.classList) t.indexOf(\" \") > -1 ? t.split(yi).forEach(function (t) {\n return e.classList.remove(t);\n }) : e.classList.remove(t), e.classList.length || e.removeAttribute(\"class\");else {\n for (var n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \", r = \" \" + t + \" \"; n.indexOf(r) >= 0;) {\n n = n.replace(r, \" \");\n }\n\n (n = n.trim()) ? e.setAttribute(\"class\", n) : e.removeAttribute(\"class\");\n }\n }\n\n function bi(e) {\n if (e) {\n if (\"object\" == _typeof(e)) {\n var t = {};\n return !1 !== e.css && T(t, wi(e.name || \"v\")), T(t, e), t;\n }\n\n return \"string\" == typeof e ? wi(e) : void 0;\n }\n }\n\n var wi = w(function (e) {\n return {\n enterClass: e + \"-enter\",\n enterToClass: e + \"-enter-to\",\n enterActiveClass: e + \"-enter-active\",\n leaveClass: e + \"-leave\",\n leaveToClass: e + \"-leave-to\",\n leaveActiveClass: e + \"-leave-active\"\n };\n }),\n $i = J && !X,\n xi = \"transition\",\n Ci = \"animation\",\n ki = \"transition\",\n Ai = \"transitionend\",\n Si = \"animation\",\n Oi = \"animationend\";\n $i && (void 0 === window.ontransitionend && void 0 !== window.onwebkittransitionend && (ki = \"WebkitTransition\", Ai = \"webkitTransitionEnd\"), void 0 === window.onanimationend && void 0 !== window.onwebkitanimationend && (Si = \"WebkitAnimation\", Oi = \"webkitAnimationEnd\"));\n var Ti = J ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : function (e) {\n return e();\n };\n\n function Ei(e) {\n Ti(function () {\n Ti(e);\n });\n }\n\n function Ii(e, t) {\n var n = e._transitionClasses || (e._transitionClasses = []);\n n.indexOf(t) < 0 && (n.push(t), gi(e, t));\n }\n\n function ji(e, t) {\n e._transitionClasses && g(e._transitionClasses, t), _i(e, t);\n }\n\n function Li(e, t, n) {\n var r = Mi(e, t),\n i = r.type,\n o = r.timeout,\n a = r.propCount;\n if (!i) return n();\n\n var s = i === xi ? Ai : Oi,\n c = 0,\n l = function l() {\n e.removeEventListener(s, u), n();\n },\n u = function u(t) {\n t.target === e && ++c >= a && l();\n };\n\n setTimeout(function () {\n c < a && l();\n }, o + 1), e.addEventListener(s, u);\n }\n\n var Ni = /\\b(transform|all)(,|$)/;\n\n function Mi(e, t) {\n var n,\n r = window.getComputedStyle(e),\n i = (r[ki + \"Delay\"] || \"\").split(\", \"),\n o = (r[ki + \"Duration\"] || \"\").split(\", \"),\n a = Di(i, o),\n s = (r[Si + \"Delay\"] || \"\").split(\", \"),\n c = (r[Si + \"Duration\"] || \"\").split(\", \"),\n l = Di(s, c),\n u = 0,\n f = 0;\n return t === xi ? a > 0 && (n = xi, u = a, f = o.length) : t === Ci ? l > 0 && (n = Ci, u = l, f = c.length) : f = (n = (u = Math.max(a, l)) > 0 ? a > l ? xi : Ci : null) ? n === xi ? o.length : c.length : 0, {\n type: n,\n timeout: u,\n propCount: f,\n hasTransform: n === xi && Ni.test(r[ki + \"Property\"])\n };\n }\n\n function Di(e, t) {\n for (; e.length < t.length;) {\n e = e.concat(e);\n }\n\n return Math.max.apply(null, t.map(function (t, n) {\n return Pi(t) + Pi(e[n]);\n }));\n }\n\n function Pi(e) {\n return 1e3 * Number(e.slice(0, -1).replace(\",\", \".\"));\n }\n\n function Fi(e, t) {\n var n = e.elm;\n o(n._leaveCb) && (n._leaveCb.cancelled = !0, n._leaveCb());\n var r = bi(e.data.transition);\n\n if (!i(r) && !o(n._enterCb) && 1 === n.nodeType) {\n for (var a = r.css, s = r.type, l = r.enterClass, u = r.enterToClass, f = r.enterActiveClass, d = r.appearClass, p = r.appearToClass, h = r.appearActiveClass, m = r.beforeEnter, y = r.enter, g = r.afterEnter, _ = r.enterCancelled, b = r.beforeAppear, w = r.appear, $ = r.afterAppear, x = r.appearCancelled, C = r.duration, k = Xt, A = Xt.$vnode; A && A.parent;) {\n k = A.context, A = A.parent;\n }\n\n var S = !k._isMounted || !e.isRootInsert;\n\n if (!S || w || \"\" === w) {\n var O = S && d ? d : l,\n T = S && h ? h : f,\n E = S && p ? p : u,\n I = S && b || m,\n j = S && \"function\" == typeof w ? w : y,\n L = S && $ || g,\n N = S && x || _,\n M = v(c(C) ? C.enter : C),\n P = !1 !== a && !X,\n F = Bi(j),\n R = n._enterCb = D(function () {\n P && (ji(n, E), ji(n, T)), R.cancelled ? (P && ji(n, O), N && N(n)) : L && L(n), n._enterCb = null;\n });\n e.data.show || st(e, \"insert\", function () {\n var t = n.parentNode,\n r = t && t._pending && t._pending[e.key];\n r && r.tag === e.tag && r.elm._leaveCb && r.elm._leaveCb(), j && j(n, R);\n }), I && I(n), P && (Ii(n, O), Ii(n, T), Ei(function () {\n ji(n, O), R.cancelled || (Ii(n, E), F || (Hi(M) ? setTimeout(R, M) : Li(n, s, R)));\n })), e.data.show && (t && t(), j && j(n, R)), P || F || R();\n }\n }\n }\n\n function Ri(e, t) {\n var n = e.elm;\n o(n._enterCb) && (n._enterCb.cancelled = !0, n._enterCb());\n var r = bi(e.data.transition);\n if (i(r) || 1 !== n.nodeType) return t();\n\n if (!o(n._leaveCb)) {\n var a = r.css,\n s = r.type,\n l = r.leaveClass,\n u = r.leaveToClass,\n f = r.leaveActiveClass,\n d = r.beforeLeave,\n p = r.leave,\n h = r.afterLeave,\n m = r.leaveCancelled,\n y = r.delayLeave,\n g = r.duration,\n _ = !1 !== a && !X,\n b = Bi(p),\n w = v(c(g) ? g.leave : g),\n $ = n._leaveCb = D(function () {\n n.parentNode && n.parentNode._pending && (n.parentNode._pending[e.key] = null), _ && (ji(n, u), ji(n, f)), $.cancelled ? (_ && ji(n, l), m && m(n)) : (t(), h && h(n)), n._leaveCb = null;\n });\n\n y ? y(x) : x();\n }\n\n function x() {\n $.cancelled || (!e.data.show && n.parentNode && ((n.parentNode._pending || (n.parentNode._pending = {}))[e.key] = e), d && d(n), _ && (Ii(n, l), Ii(n, f), Ei(function () {\n ji(n, l), $.cancelled || (Ii(n, u), b || (Hi(w) ? setTimeout($, w) : Li(n, s, $)));\n })), p && p(n, $), _ || b || $());\n }\n }\n\n function Hi(e) {\n return \"number\" == typeof e && !isNaN(e);\n }\n\n function Bi(e) {\n if (i(e)) return !1;\n var t = e.fns;\n return o(t) ? Bi(Array.isArray(t) ? t[0] : t) : (e._length || e.length) > 1;\n }\n\n function Ui(e, t) {\n !0 !== t.data.show && Fi(t);\n }\n\n var zi = function (e) {\n var t,\n n,\n r = {},\n c = e.modules,\n l = e.nodeOps;\n\n for (t = 0; t < rr.length; ++t) {\n for (r[rr[t]] = [], n = 0; n < c.length; ++n) {\n o(c[n][rr[t]]) && r[rr[t]].push(c[n][rr[t]]);\n }\n }\n\n function u(e) {\n var t = l.parentNode(e);\n o(t) && l.removeChild(t, e);\n }\n\n function f(e, t, n, i, s, c, u) {\n if (o(e.elm) && o(c) && (e = c[u] = _e(e)), e.isRootInsert = !s, !function (e, t, n, i) {\n var s = e.data;\n\n if (o(s)) {\n var c = o(e.componentInstance) && s.keepAlive;\n if (o(s = s.hook) && o(s = s.init) && s(e, !1), o(e.componentInstance)) return d(e, t), p(n, e.elm, i), a(c) && function (e, t, n, i) {\n for (var a, s = e; s.componentInstance;) {\n if (o(a = (s = s.componentInstance._vnode).data) && o(a = a.transition)) {\n for (a = 0; a < r.activate.length; ++a) {\n r.activate[a](nr, s);\n }\n\n t.push(s);\n break;\n }\n }\n\n p(n, e.elm, i);\n }(e, t, n, i), !0;\n }\n }(e, t, n, i)) {\n var f = e.data,\n h = e.children,\n m = e.tag;\n o(m) ? (e.elm = e.ns ? l.createElementNS(e.ns, m) : l.createElement(m, e), g(e), v(e, h, t), o(f) && y(e, t), p(n, e.elm, i)) : a(e.isComment) ? (e.elm = l.createComment(e.text), p(n, e.elm, i)) : (e.elm = l.createTextNode(e.text), p(n, e.elm, i));\n }\n }\n\n function d(e, t) {\n o(e.data.pendingInsert) && (t.push.apply(t, e.data.pendingInsert), e.data.pendingInsert = null), e.elm = e.componentInstance.$el, m(e) ? (y(e, t), g(e)) : (tr(e), t.push(e));\n }\n\n function p(e, t, n) {\n o(e) && (o(n) ? l.parentNode(n) === e && l.insertBefore(e, t, n) : l.appendChild(e, t));\n }\n\n function v(e, t, n) {\n if (Array.isArray(t)) for (var r = 0; r < t.length; ++r) {\n f(t[r], n, e.elm, null, !0, t, r);\n } else s(e.text) && l.appendChild(e.elm, l.createTextNode(String(e.text)));\n }\n\n function m(e) {\n for (; e.componentInstance;) {\n e = e.componentInstance._vnode;\n }\n\n return o(e.tag);\n }\n\n function y(e, n) {\n for (var i = 0; i < r.create.length; ++i) {\n r.create[i](nr, e);\n }\n\n o(t = e.data.hook) && (o(t.create) && t.create(nr, e), o(t.insert) && n.push(e));\n }\n\n function g(e) {\n var t;\n if (o(t = e.fnScopeId)) l.setStyleScope(e.elm, t);else for (var n = e; n;) {\n o(t = n.context) && o(t = t.$options._scopeId) && l.setStyleScope(e.elm, t), n = n.parent;\n }\n o(t = Xt) && t !== e.context && t !== e.fnContext && o(t = t.$options._scopeId) && l.setStyleScope(e.elm, t);\n }\n\n function _(e, t, n, r, i, o) {\n for (; r <= i; ++r) {\n f(n[r], o, e, t, !1, n, r);\n }\n }\n\n function b(e) {\n var t,\n n,\n i = e.data;\n if (o(i)) for (o(t = i.hook) && o(t = t.destroy) && t(e), t = 0; t < r.destroy.length; ++t) {\n r.destroy[t](e);\n }\n if (o(t = e.children)) for (n = 0; n < e.children.length; ++n) {\n b(e.children[n]);\n }\n }\n\n function w(e, t, n, r) {\n for (; n <= r; ++n) {\n var i = t[n];\n o(i) && (o(i.tag) ? ($(i), b(i)) : u(i.elm));\n }\n }\n\n function $(e, t) {\n if (o(t) || o(e.data)) {\n var n,\n i = r.remove.length + 1;\n\n for (o(t) ? t.listeners += i : t = function (e, t) {\n function n() {\n 0 == --n.listeners && u(e);\n }\n\n return n.listeners = t, n;\n }(e.elm, i), o(n = e.componentInstance) && o(n = n._vnode) && o(n.data) && $(n, t), n = 0; n < r.remove.length; ++n) {\n r.remove[n](e, t);\n }\n\n o(n = e.data.hook) && o(n = n.remove) ? n(e, t) : t();\n } else u(e.elm);\n }\n\n function x(e, t, n, r) {\n for (var i = n; i < r; i++) {\n var a = t[i];\n if (o(a) && ir(e, a)) return i;\n }\n }\n\n function C(e, t, n, s, c, u) {\n if (e !== t) {\n o(t.elm) && o(s) && (t = s[c] = _e(t));\n var d = t.elm = e.elm;\n if (a(e.isAsyncPlaceholder)) o(t.asyncFactory.resolved) ? S(e.elm, t, n) : t.isAsyncPlaceholder = !0;else if (a(t.isStatic) && a(e.isStatic) && t.key === e.key && (a(t.isCloned) || a(t.isOnce))) t.componentInstance = e.componentInstance;else {\n var p,\n v = t.data;\n o(v) && o(p = v.hook) && o(p = p.prepatch) && p(e, t);\n var h = e.children,\n y = t.children;\n\n if (o(v) && m(t)) {\n for (p = 0; p < r.update.length; ++p) {\n r.update[p](e, t);\n }\n\n o(p = v.hook) && o(p = p.update) && p(e, t);\n }\n\n i(t.text) ? o(h) && o(y) ? h !== y && function (e, t, n, r, a) {\n for (var s, c, u, d = 0, p = 0, v = t.length - 1, h = t[0], m = t[v], y = n.length - 1, g = n[0], b = n[y], $ = !a; d <= v && p <= y;) {\n i(h) ? h = t[++d] : i(m) ? m = t[--v] : ir(h, g) ? (C(h, g, r, n, p), h = t[++d], g = n[++p]) : ir(m, b) ? (C(m, b, r, n, y), m = t[--v], b = n[--y]) : ir(h, b) ? (C(h, b, r, n, y), $ && l.insertBefore(e, h.elm, l.nextSibling(m.elm)), h = t[++d], b = n[--y]) : ir(m, g) ? (C(m, g, r, n, p), $ && l.insertBefore(e, m.elm, h.elm), m = t[--v], g = n[++p]) : (i(s) && (s = or(t, d, v)), i(c = o(g.key) ? s[g.key] : x(g, t, d, v)) ? f(g, r, e, h.elm, !1, n, p) : ir(u = t[c], g) ? (C(u, g, r, n, p), t[c] = void 0, $ && l.insertBefore(e, u.elm, h.elm)) : f(g, r, e, h.elm, !1, n, p), g = n[++p]);\n }\n\n d > v ? _(e, i(n[y + 1]) ? null : n[y + 1].elm, n, p, y, r) : p > y && w(0, t, d, v);\n }(d, h, y, n, u) : o(y) ? (o(e.text) && l.setTextContent(d, \"\"), _(d, null, y, 0, y.length - 1, n)) : o(h) ? w(0, h, 0, h.length - 1) : o(e.text) && l.setTextContent(d, \"\") : e.text !== t.text && l.setTextContent(d, t.text), o(v) && o(p = v.hook) && o(p = p.postpatch) && p(e, t);\n }\n }\n }\n\n function k(e, t, n) {\n if (a(n) && o(e.parent)) e.parent.data.pendingInsert = t;else for (var r = 0; r < t.length; ++r) {\n t[r].data.hook.insert(t[r]);\n }\n }\n\n var A = h(\"attrs,class,staticClass,staticStyle,key\");\n\n function S(e, t, n, r) {\n var i,\n s = t.tag,\n c = t.data,\n l = t.children;\n if (r = r || c && c.pre, t.elm = e, a(t.isComment) && o(t.asyncFactory)) return t.isAsyncPlaceholder = !0, !0;\n if (o(c) && (o(i = c.hook) && o(i = i.init) && i(t, !0), o(i = t.componentInstance))) return d(t, n), !0;\n\n if (o(s)) {\n if (o(l)) if (e.hasChildNodes()) {\n if (o(i = c) && o(i = i.domProps) && o(i = i.innerHTML)) {\n if (i !== e.innerHTML) return !1;\n } else {\n for (var u = !0, f = e.firstChild, p = 0; p < l.length; p++) {\n if (!f || !S(f, l[p], n, r)) {\n u = !1;\n break;\n }\n\n f = f.nextSibling;\n }\n\n if (!u || f) return !1;\n }\n } else v(t, l, n);\n\n if (o(c)) {\n var h = !1;\n\n for (var m in c) {\n if (!A(m)) {\n h = !0, y(t, n);\n break;\n }\n }\n\n !h && c[\"class\"] && rt(c[\"class\"]);\n }\n } else e.data !== t.text && (e.data = t.text);\n\n return !0;\n }\n\n return function (e, t, n, s) {\n if (!i(t)) {\n var c,\n u = !1,\n d = [];\n if (i(e)) u = !0, f(t, d);else {\n var p = o(e.nodeType);\n if (!p && ir(e, t)) C(e, t, d, null, null, s);else {\n if (p) {\n if (1 === e.nodeType && e.hasAttribute(P) && (e.removeAttribute(P), n = !0), a(n) && S(e, t, d)) return k(t, d, !0), e;\n c = e, e = new he(l.tagName(c).toLowerCase(), {}, [], void 0, c);\n }\n\n var v = e.elm,\n h = l.parentNode(v);\n if (f(t, d, v._leaveCb ? null : h, l.nextSibling(v)), o(t.parent)) for (var y = t.parent, g = m(t); y;) {\n for (var _ = 0; _ < r.destroy.length; ++_) {\n r.destroy[_](y);\n }\n\n if (y.elm = t.elm, g) {\n for (var $ = 0; $ < r.create.length; ++$) {\n r.create[$](nr, y);\n }\n\n var x = y.data.hook.insert;\n if (x.merged) for (var A = 1; A < x.fns.length; A++) {\n x.fns[A]();\n }\n } else tr(y);\n\n y = y.parent;\n }\n o(h) ? w(0, [e], 0, 0) : o(e.tag) && b(e);\n }\n }\n return k(t, d, u), t.elm;\n }\n\n o(e) && b(e);\n };\n }({\n nodeOps: Qn,\n modules: [mr, Cr, ni, oi, mi, J ? {\n create: Ui,\n activate: Ui,\n remove: function remove(e, t) {\n !0 !== e.data.show ? Ri(e, t) : t();\n }\n } : {}].concat(dr)\n });\n\n X && document.addEventListener(\"selectionchange\", function () {\n var e = document.activeElement;\n e && e.vmodel && Xi(e, \"input\");\n });\n var Vi = {\n inserted: function inserted(e, t, n, r) {\n \"select\" === n.tag ? (r.elm && !r.elm._vOptions ? st(n, \"postpatch\", function () {\n Vi.componentUpdated(e, t, n);\n }) : Ki(e, t, n.context), e._vOptions = [].map.call(e.options, Wi)) : (\"textarea\" === n.tag || Xn(e.type)) && (e._vModifiers = t.modifiers, t.modifiers.lazy || (e.addEventListener(\"compositionstart\", Zi), e.addEventListener(\"compositionend\", Gi), e.addEventListener(\"change\", Gi), X && (e.vmodel = !0)));\n },\n componentUpdated: function componentUpdated(e, t, n) {\n if (\"select\" === n.tag) {\n Ki(e, t, n.context);\n var r = e._vOptions,\n i = e._vOptions = [].map.call(e.options, Wi);\n i.some(function (e, t) {\n return !N(e, r[t]);\n }) && (e.multiple ? t.value.some(function (e) {\n return qi(e, i);\n }) : t.value !== t.oldValue && qi(t.value, i)) && Xi(e, \"change\");\n }\n }\n };\n\n function Ki(e, t, n) {\n Ji(e, t, n), (G || Y) && setTimeout(function () {\n Ji(e, t, n);\n }, 0);\n }\n\n function Ji(e, t, n) {\n var r = t.value,\n i = e.multiple;\n\n if (!i || Array.isArray(r)) {\n for (var o, a, s = 0, c = e.options.length; s < c; s++) {\n if (a = e.options[s], i) o = M(r, Wi(a)) > -1, a.selected !== o && (a.selected = o);else if (N(Wi(a), r)) return void (e.selectedIndex !== s && (e.selectedIndex = s));\n }\n\n i || (e.selectedIndex = -1);\n }\n }\n\n function qi(e, t) {\n return t.every(function (t) {\n return !N(t, e);\n });\n }\n\n function Wi(e) {\n return \"_value\" in e ? e._value : e.value;\n }\n\n function Zi(e) {\n e.target.composing = !0;\n }\n\n function Gi(e) {\n e.target.composing && (e.target.composing = !1, Xi(e.target, \"input\"));\n }\n\n function Xi(e, t) {\n var n = document.createEvent(\"HTMLEvents\");\n n.initEvent(t, !0, !0), e.dispatchEvent(n);\n }\n\n function Yi(e) {\n return !e.componentInstance || e.data && e.data.transition ? e : Yi(e.componentInstance._vnode);\n }\n\n var Qi = {\n model: Vi,\n show: {\n bind: function bind(e, t, n) {\n var r = t.value,\n i = (n = Yi(n)).data && n.data.transition,\n o = e.__vOriginalDisplay = \"none\" === e.style.display ? \"\" : e.style.display;\n r && i ? (n.data.show = !0, Fi(n, function () {\n e.style.display = o;\n })) : e.style.display = r ? o : \"none\";\n },\n update: function update(e, t, n) {\n var r = t.value;\n !r != !t.oldValue && ((n = Yi(n)).data && n.data.transition ? (n.data.show = !0, r ? Fi(n, function () {\n e.style.display = e.__vOriginalDisplay;\n }) : Ri(n, function () {\n e.style.display = \"none\";\n })) : e.style.display = r ? e.__vOriginalDisplay : \"none\");\n },\n unbind: function unbind(e, t, n, r, i) {\n i || (e.style.display = e.__vOriginalDisplay);\n }\n }\n },\n eo = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n };\n\n function to(e) {\n var t = e && e.componentOptions;\n return t && t.Ctor.options[\"abstract\"] ? to(Jt(t.children)) : e;\n }\n\n function no(e) {\n var t = {},\n n = e.$options;\n\n for (var r in n.propsData) {\n t[r] = e[r];\n }\n\n var i = n._parentListeners;\n\n for (var o in i) {\n t[x(o)] = i[o];\n }\n\n return t;\n }\n\n function ro(e, t) {\n if (/\\d-keep-alive$/.test(t.tag)) return e(\"keep-alive\", {\n props: t.componentOptions.propsData\n });\n }\n\n var io = function io(e) {\n return e.tag || Kt(e);\n },\n oo = function oo(e) {\n return \"show\" === e.name;\n },\n ao = {\n name: \"transition\",\n props: eo,\n \"abstract\": !0,\n render: function render(e) {\n var t = this,\n n = this.$slots[\"default\"];\n\n if (n && (n = n.filter(io)).length) {\n var r = this.mode,\n i = n[0];\n if (function (e) {\n for (; e = e.parent;) {\n if (e.data.transition) return !0;\n }\n }(this.$vnode)) return i;\n var o = to(i);\n if (!o) return i;\n if (this._leaving) return ro(e, i);\n var a = \"__transition-\" + this._uid + \"-\";\n o.key = null == o.key ? o.isComment ? a + \"comment\" : a + o.tag : s(o.key) ? 0 === String(o.key).indexOf(a) ? o.key : a + o.key : o.key;\n var c = (o.data || (o.data = {})).transition = no(this),\n l = this._vnode,\n u = to(l);\n\n if (o.data.directives && o.data.directives.some(oo) && (o.data.show = !0), u && u.data && !function (e, t) {\n return t.key === e.key && t.tag === e.tag;\n }(o, u) && !Kt(u) && (!u.componentInstance || !u.componentInstance._vnode.isComment)) {\n var f = u.data.transition = T({}, c);\n if (\"out-in\" === r) return this._leaving = !0, st(f, \"afterLeave\", function () {\n t._leaving = !1, t.$forceUpdate();\n }), ro(e, i);\n\n if (\"in-out\" === r) {\n if (Kt(o)) return l;\n\n var d,\n p = function p() {\n d();\n };\n\n st(c, \"afterEnter\", p), st(c, \"enterCancelled\", p), st(f, \"delayLeave\", function (e) {\n d = e;\n });\n }\n }\n\n return i;\n }\n }\n },\n so = T({\n tag: String,\n moveClass: String\n }, eo);\n\n function co(e) {\n e.elm._moveCb && e.elm._moveCb(), e.elm._enterCb && e.elm._enterCb();\n }\n\n function lo(e) {\n e.data.newPos = e.elm.getBoundingClientRect();\n }\n\n function uo(e) {\n var t = e.data.pos,\n n = e.data.newPos,\n r = t.left - n.left,\n i = t.top - n.top;\n\n if (r || i) {\n e.data.moved = !0;\n var o = e.elm.style;\n o.transform = o.WebkitTransform = \"translate(\" + r + \"px,\" + i + \"px)\", o.transitionDuration = \"0s\";\n }\n }\n\n delete so.mode;\n var fo = {\n Transition: ao,\n TransitionGroup: {\n props: so,\n beforeMount: function beforeMount() {\n var e = this,\n t = this._update;\n\n this._update = function (n, r) {\n var i = Yt(e);\n e.__patch__(e._vnode, e.kept, !1, !0), e._vnode = e.kept, i(), t.call(e, n, r);\n };\n },\n render: function render(e) {\n for (var t = this.tag || this.$vnode.data.tag || \"span\", n = Object.create(null), r = this.prevChildren = this.children, i = this.$slots[\"default\"] || [], o = this.children = [], a = no(this), s = 0; s < i.length; s++) {\n var c = i[s];\n c.tag && null != c.key && 0 !== String(c.key).indexOf(\"__vlist\") && (o.push(c), n[c.key] = c, (c.data || (c.data = {})).transition = a);\n }\n\n if (r) {\n for (var l = [], u = [], f = 0; f < r.length; f++) {\n var d = r[f];\n d.data.transition = a, d.data.pos = d.elm.getBoundingClientRect(), n[d.key] ? l.push(d) : u.push(d);\n }\n\n this.kept = e(t, null, l), this.removed = u;\n }\n\n return e(t, null, o);\n },\n updated: function updated() {\n var e = this.prevChildren,\n t = this.moveClass || (this.name || \"v\") + \"-move\";\n e.length && this.hasMove(e[0].elm, t) && (e.forEach(co), e.forEach(lo), e.forEach(uo), this._reflow = document.body.offsetHeight, e.forEach(function (e) {\n if (e.data.moved) {\n var n = e.elm,\n r = n.style;\n Ii(n, t), r.transform = r.WebkitTransform = r.transitionDuration = \"\", n.addEventListener(Ai, n._moveCb = function e(r) {\n r && r.target !== n || r && !/transform$/.test(r.propertyName) || (n.removeEventListener(Ai, e), n._moveCb = null, ji(n, t));\n });\n }\n }));\n },\n methods: {\n hasMove: function hasMove(e, t) {\n if (!$i) return !1;\n if (this._hasMove) return this._hasMove;\n var n = e.cloneNode();\n e._transitionClasses && e._transitionClasses.forEach(function (e) {\n _i(n, e);\n }), gi(n, t), n.style.display = \"none\", this.$el.appendChild(n);\n var r = Mi(n);\n return this.$el.removeChild(n), this._hasMove = r.hasTransform;\n }\n }\n }\n };\n Cn.config.mustUseProp = Ln, Cn.config.isReservedTag = Wn, Cn.config.isReservedAttr = In, Cn.config.getTagNamespace = Zn, Cn.config.isUnknownElement = function (e) {\n if (!J) return !0;\n if (Wn(e)) return !1;\n if (e = e.toLowerCase(), null != Gn[e]) return Gn[e];\n var t = document.createElement(e);\n return e.indexOf(\"-\") > -1 ? Gn[e] = t.constructor === window.HTMLUnknownElement || t.constructor === window.HTMLElement : Gn[e] = /HTMLUnknownElement/.test(t.toString());\n }, T(Cn.options.directives, Qi), T(Cn.options.components, fo), Cn.prototype.__patch__ = J ? zi : I, Cn.prototype.$mount = function (e, t) {\n return function (e, t, n) {\n var r;\n return e.$el = t, e.$options.render || (e.$options.render = ye), tn(e, \"beforeMount\"), r = function r() {\n e._update(e._render(), n);\n }, new vn(e, r, I, {\n before: function before() {\n e._isMounted && !e._isDestroyed && tn(e, \"beforeUpdate\");\n }\n }, !0), n = !1, null == e.$vnode && (e._isMounted = !0, tn(e, \"mounted\")), e;\n }(this, e = e && J ? Yn(e) : void 0, t);\n }, J && setTimeout(function () {\n H.devtools && oe && oe.emit(\"init\", Cn);\n }, 0);\n\n var po,\n vo = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,\n ho = /[-.*+?^${}()|[\\]\\/\\\\]/g,\n mo = w(function (e) {\n var t = e[0].replace(ho, \"\\\\$&\"),\n n = e[1].replace(ho, \"\\\\$&\");\n return new RegExp(t + \"((?:.|\\\\n)+?)\" + n, \"g\");\n }),\n yo = {\n staticKeys: [\"staticClass\"],\n transformNode: function transformNode(e, t) {\n t.warn;\n var n = Pr(e, \"class\");\n n && (e.staticClass = JSON.stringify(n));\n var r = Dr(e, \"class\", !1);\n r && (e.classBinding = r);\n },\n genData: function genData(e) {\n var t = \"\";\n return e.staticClass && (t += \"staticClass:\" + e.staticClass + \",\"), e.classBinding && (t += \"class:\" + e.classBinding + \",\"), t;\n }\n },\n go = {\n staticKeys: [\"staticStyle\"],\n transformNode: function transformNode(e, t) {\n t.warn;\n var n = Pr(e, \"style\");\n n && (e.staticStyle = JSON.stringify(ai(n)));\n var r = Dr(e, \"style\", !1);\n r && (e.styleBinding = r);\n },\n genData: function genData(e) {\n var t = \"\";\n return e.staticStyle && (t += \"staticStyle:\" + e.staticStyle + \",\"), e.styleBinding && (t += \"style:(\" + e.styleBinding + \"),\"), t;\n }\n },\n _o = h(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),\n bo = h(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),\n wo = h(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),\n $o = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,\n xo = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,\n Co = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + B.source + \"]*\",\n ko = \"((?:\" + Co + \"\\\\:)?\" + Co + \")\",\n Ao = new RegExp(\"^<\" + ko),\n So = /^\\s*(\\/?)>/,\n Oo = new RegExp(\"^<\\\\/\" + ko + \"[^>]*>\"),\n To = /^<!DOCTYPE [^>]+>/i,\n Eo = /^<!\\--/,\n Io = /^<!\\[/,\n jo = h(\"script,style,textarea\", !0),\n Lo = {},\n No = {\n \"&lt;\": \"<\",\n \"&gt;\": \">\",\n \"&quot;\": '\"',\n \"&amp;\": \"&\",\n \"&#10;\": \"\\n\",\n \"&#9;\": \"\\t\",\n \"&#39;\": \"'\"\n },\n Mo = /&(?:lt|gt|quot|amp|#39);/g,\n Do = /&(?:lt|gt|quot|amp|#39|#10|#9);/g,\n Po = h(\"pre,textarea\", !0),\n Fo = function Fo(e, t) {\n return e && Po(e) && \"\\n\" === t[0];\n };\n\n function Ro(e, t) {\n var n = t ? Do : Mo;\n return e.replace(n, function (e) {\n return No[e];\n });\n }\n\n var Ho,\n Bo,\n Uo,\n zo,\n Vo,\n Ko,\n Jo,\n qo,\n Wo = /^@|^v-on:/,\n Zo = /^v-|^@|^:/,\n Go = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,\n Xo = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,\n Yo = /^\\(|\\)$/g,\n Qo = /^\\[.*\\]$/,\n ea = /:(.*)$/,\n ta = /^:|^\\.|^v-bind:/,\n na = /\\.[^.\\]]+(?=[^\\]]*$)/g,\n ra = /^v-slot(:|$)|^#/,\n ia = /[\\r\\n]/,\n oa = /\\s+/g,\n aa = w(function (e) {\n return (po = po || document.createElement(\"div\")).innerHTML = e, po.textContent;\n }),\n sa = \"_empty_\";\n\n function ca(e, t, n) {\n return {\n type: 1,\n tag: e,\n attrsList: t,\n attrsMap: va(t),\n rawAttrsMap: {},\n parent: n,\n children: []\n };\n }\n\n function la(e, t) {\n var n, r;\n (r = Dr(n = e, \"key\")) && (n.key = r), e.plain = !e.key && !e.scopedSlots && !e.attrsList.length, function (e) {\n var t = Dr(e, \"ref\");\n t && (e.ref = t, e.refInFor = function (e) {\n for (var t = e; t;) {\n if (void 0 !== t[\"for\"]) return !0;\n t = t.parent;\n }\n\n return !1;\n }(e));\n }(e), function (e) {\n var t;\n \"template\" === e.tag ? (t = Pr(e, \"scope\"), e.slotScope = t || Pr(e, \"slot-scope\")) : (t = Pr(e, \"slot-scope\")) && (e.slotScope = t);\n var n = Dr(e, \"slot\");\n\n if (n && (e.slotTarget = '\"\"' === n ? '\"default\"' : n, e.slotTargetDynamic = !(!e.attrsMap[\":slot\"] && !e.attrsMap[\"v-bind:slot\"]), \"template\" === e.tag || e.slotScope || Ir(e, \"slot\", n, function (e, t) {\n return e.rawAttrsMap[\":\" + t] || e.rawAttrsMap[\"v-bind:\" + t] || e.rawAttrsMap[t];\n }(e, \"slot\"))), \"template\" === e.tag) {\n var r = Fr(e, ra);\n\n if (r) {\n var i = da(r),\n o = i.name,\n a = i.dynamic;\n e.slotTarget = o, e.slotTargetDynamic = a, e.slotScope = r.value || sa;\n }\n } else {\n var s = Fr(e, ra);\n\n if (s) {\n var c = e.scopedSlots || (e.scopedSlots = {}),\n l = da(s),\n u = l.name,\n f = l.dynamic,\n d = c[u] = ca(\"template\", [], e);\n d.slotTarget = u, d.slotTargetDynamic = f, d.children = e.children.filter(function (e) {\n if (!e.slotScope) return e.parent = d, !0;\n }), d.slotScope = s.value || sa, e.children = [], e.plain = !1;\n }\n }\n }(e), function (e) {\n \"slot\" === e.tag && (e.slotName = Dr(e, \"name\"));\n }(e), function (e) {\n var t;\n (t = Dr(e, \"is\")) && (e.component = t), null != Pr(e, \"inline-template\") && (e.inlineTemplate = !0);\n }(e);\n\n for (var i = 0; i < Uo.length; i++) {\n e = Uo[i](e, t) || e;\n }\n\n return function (e) {\n var t,\n n,\n r,\n i,\n o,\n a,\n s,\n c,\n l = e.attrsList;\n\n for (t = 0, n = l.length; t < n; t++) {\n if (r = i = l[t].name, o = l[t].value, Zo.test(r)) {\n if (e.hasBindings = !0, (a = pa(r.replace(Zo, \"\"))) && (r = r.replace(na, \"\")), ta.test(r)) r = r.replace(ta, \"\"), o = Ar(o), (c = Qo.test(r)) && (r = r.slice(1, -1)), a && (a.prop && !c && \"innerHtml\" === (r = x(r)) && (r = \"innerHTML\"), a.camel && !c && (r = x(r)), a.sync && (s = Br(o, \"$event\"), c ? Mr(e, '\"update:\"+(' + r + \")\", s, null, !1, 0, l[t], !0) : (Mr(e, \"update:\" + x(r), s, null, !1, 0, l[t]), A(r) !== x(r) && Mr(e, \"update:\" + A(r), s, null, !1, 0, l[t])))), a && a.prop || !e.component && Jo(e.tag, e.attrsMap.type, r) ? Er(e, r, o, l[t], c) : Ir(e, r, o, l[t], c);else if (Wo.test(r)) r = r.replace(Wo, \"\"), (c = Qo.test(r)) && (r = r.slice(1, -1)), Mr(e, r, o, a, !1, 0, l[t], c);else {\n var u = (r = r.replace(Zo, \"\")).match(ea),\n f = u && u[1];\n c = !1, f && (r = r.slice(0, -(f.length + 1)), Qo.test(f) && (f = f.slice(1, -1), c = !0)), Lr(e, r, i, o, f, c, a, l[t]);\n }\n } else Ir(e, r, JSON.stringify(o), l[t]), !e.component && \"muted\" === r && Jo(e.tag, e.attrsMap.type, r) && Er(e, r, \"true\", l[t]);\n }\n }(e), e;\n }\n\n function ua(e) {\n var t;\n\n if (t = Pr(e, \"v-for\")) {\n var n = function (e) {\n var t = e.match(Go);\n\n if (t) {\n var n = {};\n n[\"for\"] = t[2].trim();\n var r = t[1].trim().replace(Yo, \"\"),\n i = r.match(Xo);\n return i ? (n.alias = r.replace(Xo, \"\").trim(), n.iterator1 = i[1].trim(), i[2] && (n.iterator2 = i[2].trim())) : n.alias = r, n;\n }\n }(t);\n\n n && T(e, n);\n }\n }\n\n function fa(e, t) {\n e.ifConditions || (e.ifConditions = []), e.ifConditions.push(t);\n }\n\n function da(e) {\n var t = e.name.replace(ra, \"\");\n return t || \"#\" !== e.name[0] && (t = \"default\"), Qo.test(t) ? {\n name: t.slice(1, -1),\n dynamic: !0\n } : {\n name: '\"' + t + '\"',\n dynamic: !1\n };\n }\n\n function pa(e) {\n var t = e.match(na);\n\n if (t) {\n var n = {};\n return t.forEach(function (e) {\n n[e.slice(1)] = !0;\n }), n;\n }\n }\n\n function va(e) {\n for (var t = {}, n = 0, r = e.length; n < r; n++) {\n t[e[n].name] = e[n].value;\n }\n\n return t;\n }\n\n var ha = /^xmlns:NS\\d+/,\n ma = /^NS\\d+:/;\n\n function ya(e) {\n return ca(e.tag, e.attrsList.slice(), e.parent);\n }\n\n var ga,\n _a,\n ba = [yo, go, {\n preTransformNode: function preTransformNode(e, t) {\n if (\"input\" === e.tag) {\n var n,\n r = e.attrsMap;\n if (!r[\"v-model\"]) return;\n\n if ((r[\":type\"] || r[\"v-bind:type\"]) && (n = Dr(e, \"type\")), r.type || n || !r[\"v-bind\"] || (n = \"(\" + r[\"v-bind\"] + \").type\"), n) {\n var i = Pr(e, \"v-if\", !0),\n o = i ? \"&&(\" + i + \")\" : \"\",\n a = null != Pr(e, \"v-else\", !0),\n s = Pr(e, \"v-else-if\", !0),\n c = ya(e);\n ua(c), jr(c, \"type\", \"checkbox\"), la(c, t), c.processed = !0, c[\"if\"] = \"(\" + n + \")==='checkbox'\" + o, fa(c, {\n exp: c[\"if\"],\n block: c\n });\n var l = ya(e);\n Pr(l, \"v-for\", !0), jr(l, \"type\", \"radio\"), la(l, t), fa(c, {\n exp: \"(\" + n + \")==='radio'\" + o,\n block: l\n });\n var u = ya(e);\n return Pr(u, \"v-for\", !0), jr(u, \":type\", n), la(u, t), fa(c, {\n exp: i,\n block: u\n }), a ? c[\"else\"] = !0 : s && (c.elseif = s), c;\n }\n }\n }\n }],\n wa = {\n expectHTML: !0,\n modules: ba,\n directives: {\n model: function model(e, t, n) {\n var r = t.value,\n i = t.modifiers,\n o = e.tag,\n a = e.attrsMap.type;\n if (e.component) return Hr(e, r, i), !1;\n if (\"select\" === o) !function (e, t, n) {\n var r = 'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return ' + (i && i.number ? \"_n(val)\" : \"val\") + \"});\";\n Mr(e, \"change\", r = r + \" \" + Br(t, \"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"), null, !0);\n }(e, r);else if (\"input\" === o && \"checkbox\" === a) !function (e, t, n) {\n var r = n && n.number,\n i = Dr(e, \"value\") || \"null\",\n o = Dr(e, \"true-value\") || \"true\",\n a = Dr(e, \"false-value\") || \"false\";\n Er(e, \"checked\", \"Array.isArray(\" + t + \")?_i(\" + t + \",\" + i + \")>-1\" + (\"true\" === o ? \":(\" + t + \")\" : \":_q(\" + t + \",\" + o + \")\")), Mr(e, \"change\", \"var $$a=\" + t + \",$$el=$event.target,$$c=$$el.checked?(\" + o + \"):(\" + a + \");if(Array.isArray($$a)){var $$v=\" + (r ? \"_n(\" + i + \")\" : i) + \",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(\" + Br(t, \"$$a.concat([$$v])\") + \")}else{$$i>-1&&(\" + Br(t, \"$$a.slice(0,$$i).concat($$a.slice($$i+1))\") + \")}}else{\" + Br(t, \"$$c\") + \"}\", null, !0);\n }(e, r, i);else if (\"input\" === o && \"radio\" === a) !function (e, t, n) {\n var r = n && n.number,\n i = Dr(e, \"value\") || \"null\";\n Er(e, \"checked\", \"_q(\" + t + \",\" + (i = r ? \"_n(\" + i + \")\" : i) + \")\"), Mr(e, \"change\", Br(t, i), null, !0);\n }(e, r, i);else if (\"input\" === o || \"textarea\" === o) !function (e, t, n) {\n var r = e.attrsMap.type,\n i = n || {},\n o = i.lazy,\n a = i.number,\n s = i.trim,\n c = !o && \"range\" !== r,\n l = o ? \"change\" : \"range\" === r ? Wr : \"input\",\n u = \"$event.target.value\";\n s && (u = \"$event.target.value.trim()\"), a && (u = \"_n(\" + u + \")\");\n var f = Br(t, u);\n c && (f = \"if($event.target.composing)return;\" + f), Er(e, \"value\", \"(\" + t + \")\"), Mr(e, l, f, null, !0), (s || a) && Mr(e, \"blur\", \"$forceUpdate()\");\n }(e, r, i);else if (!H.isReservedTag(o)) return Hr(e, r, i), !1;\n return !0;\n },\n text: function text(e, t) {\n t.value && Er(e, \"textContent\", \"_s(\" + t.value + \")\", t);\n },\n html: function html(e, t) {\n t.value && Er(e, \"innerHTML\", \"_s(\" + t.value + \")\", t);\n }\n },\n isPreTag: function isPreTag(e) {\n return \"pre\" === e;\n },\n isUnaryTag: _o,\n mustUseProp: Ln,\n canBeLeftOpenTag: bo,\n isReservedTag: Wn,\n getTagNamespace: Zn,\n staticKeys: ba.reduce(function (e, t) {\n return e.concat(t.staticKeys || []);\n }, []).join(\",\")\n },\n $a = w(function (e) {\n return h(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\" + (e ? \",\" + e : \"\"));\n });\n\n var xa = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/,\n Ca = /\\([^)]*?\\);*$/,\n ka = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,\n Aa = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n \"delete\": [8, 46]\n },\n Sa = {\n esc: [\"Esc\", \"Escape\"],\n tab: \"Tab\",\n enter: \"Enter\",\n space: [\" \", \"Spacebar\"],\n up: [\"Up\", \"ArrowUp\"],\n left: [\"Left\", \"ArrowLeft\"],\n right: [\"Right\", \"ArrowRight\"],\n down: [\"Down\", \"ArrowDown\"],\n \"delete\": [\"Backspace\", \"Delete\", \"Del\"]\n },\n Oa = function Oa(e) {\n return \"if(\" + e + \")return null;\";\n },\n Ta = {\n stop: \"$event.stopPropagation();\",\n prevent: \"$event.preventDefault();\",\n self: Oa(\"$event.target !== $event.currentTarget\"),\n ctrl: Oa(\"!$event.ctrlKey\"),\n shift: Oa(\"!$event.shiftKey\"),\n alt: Oa(\"!$event.altKey\"),\n meta: Oa(\"!$event.metaKey\"),\n left: Oa(\"'button' in $event && $event.button !== 0\"),\n middle: Oa(\"'button' in $event && $event.button !== 1\"),\n right: Oa(\"'button' in $event && $event.button !== 2\")\n };\n\n function Ea(e, t) {\n var n = t ? \"nativeOn:\" : \"on:\",\n r = \"\",\n i = \"\";\n\n for (var o in e) {\n var a = Ia(e[o]);\n e[o] && e[o].dynamic ? i += o + \",\" + a + \",\" : r += '\"' + o + '\":' + a + \",\";\n }\n\n return r = \"{\" + r.slice(0, -1) + \"}\", i ? n + \"_d(\" + r + \",[\" + i.slice(0, -1) + \"])\" : n + r;\n }\n\n function Ia(e) {\n if (!e) return \"function(){}\";\n if (Array.isArray(e)) return \"[\" + e.map(function (e) {\n return Ia(e);\n }).join(\",\") + \"]\";\n var t = ka.test(e.value),\n n = xa.test(e.value),\n r = ka.test(e.value.replace(Ca, \"\"));\n\n if (e.modifiers) {\n var i = \"\",\n o = \"\",\n a = [];\n\n for (var s in e.modifiers) {\n if (Ta[s]) o += Ta[s], Aa[s] && a.push(s);else if (\"exact\" === s) {\n var c = e.modifiers;\n o += Oa([\"ctrl\", \"shift\", \"alt\", \"meta\"].filter(function (e) {\n return !c[e];\n }).map(function (e) {\n return \"$event.\" + e + \"Key\";\n }).join(\"||\"));\n } else a.push(s);\n }\n\n return a.length && (i += \"if(!$event.type.indexOf('key')&&\" + a.map(ja).join(\"&&\") + \")return null;\"), o && (i += o), \"function($event){\" + i + (t ? \"return \" + e.value + \"($event)\" : n ? \"return (\" + e.value + \")($event)\" : r ? \"return \" + e.value : e.value) + \"}\";\n }\n\n return t || n ? e.value : \"function($event){\" + (r ? \"return \" + e.value : e.value) + \"}\";\n }\n\n function ja(e) {\n var t = parseInt(e, 10);\n if (t) return \"$event.keyCode!==\" + t;\n var n = Aa[e],\n r = Sa[e];\n return \"_k($event.keyCode,\" + JSON.stringify(e) + \",\" + JSON.stringify(n) + \",$event.key,\" + JSON.stringify(r) + \")\";\n }\n\n var La = {\n on: function on(e, t) {\n e.wrapListeners = function (e) {\n return \"_g(\" + e + \",\" + t.value + \")\";\n };\n },\n bind: function bind(e, t) {\n e.wrapData = function (n) {\n return \"_b(\" + n + \",'\" + e.tag + \"',\" + t.value + \",\" + (t.modifiers && t.modifiers.prop ? \"true\" : \"false\") + (t.modifiers && t.modifiers.sync ? \",true\" : \"\") + \")\";\n };\n },\n cloak: I\n },\n Na = function Na(e) {\n this.options = e, this.warn = e.warn || Or, this.transforms = Tr(e.modules, \"transformCode\"), this.dataGenFns = Tr(e.modules, \"genData\"), this.directives = T(T({}, La), e.directives);\n var t = e.isReservedTag || j;\n this.maybeComponent = function (e) {\n return !!e.component || !t(e.tag);\n }, this.onceId = 0, this.staticRenderFns = [], this.pre = !1;\n };\n\n function Ma(e, t) {\n var n = new Na(t);\n return {\n render: \"with(this){return \" + (e ? Da(e, n) : '_c(\"div\")') + \"}\",\n staticRenderFns: n.staticRenderFns\n };\n }\n\n function Da(e, t) {\n if (e.parent && (e.pre = e.pre || e.parent.pre), e.staticRoot && !e.staticProcessed) return Pa(e, t);\n if (e.once && !e.onceProcessed) return Fa(e, t);\n if (e[\"for\"] && !e.forProcessed) return Ha(e, t);\n if (e[\"if\"] && !e.ifProcessed) return Ra(e, t);\n\n if (\"template\" !== e.tag || e.slotTarget || t.pre) {\n if (\"slot\" === e.tag) return function (e, t) {\n var n = e.slotName || '\"default\"',\n r = Va(e, t),\n i = \"_t(\" + n + (r ? \",\" + r : \"\"),\n o = e.attrs || e.dynamicAttrs ? qa((e.attrs || []).concat(e.dynamicAttrs || []).map(function (e) {\n return {\n name: x(e.name),\n value: e.value,\n dynamic: e.dynamic\n };\n })) : null,\n a = e.attrsMap[\"v-bind\"];\n return !o && !a || r || (i += \",null\"), o && (i += \",\" + o), a && (i += (o ? \"\" : \",null\") + \",\" + a), i + \")\";\n }(e, t);\n var n;\n if (e.component) n = function (e, t, n) {\n var r = t.inlineTemplate ? null : Va(t, n, !0);\n return \"_c(\" + e + \",\" + Ba(t, n) + (r ? \",\" + r : \"\") + \")\";\n }(e.component, e, t);else {\n var r;\n (!e.plain || e.pre && t.maybeComponent(e)) && (r = Ba(e, t));\n var i = e.inlineTemplate ? null : Va(e, t, !0);\n n = \"_c('\" + e.tag + \"'\" + (r ? \",\" + r : \"\") + (i ? \",\" + i : \"\") + \")\";\n }\n\n for (var o = 0; o < t.transforms.length; o++) {\n n = t.transforms[o](e, n);\n }\n\n return n;\n }\n\n return Va(e, t) || \"void 0\";\n }\n\n function Pa(e, t) {\n e.staticProcessed = !0;\n var n = t.pre;\n return e.pre && (t.pre = e.pre), t.staticRenderFns.push(\"with(this){return \" + Da(e, t) + \"}\"), t.pre = n, \"_m(\" + (t.staticRenderFns.length - 1) + (e.staticInFor ? \",true\" : \"\") + \")\";\n }\n\n function Fa(e, t) {\n if (e.onceProcessed = !0, e[\"if\"] && !e.ifProcessed) return Ra(e, t);\n\n if (e.staticInFor) {\n for (var n = \"\", r = e.parent; r;) {\n if (r[\"for\"]) {\n n = r.key;\n break;\n }\n\n r = r.parent;\n }\n\n return n ? \"_o(\" + Da(e, t) + \",\" + t.onceId++ + \",\" + n + \")\" : Da(e, t);\n }\n\n return Pa(e, t);\n }\n\n function Ra(e, t, n, r) {\n return e.ifProcessed = !0, function e(t, n, r, i) {\n if (!t.length) return i || \"_e()\";\n var o = t.shift();\n return o.exp ? \"(\" + o.exp + \")?\" + a(o.block) + \":\" + e(t, n, r, i) : \"\" + a(o.block);\n\n function a(e) {\n return r ? r(e, n) : e.once ? Fa(e, n) : Da(e, n);\n }\n }(e.ifConditions.slice(), t, n, r);\n }\n\n function Ha(e, t, n, r) {\n var i = e[\"for\"],\n o = e.alias,\n a = e.iterator1 ? \",\" + e.iterator1 : \"\",\n s = e.iterator2 ? \",\" + e.iterator2 : \"\";\n return e.forProcessed = !0, (r || \"_l\") + \"((\" + i + \"),function(\" + o + a + s + \"){return \" + (n || Da)(e, t) + \"})\";\n }\n\n function Ba(e, t) {\n var n = \"{\",\n r = function (e, t) {\n var n = e.directives;\n\n if (n) {\n var r,\n i,\n o,\n a,\n s = \"directives:[\",\n c = !1;\n\n for (r = 0, i = n.length; r < i; r++) {\n o = n[r], a = !0;\n var l = t.directives[o.name];\n l && (a = !!l(e, o, t.warn)), a && (c = !0, s += '{name:\"' + o.name + '\",rawName:\"' + o.rawName + '\"' + (o.value ? \",value:(\" + o.value + \"),expression:\" + JSON.stringify(o.value) : \"\") + (o.arg ? \",arg:\" + (o.isDynamicArg ? o.arg : '\"' + o.arg + '\"') : \"\") + (o.modifiers ? \",modifiers:\" + JSON.stringify(o.modifiers) : \"\") + \"},\");\n }\n\n return c ? s.slice(0, -1) + \"]\" : void 0;\n }\n }(e, t);\n\n r && (n += r + \",\"), e.key && (n += \"key:\" + e.key + \",\"), e.ref && (n += \"ref:\" + e.ref + \",\"), e.refInFor && (n += \"refInFor:true,\"), e.pre && (n += \"pre:true,\"), e.component && (n += 'tag:\"' + e.tag + '\",');\n\n for (var i = 0; i < t.dataGenFns.length; i++) {\n n += t.dataGenFns[i](e);\n }\n\n if (e.attrs && (n += \"attrs:\" + qa(e.attrs) + \",\"), e.props && (n += \"domProps:\" + qa(e.props) + \",\"), e.events && (n += Ea(e.events, !1) + \",\"), e.nativeEvents && (n += Ea(e.nativeEvents, !0) + \",\"), e.slotTarget && !e.slotScope && (n += \"slot:\" + e.slotTarget + \",\"), e.scopedSlots && (n += function (e, t, n) {\n var r = e[\"for\"] || Object.keys(t).some(function (e) {\n var n = t[e];\n return n.slotTargetDynamic || n[\"if\"] || n[\"for\"] || Ua(n);\n }),\n i = !!e[\"if\"];\n if (!r) for (var o = e.parent; o;) {\n if (o.slotScope && o.slotScope !== sa || o[\"for\"]) {\n r = !0;\n break;\n }\n\n o[\"if\"] && (i = !0), o = o.parent;\n }\n var a = Object.keys(t).map(function (e) {\n return za(t[e], n);\n }).join(\",\");\n return \"scopedSlots:_u([\" + a + \"]\" + (r ? \",null,true\" : \"\") + (!r && i ? \",null,false,\" + function (e) {\n for (var t = 5381, n = e.length; n;) {\n t = 33 * t ^ e.charCodeAt(--n);\n }\n\n return t >>> 0;\n }(a) : \"\") + \")\";\n }(e, e.scopedSlots, t) + \",\"), e.model && (n += \"model:{value:\" + e.model.value + \",callback:\" + e.model.callback + \",expression:\" + e.model.expression + \"},\"), e.inlineTemplate) {\n var o = function (e, t) {\n var n = e.children[0];\n\n if (n && 1 === n.type) {\n var r = Ma(n, t.options);\n return \"inlineTemplate:{render:function(){\" + r.render + \"},staticRenderFns:[\" + r.staticRenderFns.map(function (e) {\n return \"function(){\" + e + \"}\";\n }).join(\",\") + \"]}\";\n }\n }(e, t);\n\n o && (n += o + \",\");\n }\n\n return n = n.replace(/,$/, \"\") + \"}\", e.dynamicAttrs && (n = \"_b(\" + n + ',\"' + e.tag + '\",' + qa(e.dynamicAttrs) + \")\"), e.wrapData && (n = e.wrapData(n)), e.wrapListeners && (n = e.wrapListeners(n)), n;\n }\n\n function Ua(e) {\n return 1 === e.type && (\"slot\" === e.tag || e.children.some(Ua));\n }\n\n function za(e, t) {\n var n = e.attrsMap[\"slot-scope\"];\n if (e[\"if\"] && !e.ifProcessed && !n) return Ra(e, t, za, \"null\");\n if (e[\"for\"] && !e.forProcessed) return Ha(e, t, za);\n var r = e.slotScope === sa ? \"\" : String(e.slotScope),\n i = \"function(\" + r + \"){return \" + (\"template\" === e.tag ? e[\"if\"] && n ? \"(\" + e[\"if\"] + \")?\" + (Va(e, t) || \"undefined\") + \":undefined\" : Va(e, t) || \"undefined\" : Da(e, t)) + \"}\",\n o = r ? \"\" : \",proxy:true\";\n return \"{key:\" + (e.slotTarget || '\"default\"') + \",fn:\" + i + o + \"}\";\n }\n\n function Va(e, t, n, r, i) {\n var o = e.children;\n\n if (o.length) {\n var a = o[0];\n\n if (1 === o.length && a[\"for\"] && \"template\" !== a.tag && \"slot\" !== a.tag) {\n var s = n ? t.maybeComponent(a) ? \",1\" : \",0\" : \"\";\n return \"\" + (r || Da)(a, t) + s;\n }\n\n var c = n ? function (e, t) {\n for (var n = 0, r = 0; r < e.length; r++) {\n var i = e[r];\n\n if (1 === i.type) {\n if (Ka(i) || i.ifConditions && i.ifConditions.some(function (e) {\n return Ka(e.block);\n })) {\n n = 2;\n break;\n }\n\n (t(i) || i.ifConditions && i.ifConditions.some(function (e) {\n return t(e.block);\n })) && (n = 1);\n }\n }\n\n return n;\n }(o, t.maybeComponent) : 0,\n l = i || Ja;\n return \"[\" + o.map(function (e) {\n return l(e, t);\n }).join(\",\") + \"]\" + (c ? \",\" + c : \"\");\n }\n }\n\n function Ka(e) {\n return void 0 !== e[\"for\"] || \"template\" === e.tag || \"slot\" === e.tag;\n }\n\n function Ja(e, t) {\n return 1 === e.type ? Da(e, t) : 3 === e.type && e.isComment ? (r = e, \"_e(\" + JSON.stringify(r.text) + \")\") : \"_v(\" + (2 === (n = e).type ? n.expression : Wa(JSON.stringify(n.text))) + \")\";\n var n, r;\n }\n\n function qa(e) {\n for (var t = \"\", n = \"\", r = 0; r < e.length; r++) {\n var i = e[r],\n o = Wa(i.value);\n i.dynamic ? n += i.name + \",\" + o + \",\" : t += '\"' + i.name + '\":' + o + \",\";\n }\n\n return t = \"{\" + t.slice(0, -1) + \"}\", n ? \"_d(\" + t + \",[\" + n.slice(0, -1) + \"])\" : t;\n }\n\n function Wa(e) {\n return e.replace(/\\u2028/g, \"\\\\u2028\").replace(/\\u2029/g, \"\\\\u2029\");\n }\n\n function Za(e, t) {\n try {\n return new Function(e);\n } catch (n) {\n return t.push({\n err: n,\n code: e\n }), I;\n }\n }\n\n function Ga(e) {\n var t = Object.create(null);\n return function (n, r, i) {\n (r = T({}, r)).warn, delete r.warn;\n var o = r.delimiters ? String(r.delimiters) + n : n;\n if (t[o]) return t[o];\n var a = e(n, r),\n s = {},\n c = [];\n return s.render = Za(a.render, c), s.staticRenderFns = a.staticRenderFns.map(function (e) {\n return Za(e, c);\n }), t[o] = s;\n };\n }\n\n new RegExp(\"\\\\b\" + \"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\") + \"\\\\b\");\n var Xa,\n Ya,\n Qa = (Xa = function Xa(e, t) {\n var n = function (e, t) {\n Ho = t.warn || Or, Ko = t.isPreTag || j, Jo = t.mustUseProp || j, qo = t.getTagNamespace || j, t.isReservedTag, Uo = Tr(t.modules, \"transformNode\"), zo = Tr(t.modules, \"preTransformNode\"), Vo = Tr(t.modules, \"postTransformNode\"), Bo = t.delimiters;\n var n,\n r,\n i = [],\n o = !1 !== t.preserveWhitespace,\n a = t.whitespace,\n s = !1,\n c = !1;\n\n function l(e) {\n if (u(e), s || e.processed || (e = la(e, t)), i.length || e === n || n[\"if\"] && (e.elseif || e[\"else\"]) && fa(n, {\n exp: e.elseif,\n block: e\n }), r && !e.forbidden) if (e.elseif || e[\"else\"]) a = e, (l = function (e) {\n for (var t = e.length; t--;) {\n if (1 === e[t].type) return e[t];\n e.pop();\n }\n }(r.children)) && l[\"if\"] && fa(l, {\n exp: a.elseif,\n block: a\n });else {\n if (e.slotScope) {\n var o = e.slotTarget || '\"default\"';\n (r.scopedSlots || (r.scopedSlots = {}))[o] = e;\n }\n\n r.children.push(e), e.parent = r;\n }\n var a, l;\n e.children = e.children.filter(function (e) {\n return !e.slotScope;\n }), u(e), e.pre && (s = !1), Ko(e.tag) && (c = !1);\n\n for (var f = 0; f < Vo.length; f++) {\n Vo[f](e, t);\n }\n }\n\n function u(e) {\n if (!c) for (var t; (t = e.children[e.children.length - 1]) && 3 === t.type && \" \" === t.text;) {\n e.children.pop();\n }\n }\n\n return function (e, t) {\n for (var n, r, i = [], o = t.expectHTML, a = t.isUnaryTag || j, s = t.canBeLeftOpenTag || j, c = 0; e;) {\n if (n = e, r && jo(r)) {\n var l = 0,\n u = r.toLowerCase(),\n f = Lo[u] || (Lo[u] = new RegExp(\"([\\\\s\\\\S]*?)(</\" + u + \"[^>]*>)\", \"i\")),\n d = e.replace(f, function (e, n, r) {\n return l = r.length, jo(u) || \"noscript\" === u || (n = n.replace(/<!\\--([\\s\\S]*?)-->/g, \"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, \"$1\")), Fo(u, n) && (n = n.slice(1)), t.chars && t.chars(n), \"\";\n });\n c += e.length - d.length, e = d, A(u, c - l, c);\n } else {\n var p = e.indexOf(\"<\");\n\n if (0 === p) {\n if (Eo.test(e)) {\n var v = e.indexOf(\"--\\x3e\");\n\n if (v >= 0) {\n t.shouldKeepComment && t.comment(e.substring(4, v), c, c + v + 3), x(v + 3);\n continue;\n }\n }\n\n if (Io.test(e)) {\n var h = e.indexOf(\"]>\");\n\n if (h >= 0) {\n x(h + 2);\n continue;\n }\n }\n\n var m = e.match(To);\n\n if (m) {\n x(m[0].length);\n continue;\n }\n\n var y = e.match(Oo);\n\n if (y) {\n var g = c;\n x(y[0].length), A(y[1], g, c);\n continue;\n }\n\n var _ = C();\n\n if (_) {\n k(_), Fo(_.tagName, e) && x(1);\n continue;\n }\n }\n\n var b = void 0,\n w = void 0,\n $ = void 0;\n\n if (p >= 0) {\n for (w = e.slice(p); !(Oo.test(w) || Ao.test(w) || Eo.test(w) || Io.test(w) || ($ = w.indexOf(\"<\", 1)) < 0);) {\n p += $, w = e.slice(p);\n }\n\n b = e.substring(0, p);\n }\n\n p < 0 && (b = e), b && x(b.length), t.chars && b && t.chars(b, c - b.length, c);\n }\n\n if (e === n) {\n t.chars && t.chars(e);\n break;\n }\n }\n\n function x(t) {\n c += t, e = e.substring(t);\n }\n\n function C() {\n var t = e.match(Ao);\n\n if (t) {\n var n,\n r,\n i = {\n tagName: t[1],\n attrs: [],\n start: c\n };\n\n for (x(t[0].length); !(n = e.match(So)) && (r = e.match(xo) || e.match($o));) {\n r.start = c, x(r[0].length), r.end = c, i.attrs.push(r);\n }\n\n if (n) return i.unarySlash = n[1], x(n[0].length), i.end = c, i;\n }\n }\n\n function k(e) {\n var n = e.tagName,\n c = e.unarySlash;\n o && (\"p\" === r && wo(n) && A(r), s(n) && r === n && A(n));\n\n for (var l = a(n) || !!c, u = e.attrs.length, f = new Array(u), d = 0; d < u; d++) {\n var p = e.attrs[d],\n v = p[3] || p[4] || p[5] || \"\",\n h = \"a\" === n && \"href\" === p[1] ? t.shouldDecodeNewlinesForHref : t.shouldDecodeNewlines;\n f[d] = {\n name: p[1],\n value: Ro(v, h)\n };\n }\n\n l || (i.push({\n tag: n,\n lowerCasedTag: n.toLowerCase(),\n attrs: f,\n start: e.start,\n end: e.end\n }), r = n), t.start && t.start(n, f, l, e.start, e.end);\n }\n\n function A(e, n, o) {\n var a, s;\n if (null == n && (n = c), null == o && (o = c), e) for (s = e.toLowerCase(), a = i.length - 1; a >= 0 && i[a].lowerCasedTag !== s; a--) {\n ;\n } else a = 0;\n\n if (a >= 0) {\n for (var l = i.length - 1; l >= a; l--) {\n t.end && t.end(i[l].tag, n, o);\n }\n\n i.length = a, r = a && i[a - 1].tag;\n } else \"br\" === s ? t.start && t.start(e, [], !0, n, o) : \"p\" === s && (t.start && t.start(e, [], !1, n, o), t.end && t.end(e, n, o));\n }\n\n A();\n }(e, {\n warn: Ho,\n expectHTML: t.expectHTML,\n isUnaryTag: t.isUnaryTag,\n canBeLeftOpenTag: t.canBeLeftOpenTag,\n shouldDecodeNewlines: t.shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: t.shouldDecodeNewlinesForHref,\n shouldKeepComment: t.comments,\n outputSourceRange: t.outputSourceRange,\n start: function start(e, o, a, u, f) {\n var d = r && r.ns || qo(e);\n G && \"svg\" === d && (o = function (e) {\n for (var t = [], n = 0; n < e.length; n++) {\n var r = e[n];\n ha.test(r.name) || (r.name = r.name.replace(ma, \"\"), t.push(r));\n }\n\n return t;\n }(o));\n var p,\n v = ca(e, o, r);\n d && (v.ns = d), \"style\" !== (p = v).tag && (\"script\" !== p.tag || p.attrsMap.type && \"text/javascript\" !== p.attrsMap.type) || ie() || (v.forbidden = !0);\n\n for (var h = 0; h < zo.length; h++) {\n v = zo[h](v, t) || v;\n }\n\n s || (function (e) {\n null != Pr(e, \"v-pre\") && (e.pre = !0);\n }(v), v.pre && (s = !0)), Ko(v.tag) && (c = !0), s ? function (e) {\n var t = e.attrsList,\n n = t.length;\n if (n) for (var r = e.attrs = new Array(n), i = 0; i < n; i++) {\n r[i] = {\n name: t[i].name,\n value: JSON.stringify(t[i].value)\n }, null != t[i].start && (r[i].start = t[i].start, r[i].end = t[i].end);\n } else e.pre || (e.plain = !0);\n }(v) : v.processed || (ua(v), function (e) {\n var t = Pr(e, \"v-if\");\n if (t) e[\"if\"] = t, fa(e, {\n exp: t,\n block: e\n });else {\n null != Pr(e, \"v-else\") && (e[\"else\"] = !0);\n var n = Pr(e, \"v-else-if\");\n n && (e.elseif = n);\n }\n }(v), function (e) {\n null != Pr(e, \"v-once\") && (e.once = !0);\n }(v)), n || (n = v), a ? l(v) : (r = v, i.push(v));\n },\n end: function end(e, t, n) {\n var o = i[i.length - 1];\n i.length -= 1, r = i[i.length - 1], l(o);\n },\n chars: function chars(e, t, n) {\n if (r && (!G || \"textarea\" !== r.tag || r.attrsMap.placeholder !== e)) {\n var i,\n l,\n u,\n f = r.children;\n (e = c || e.trim() ? \"script\" === (i = r).tag || \"style\" === i.tag ? e : aa(e) : f.length ? a ? \"condense\" === a && ia.test(e) ? \"\" : \" \" : o ? \" \" : \"\" : \"\") && (c || \"condense\" !== a || (e = e.replace(oa, \" \")), !s && \" \" !== e && (l = function (e, t) {\n var n = Bo ? mo(Bo) : vo;\n\n if (n.test(e)) {\n for (var r, i, o, a = [], s = [], c = n.lastIndex = 0; r = n.exec(e);) {\n (i = r.index) > c && (s.push(o = e.slice(c, i)), a.push(JSON.stringify(o)));\n var l = Ar(r[1].trim());\n a.push(\"_s(\" + l + \")\"), s.push({\n \"@binding\": l\n }), c = i + r[0].length;\n }\n\n return c < e.length && (s.push(o = e.slice(c)), a.push(JSON.stringify(o))), {\n expression: a.join(\"+\"),\n tokens: s\n };\n }\n }(e)) ? u = {\n type: 2,\n expression: l.expression,\n tokens: l.tokens,\n text: e\n } : \" \" === e && f.length && \" \" === f[f.length - 1].text || (u = {\n type: 3,\n text: e\n }), u && f.push(u));\n }\n },\n comment: function comment(e, t, n) {\n if (r) {\n var i = {\n type: 3,\n text: e,\n isComment: !0\n };\n r.children.push(i);\n }\n }\n }), n;\n }(e.trim(), t);\n\n !1 !== t.optimize && function (e, t) {\n e && (ga = $a(t.staticKeys || \"\"), _a = t.isReservedTag || j, function e(t) {\n if (t[\"static\"] = function (e) {\n return 2 !== e.type && (3 === e.type || !(!e.pre && (e.hasBindings || e[\"if\"] || e[\"for\"] || m(e.tag) || !_a(e.tag) || function (e) {\n for (; e.parent;) {\n if (\"template\" !== (e = e.parent).tag) return !1;\n if (e[\"for\"]) return !0;\n }\n\n return !1;\n }(e) || !Object.keys(e).every(ga))));\n }(t), 1 === t.type) {\n if (!_a(t.tag) && \"slot\" !== t.tag && null == t.attrsMap[\"inline-template\"]) return;\n\n for (var n = 0, r = t.children.length; n < r; n++) {\n var i = t.children[n];\n e(i), i[\"static\"] || (t[\"static\"] = !1);\n }\n\n if (t.ifConditions) for (var o = 1, a = t.ifConditions.length; o < a; o++) {\n var s = t.ifConditions[o].block;\n e(s), s[\"static\"] || (t[\"static\"] = !1);\n }\n }\n }(e), function e(t, n) {\n if (1 === t.type) {\n if ((t[\"static\"] || t.once) && (t.staticInFor = n), t[\"static\"] && t.children.length && (1 !== t.children.length || 3 !== t.children[0].type)) return void (t.staticRoot = !0);\n if (t.staticRoot = !1, t.children) for (var r = 0, i = t.children.length; r < i; r++) {\n e(t.children[r], n || !!t[\"for\"]);\n }\n if (t.ifConditions) for (var o = 1, a = t.ifConditions.length; o < a; o++) {\n e(t.ifConditions[o].block, n);\n }\n }\n }(e, !1));\n }(n, t);\n var r = Ma(n, t);\n return {\n ast: n,\n render: r.render,\n staticRenderFns: r.staticRenderFns\n };\n }, function (e) {\n function t(t, n) {\n var r = Object.create(e),\n i = [],\n o = [];\n if (n) for (var a in n.modules && (r.modules = (e.modules || []).concat(n.modules)), n.directives && (r.directives = T(Object.create(e.directives || null), n.directives)), n) {\n \"modules\" !== a && \"directives\" !== a && (r[a] = n[a]);\n }\n\n r.warn = function (e, t, n) {\n (n ? o : i).push(e);\n };\n\n var s = Xa(t.trim(), r);\n return s.errors = i, s.tips = o, s;\n }\n\n return {\n compile: t,\n compileToFunctions: Ga(t)\n };\n })(wa),\n es = (Qa.compile, Qa.compileToFunctions);\n\n function ts(e) {\n return (Ya = Ya || document.createElement(\"div\")).innerHTML = e ? '<a href=\"\\n\"/>' : '<div a=\"\\n\"/>', Ya.innerHTML.indexOf(\"&#10;\") > 0;\n }\n\n var ns = !!J && ts(!1),\n rs = !!J && ts(!0),\n is = w(function (e) {\n var t = Yn(e);\n return t && t.innerHTML;\n }),\n os = Cn.prototype.$mount;\n Cn.prototype.$mount = function (e, t) {\n if ((e = e && Yn(e)) === document.body || e === document.documentElement) return this;\n var n = this.$options;\n\n if (!n.render) {\n var r = n.template;\n if (r) {\n if (\"string\" == typeof r) \"#\" === r.charAt(0) && (r = is(r));else {\n if (!r.nodeType) return this;\n r = r.innerHTML;\n }\n } else e && (r = function (e) {\n if (e.outerHTML) return e.outerHTML;\n var t = document.createElement(\"div\");\n return t.appendChild(e.cloneNode(!0)), t.innerHTML;\n }(e));\n\n if (r) {\n var i = es(r, {\n outputSourceRange: !1,\n shouldDecodeNewlines: ns,\n shouldDecodeNewlinesForHref: rs,\n delimiters: n.delimiters,\n comments: n.comments\n }, this),\n o = i.render,\n a = i.staticRenderFns;\n n.render = o, n.staticRenderFns = a;\n }\n }\n\n return os.call(this, e, t);\n }, Cn.compile = es, e.exports = Cn;\n }).call(this, n(1), n(4).setImmediate);\n }, function (e, t, n) {\n (function (e) {\n var r = void 0 !== e && e || \"undefined\" != typeof self && self || window,\n i = Function.prototype.apply;\n\n function o(e, t) {\n this._id = e, this._clearFn = t;\n }\n\n t.setTimeout = function () {\n return new o(i.call(setTimeout, r, arguments), clearTimeout);\n }, t.setInterval = function () {\n return new o(i.call(setInterval, r, arguments), clearInterval);\n }, t.clearTimeout = t.clearInterval = function (e) {\n e && e.close();\n }, o.prototype.unref = o.prototype.ref = function () {}, o.prototype.close = function () {\n this._clearFn.call(r, this._id);\n }, t.enroll = function (e, t) {\n clearTimeout(e._idleTimeoutId), e._idleTimeout = t;\n }, t.unenroll = function (e) {\n clearTimeout(e._idleTimeoutId), e._idleTimeout = -1;\n }, t._unrefActive = t.active = function (e) {\n clearTimeout(e._idleTimeoutId);\n var t = e._idleTimeout;\n t >= 0 && (e._idleTimeoutId = setTimeout(function () {\n e._onTimeout && e._onTimeout();\n }, t));\n }, n(5), t.setImmediate = \"undefined\" != typeof self && self.setImmediate || void 0 !== e && e.setImmediate || this && this.setImmediate, t.clearImmediate = \"undefined\" != typeof self && self.clearImmediate || void 0 !== e && e.clearImmediate || this && this.clearImmediate;\n }).call(this, n(1));\n }, function (e, t, n) {\n (function (e, t) {\n !function (e, n) {\n \"use strict\";\n\n if (!e.setImmediate) {\n var r,\n i,\n o,\n a,\n s,\n c = 1,\n l = {},\n u = !1,\n f = e.document,\n d = Object.getPrototypeOf && Object.getPrototypeOf(e);\n d = d && d.setTimeout ? d : e, \"[object process]\" === {}.toString.call(e.process) ? r = function r(e) {\n t.nextTick(function () {\n v(e);\n });\n } : !function () {\n if (e.postMessage && !e.importScripts) {\n var t = !0,\n n = e.onmessage;\n return e.onmessage = function () {\n t = !1;\n }, e.postMessage(\"\", \"*\"), e.onmessage = n, t;\n }\n }() ? e.MessageChannel ? ((o = new MessageChannel()).port1.onmessage = function (e) {\n v(e.data);\n }, r = function r(e) {\n o.port2.postMessage(e);\n }) : f && \"onreadystatechange\" in f.createElement(\"script\") ? (i = f.documentElement, r = function r(e) {\n var t = f.createElement(\"script\");\n t.onreadystatechange = function () {\n v(e), t.onreadystatechange = null, i.removeChild(t), t = null;\n }, i.appendChild(t);\n }) : r = function r(e) {\n setTimeout(v, 0, e);\n } : (a = \"setImmediate$\" + Math.random() + \"$\", s = function s(t) {\n t.source === e && \"string\" == typeof t.data && 0 === t.data.indexOf(a) && v(+t.data.slice(a.length));\n }, e.addEventListener ? e.addEventListener(\"message\", s, !1) : e.attachEvent(\"onmessage\", s), r = function r(t) {\n e.postMessage(a + t, \"*\");\n }), d.setImmediate = function (e) {\n \"function\" != typeof e && (e = new Function(\"\" + e));\n\n for (var t = new Array(arguments.length - 1), n = 0; n < t.length; n++) {\n t[n] = arguments[n + 1];\n }\n\n var i = {\n callback: e,\n args: t\n };\n return l[c] = i, r(c), c++;\n }, d.clearImmediate = p;\n }\n\n function p(e) {\n delete l[e];\n }\n\n function v(e) {\n if (u) setTimeout(v, 0, e);else {\n var t = l[e];\n\n if (t) {\n u = !0;\n\n try {\n !function (e) {\n var t = e.callback,\n r = e.args;\n\n switch (r.length) {\n case 0:\n t();\n break;\n\n case 1:\n t(r[0]);\n break;\n\n case 2:\n t(r[0], r[1]);\n break;\n\n case 3:\n t(r[0], r[1], r[2]);\n break;\n\n default:\n t.apply(n, r);\n }\n }(t);\n } finally {\n p(e), u = !1;\n }\n }\n }\n }\n }(\"undefined\" == typeof self ? void 0 === e ? this : e : self);\n }).call(this, n(1), n(6));\n }, function (e, t) {\n var n,\n r,\n i = e.exports = {};\n\n function o() {\n throw new Error(\"setTimeout has not been defined\");\n }\n\n function a() {\n throw new Error(\"clearTimeout has not been defined\");\n }\n\n function s(e) {\n if (n === setTimeout) return setTimeout(e, 0);\n if ((n === o || !n) && setTimeout) return n = setTimeout, setTimeout(e, 0);\n\n try {\n return n(e, 0);\n } catch (t) {\n try {\n return n.call(null, e, 0);\n } catch (t) {\n return n.call(this, e, 0);\n }\n }\n }\n\n !function () {\n try {\n n = \"function\" == typeof setTimeout ? setTimeout : o;\n } catch (e) {\n n = o;\n }\n\n try {\n r = \"function\" == typeof clearTimeout ? clearTimeout : a;\n } catch (e) {\n r = a;\n }\n }();\n var c,\n l = [],\n u = !1,\n f = -1;\n\n function d() {\n u && c && (u = !1, c.length ? l = c.concat(l) : f = -1, l.length && p());\n }\n\n function p() {\n if (!u) {\n var e = s(d);\n u = !0;\n\n for (var t = l.length; t;) {\n for (c = l, l = []; ++f < t;) {\n c && c[f].run();\n }\n\n f = -1, t = l.length;\n }\n\n c = null, u = !1, function (e) {\n if (r === clearTimeout) return clearTimeout(e);\n if ((r === a || !r) && clearTimeout) return r = clearTimeout, clearTimeout(e);\n\n try {\n r(e);\n } catch (t) {\n try {\n return r.call(null, e);\n } catch (t) {\n return r.call(this, e);\n }\n }\n }(e);\n }\n }\n\n function v(e, t) {\n this.fun = e, this.array = t;\n }\n\n function h() {}\n\n i.nextTick = function (e) {\n var t = new Array(arguments.length - 1);\n if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) {\n t[n - 1] = arguments[n];\n }\n l.push(new v(e, t)), 1 !== l.length || u || s(p);\n }, v.prototype.run = function () {\n this.fun.apply(null, this.array);\n }, i.title = \"browser\", i.browser = !0, i.env = {}, i.argv = [], i.version = \"\", i.versions = {}, i.on = h, i.addListener = h, i.once = h, i.off = h, i.removeListener = h, i.removeAllListeners = h, i.emit = h, i.prependListener = h, i.prependOnceListener = h, i.listeners = function (e) {\n return [];\n }, i.binding = function (e) {\n throw new Error(\"process.binding is not supported\");\n }, i.cwd = function () {\n return \"/\";\n }, i.chdir = function (e) {\n throw new Error(\"process.chdir is not supported\");\n }, i.umask = function () {\n return 0;\n };\n }, function (e, t, n) {\n \"use strict\";\n\n n.r(t);\n var r = n(0),\n i = n.n(r);\n /^2\\./.test(i.a.version) || i.a.util.warn(\"VueClickaway 2.2.2 only supports Vue 2.x, and does not support Vue \" + i.a.version);\n var o = \"_vue_clickaway_handler\";\n\n function a(e, t, n) {\n s(e);\n var r = n.context,\n i = t.value;\n\n if (\"function\" == typeof i) {\n var a = !1;\n setTimeout(function () {\n a = !0;\n }, 0), e[o] = function (t) {\n var n = t.path || (t.composedPath ? t.composedPath() : void 0);\n if (a && (n ? n.indexOf(e) < 0 : !e.contains(t.target))) return i.call(r, t);\n }, document.documentElement.addEventListener(\"click\", e[o], !1);\n }\n }\n\n function s(e) {\n document.documentElement.removeEventListener(\"click\", e[o], !1), delete e[o];\n }\n\n var c = {\n bind: a,\n update: function update(e, t) {\n t.value !== t.oldValue && a(e, t);\n },\n unbind: s\n };\n Array.from || (Array.from = function (e) {\n return [].slice.call(e);\n }), Array.isArray || (Array.isArray = function (e) {\n return \"[object Array]\" === Object.prototype.toString.call(e);\n });\n\n var l = Array.from,\n u = Array.isArray,\n f = 27,\n d = 38,\n p = 40,\n v = function v(e) {\n return Boolean(e && e.nodeType === Node.ELEMENT_NODE);\n },\n h = function h(e) {\n if (!v(e) || (t = document.body, n = e, !t || \"function\" != typeof t.contains || !t.contains(n))) return !1;\n var t, n;\n if (\"none\" === e.style.display) return !1;\n\n var r = function (e) {\n return v(e) ? e.getBoundingClientRect() : null;\n }(e);\n\n return Boolean(r && r.height > 0 && r.width > 0);\n },\n m = function m(e, t) {\n return l((v(t) ? t : document).querySelectorAll(e));\n },\n y = function y(e, t, n) {\n t && v(e) && e.setAttribute(t, n);\n },\n g = function g(e) {\n var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},\n r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},\n i = n[e] || r[e];\n return \"function\" == typeof i ? i(t) : i;\n },\n _ = {\n directives: {\n onClickaway: c\n },\n props: {\n closeOnClick: {\n type: Boolean,\n \"default\": !0\n },\n closeOnScroll: {\n type: Boolean,\n \"default\": !0\n },\n lazy: {\n type: Boolean,\n \"default\": !1\n },\n itemSelector: {\n type: [String, Array],\n \"default\": function _default() {\n return [\".v-context-item\", \".v-context > li > a\"];\n }\n },\n role: {\n type: String,\n \"default\": \"menu\"\n },\n tag: {\n type: String,\n \"default\": \"ul\"\n }\n },\n computed: {\n style: function style() {\n return this.show ? {\n top: \"\".concat(this.top, \"px\"),\n left: \"\".concat(this.left, \"px\")\n } : null;\n }\n },\n data: function data() {\n return {\n top: null,\n left: null,\n show: !1,\n data: null,\n localItemSelector: \"\"\n };\n },\n created: function created() {\n this.localItemSelector = this.mapItemSelector(this.itemSelector);\n },\n beforeDestroy: function beforeDestroy() {\n this.closeOnScroll && this.removeScrollEventListener();\n },\n methods: {\n addScrollEventListener: function addScrollEventListener() {\n var e, t, n;\n e = window, t = \"scroll\", n = this.close, e && e.addEventListener && e.addEventListener(t, n);\n },\n close: function close() {\n this.show && (this.resetData(), this.closeOnScroll && this.removeScrollEventListener(), this.$emit(\"close\"));\n },\n focusItem: function focusItem(e, t) {\n var n = t.find(function (t, n) {\n return n === e;\n });\n n && n.focus && n.focus();\n },\n focusNext: function focusNext(e, t) {\n var n = this;\n this.show && (e.preventDefault(), e.stopPropagation(), this.$nextTick(function () {\n var r = n.getItems();\n\n if (!(r.length < 1)) {\n var i = r.indexOf(e.target);\n t && i > 0 ? i-- : !t && i < r.length - 1 && i++, i < 0 && (i = 0), n.focusItem(i, r);\n }\n }));\n },\n getItems: function getItems() {\n return (m(this.localItemSelector, this.$el) || []).filter(h);\n },\n mapItemSelector: function mapItemSelector(e) {\n return u(e) && (e = e.map(function (e) {\n return \"\".concat(e, \":not(.disabled):not([disabled])\");\n }).join(\", \")), e;\n },\n onClick: function onClick() {\n this.close();\n },\n onKeydown: function onKeydown(e) {\n var t = e.keyCode;\n t === f ? this.close() : t === p ? this.focusNext(e, !1) : t === d && this.focusNext(e, !0);\n },\n open: function open(e, t) {\n var n = this;\n this.data = t, this.show = !0, this.$nextTick(function () {\n n.positionMenu(e.clientY, e.clientX), n.$el.focus(), n.setItemRoles(), n.closeOnScroll && n.addScrollEventListener(), n.$emit(\"open\", e, n.data, n.top, n.left);\n });\n },\n positionMenu: function positionMenu(e, t) {\n var n = window.innerHeight - this.$el.offsetHeight - 25,\n r = window.innerWidth - this.$el.offsetWidth - 25;\n e > n && (e = n), t > r && (t = r), this.top = e, this.left = t;\n },\n removeScrollEventListener: function removeScrollEventListener() {\n var e, t, n;\n e = window, t = \"scroll\", n = this.close, e && e.removeEventListener && e.removeEventListener(t, n);\n },\n resetData: function resetData() {\n this.top = null, this.left = null, this.data = null, this.show = !1;\n },\n setItemRoles: function setItemRoles() {\n m(this.localItemSelector, this.$el).forEach(function (e) {\n y(e, \"role\", \"menuitem\"), y(e, \"tabindex\", \"-1\");\n });\n }\n },\n watch: {\n closeOnScroll: function closeOnScroll(e, t) {\n e !== t && (e && this.show ? this.addScrollEventListener() : this.removeScrollEventListener());\n },\n itemSelector: function itemSelector(e, t) {\n e !== t && (this.localItemSelector = this.mapItemSelector(e));\n }\n },\n render: function render(e) {\n if (this.lazy && !this.show) return e(!1);\n var t = {\n \"!contextmenu\": function contextmenu(e) {\n e.preventDefault();\n },\n keydown: this.onKeydown\n };\n this.closeOnClick && (t.click = this.onClick);\n var n = [{\n name: \"on-clickaway\",\n value: this.close,\n rawName: \"v-on-clickaway\"\n }];\n return this.lazy || n.push({\n name: \"show\",\n value: this.show,\n rawName: \"v-show\",\n expression: \"show\"\n }), e(this.tag, {\n staticClass: \"v-context\",\n style: this.style,\n attrs: {\n tabindex: \"-1\",\n role: this.role,\n \"aria-hidden\": this.lazy ? null : String(!this.show)\n },\n on: t,\n directives: n\n }, [g(\"default\", {\n data: this.data\n }, this.$scopedSlots, this.$slots)]);\n }\n };\n\n n.d(t, \"VueContext\", function () {\n return _;\n });\n }]);\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kaXN0L2pzL3Z1ZS1jb250ZXh0LmpzPzJlNDUiXSwibmFtZXMiOlsiZSIsInQiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwid2luZG93IiwibiIsInIiLCJpIiwibCIsImNhbGwiLCJtIiwiYyIsImQiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsIl9fZXNNb2R1bGUiLCJjcmVhdGUiLCJiaW5kIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIkZ1bmN0aW9uIiwiZnJlZXplIiwiYSIsInRvU3RyaW5nIiwidSIsImYiLCJwYXJzZUZsb2F0IiwiU3RyaW5nIiwiTWF0aCIsImZsb29yIiwiaXNGaW5pdGUiLCJ0aGVuIiwiQXJyYXkiLCJpc0FycmF5IiwiSlNPTiIsInN0cmluZ2lmeSIsInYiLCJpc05hTiIsImgiLCJzcGxpdCIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwieSIsImciLCJpbmRleE9mIiwic3BsaWNlIiwiXyIsImIiLCJ3IiwiJCIsIngiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJDIiwiY2hhckF0Iiwic2xpY2UiLCJrIiwiQSIsIlMiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9sZW5ndGgiLCJPIiwiVCIsIkUiLCJJIiwiaiIsIkwiLCJOIiwiZXZlcnkiLCJEYXRlIiwiZ2V0VGltZSIsImtleXMiLCJNIiwiRCIsIlAiLCJGIiwiUiIsIkgiLCJvcHRpb25NZXJnZVN0cmF0ZWdpZXMiLCJzaWxlbnQiLCJwcm9kdWN0aW9uVGlwIiwiZGV2dG9vbHMiLCJwZXJmb3JtYW5jZSIsImVycm9ySGFuZGxlciIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1lbnRzIiwia2V5Q29kZXMiLCJpc1Jlc2VydmVkVGFnIiwiaXNSZXNlcnZlZEF0dHIiLCJpc1Vua25vd25FbGVtZW50IiwiZ2V0VGFnTmFtZXNwYWNlIiwicGFyc2VQbGF0Zm9ybVRhZ05hbWUiLCJtdXN0VXNlUHJvcCIsImFzeW5jIiwiX2xpZmVjeWNsZUhvb2tzIiwiQiIsIlUiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsInoiLCJWIiwiUmVnRXhwIiwic291cmNlIiwiSyIsIkoiLCJxIiwiV1hFbnZpcm9ubWVudCIsInBsYXRmb3JtIiwiVyIsIloiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJHIiwidGVzdCIsIlgiLCJZIiwiUSIsImVlIiwibWF0Y2giLCJ0ZSIsIndhdGNoIiwibmUiLCJyZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJpZSIsInByb2Nlc3MiLCJlbnYiLCJWVUVfRU5WIiwib2UiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwiYWUiLCJzZSIsImNlIiwiUmVmbGVjdCIsIm93bktleXMiLCJTZXQiLCJzZXQiLCJoYXMiLCJhZGQiLCJjbGVhciIsImxlIiwidWUiLCJmZSIsImlkIiwic3VicyIsImFkZFN1YiIsInB1c2giLCJyZW1vdmVTdWIiLCJkZXBlbmQiLCJ0YXJnZXQiLCJhZGREZXAiLCJub3RpZnkiLCJ1cGRhdGUiLCJkZSIsInBlIiwidmUiLCJwb3AiLCJoZSIsInRhZyIsImRhdGEiLCJjaGlsZHJlbiIsInRleHQiLCJlbG0iLCJucyIsImNvbnRleHQiLCJmbkNvbnRleHQiLCJmbk9wdGlvbnMiLCJmblNjb3BlSWQiLCJrZXkiLCJjb21wb25lbnRPcHRpb25zIiwiY29tcG9uZW50SW5zdGFuY2UiLCJwYXJlbnQiLCJyYXciLCJpc1N0YXRpYyIsImlzUm9vdEluc2VydCIsImlzQ29tbWVudCIsImlzQ2xvbmVkIiwiaXNPbmNlIiwiYXN5bmNGYWN0b3J5IiwiYXN5bmNNZXRhIiwiaXNBc3luY1BsYWNlaG9sZGVyIiwibWUiLCJjaGlsZCIsImRlZmluZVByb3BlcnRpZXMiLCJ5ZSIsImdlIiwiX2UiLCJiZSIsIndlIiwiZm9yRWFjaCIsIl9fb2JfXyIsIm9ic2VydmVBcnJheSIsImRlcCIsIiRlIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInhlIiwiQ2UiLCJrZSIsInZtQ291bnQiLCJfX3Byb3RvX18iLCJ3YWxrIiwiQWUiLCJpc0V4dGVuc2libGUiLCJfaXNWdWUiLCJTZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIk9lIiwibWF4IiwiVGUiLCJFZSIsIkllIiwiamUiLCJMZSIsImNvbmNhdCIsIk5lIiwicHJvcHMiLCJtZXRob2RzIiwiaW5qZWN0IiwiY29tcHV0ZWQiLCJwcm92aWRlIiwiTWUiLCJEZSIsIm9wdGlvbnMiLCJ0eXBlIiwiZnJvbSIsImRpcmVjdGl2ZXMiLCJfYmFzZSIsIm1peGlucyIsIlBlIiwiRmUiLCJCZSIsIkJvb2xlYW4iLCIkb3B0aW9ucyIsInByb3BzRGF0YSIsIl9wcm9wcyIsIlJlIiwiSGUiLCJVZSIsIiRwYXJlbnQiLCJlcnJvckNhcHR1cmVkIiwiVmUiLCJ6ZSIsIl9oYW5kbGVkIiwiS2UiLCJjb25zb2xlIiwiZXJyb3IiLCJKZSIsInFlIiwiV2UiLCJaZSIsIkdlIiwiUHJvbWlzZSIsIlhlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJNdXRhdGlvbk9ic2VydmVyIiwiWWUiLCJRZSIsImV0IiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwidHQiLCJudCIsInJ0IiwiaXNGcm96ZW4iLCJpdCIsIm5hbWUiLCJvbmNlIiwiY2FwdHVyZSIsInBhc3NpdmUiLCJvdCIsImZucyIsImF0IiwicGFyYW1zIiwic3QiLCJob29rIiwibWVyZ2VkIiwiY3QiLCJsdCIsInV0Iiwic2hpZnQiLCJfaXNWTGlzdCIsImZ0IiwiX3Byb3ZpZGVkIiwiZHQiLCJhdHRycyIsInNsb3QiLCJwdCIsInZ0IiwiJHN0YWJsZSIsIiRrZXkiLCJfbm9ybWFsaXplZCIsIiRoYXNOb3JtYWwiLCJodCIsIm10IiwicHJveHkiLCJ5dCIsIml0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJndCIsIiRzY29wZWRTbG90cyIsIiRzbG90cyIsIiRjcmVhdGVFbGVtZW50IiwiX3QiLCJidCIsInd0IiwiJHQiLCJkb21Qcm9wcyIsIm9uIiwieHQiLCJfc3RhdGljVHJlZXMiLCJrdCIsInN0YXRpY1JlbmRlckZucyIsIl9yZW5kZXJQcm94eSIsIkN0IiwiQXQiLCJTdCIsIk90IiwiZm4iLCJUdCIsIkV0IiwiSXQiLCJfbyIsIl9uIiwiX3MiLCJfbCIsIl9xIiwiX2kiLCJfbSIsIl9mIiwiX2siLCJfYiIsIl92IiwiX3UiLCJfZyIsIl9kIiwiX3AiLCJqdCIsIl9vcmlnaW5hbCIsIl9jb21waWxlZCIsImxpc3RlbmVycyIsImluamVjdGlvbnMiLCJzbG90cyIsInNjb3BlZFNsb3RzIiwiX3Njb3BlSWQiLCJfYyIsIkJ0IiwiTHQiLCJOdCIsIk10IiwiaW5pdCIsIl9pc0Rlc3Ryb3llZCIsImtlZXBBbGl2ZSIsInByZXBhdGNoIiwiX2lzQ29tcG9uZW50IiwiX3BhcmVudFZub2RlIiwiWHQiLCJpbmxpbmVUZW1wbGF0ZSIsInJlbmRlciIsIkN0b3IiLCIkbW91bnQiLCJfcmVuZGVyQ2hpbGRyZW4iLCIkdm5vZGUiLCJfdm5vZGUiLCIkYXR0cnMiLCIkbGlzdGVuZXJzIiwiX3Byb3BLZXlzIiwiX3BhcmVudExpc3RlbmVycyIsIkd0IiwiJGZvcmNlVXBkYXRlIiwiaW5zZXJ0IiwiX2lzTW91bnRlZCIsInRuIiwiX2luYWN0aXZlIiwicm4iLCJlbiIsImRlc3Ryb3kiLCJfZGlyZWN0SW5hY3RpdmUiLCJRdCIsIiRjaGlsZHJlbiIsIiRkZXN0cm95IiwiRHQiLCJQdCIsImV4dGVuZCIsImNpZCIsImVycm9yQ29tcCIsInJlc29sdmVkIiwienQiLCJvd25lcnMiLCJsb2FkaW5nIiwibG9hZGluZ0NvbXAiLCIkb24iLCJjbGVhclRpbWVvdXQiLCJWdCIsImNvbXBvbmVudCIsImRlbGF5IiwidGltZW91dCIsInhuIiwibW9kZWwiLCJwcm9wIiwiZXZlbnQiLCJjYWxsYmFjayIsImZ1bmN0aW9uYWwiLCJuYXRpdmVPbiIsIl9tZXJnZWQiLCJGdCIsIlJ0IiwiSHQiLCJpcyIsInByZSIsInN0eWxlIiwiVXQiLCJLdCIsIkp0IiwicXQiLCJXdCIsIiRvZmYiLCJadCIsIll0IiwiX2hhc0hvb2tFdmVudCIsIiRlbWl0Iiwibm4iLCJhbiIsInNuIiwiY24iLCJsbiIsInVuIiwibm93IiwiY3JlYXRlRXZlbnQiLCJ0aW1lU3RhbXAiLCJkbiIsInNvcnQiLCJiZWZvcmUiLCJydW4iLCJ2bSIsIl93YXRjaGVyIiwiZW1pdCIsInBuIiwidm4iLCJfd2F0Y2hlcnMiLCJkZWVwIiwidXNlciIsImxhenkiLCJzeW5jIiwiY2IiLCJhY3RpdmUiLCJkaXJ0eSIsImRlcHMiLCJuZXdEZXBzIiwiZGVwSWRzIiwibmV3RGVwSWRzIiwiZXhwcmVzc2lvbiIsImdldHRlciIsImNsZWFudXBEZXBzIiwiZXZhbHVhdGUiLCJ0ZWFyZG93biIsIl9pc0JlaW5nRGVzdHJveWVkIiwiaG4iLCJtbiIsInluIiwiZ24iLCJibiIsImNhY2hlIiwiX2NvbXB1dGVkV2F0Y2hlcnMiLCJ3biIsImhhbmRsZXIiLCIkd2F0Y2giLCIkbiIsInN1cGVyT3B0aW9ucyIsInNlYWxlZE9wdGlvbnMiLCJleHRlbmRPcHRpb25zIiwiY29tcG9uZW50cyIsIkNuIiwiX2luaXQiLCJrbiIsIkFuIiwiU24iLCJPbiIsIl91aWQiLCJjb25zdHJ1Y3RvciIsIl9jb21wb25lbnRUYWciLCJfc2VsZiIsIiRyb290IiwiJHJlZnMiLCJfZXZlbnRzIiwiX2RhdGEiLCJjaGFyQ29kZUF0IiwiZWwiLCIkc2V0IiwiJGRlbGV0ZSIsImltbWVkaWF0ZSIsIiRvbmNlIiwiX3VwZGF0ZSIsIiRlbCIsIl9fcGF0Y2hfXyIsIl9fdnVlX18iLCIkbmV4dFRpY2siLCJfcmVuZGVyIiwiVG4iLCJFbiIsIktlZXBBbGl2ZSIsImluY2x1ZGUiLCJleGNsdWRlIiwiTnVtYmVyIiwiY3JlYXRlZCIsImRlc3Ryb3llZCIsIm1vdW50ZWQiLCJwYXJzZUludCIsInV0aWwiLCJ3YXJuIiwibWVyZ2VPcHRpb25zIiwiZGVmaW5lUmVhY3RpdmUiLCJuZXh0VGljayIsIm9ic2VydmFibGUiLCJ1c2UiLCJfaW5zdGFsbGVkUGx1Z2lucyIsInVuc2hpZnQiLCJpbnN0YWxsIiwibWl4aW4iLCJfQ3RvciIsInNzckNvbnRleHQiLCJ2ZXJzaW9uIiwiSW4iLCJqbiIsIkxuIiwiTm4iLCJNbiIsIkRuIiwiQm4iLCJQbiIsIkZuIiwiUm4iLCJIbiIsIlVuIiwic3RhdGljQ2xhc3MiLCJ6biIsIlZuIiwiS24iLCJzdmciLCJtYXRoIiwiSm4iLCJxbiIsIlduIiwiWm4iLCJHbiIsIlhuIiwiWW4iLCJxdWVyeVNlbGVjdG9yIiwiY3JlYXRlRWxlbWVudCIsIlFuIiwibXVsdGlwbGUiLCJzZXRBdHRyaWJ1dGUiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVDb21tZW50IiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJuZXh0U2libGluZyIsInRhZ05hbWUiLCJzZXRUZXh0Q29udGVudCIsInRleHRDb250ZW50Iiwic2V0U3R5bGVTY29wZSIsImVyIiwidHIiLCJyZWYiLCJyZWZJbkZvciIsIm5yIiwicnIiLCJpciIsIm9yIiwiYXIiLCJzciIsImxyIiwib2xkVmFsdWUiLCJvbGRBcmciLCJhcmciLCJmciIsImRlZiIsImNvbXBvbmVudFVwZGF0ZWQiLCJpbnNlcnRlZCIsImNyIiwibW9kaWZpZXJzIiwidXIiLCJyYXdOYW1lIiwiam9pbiIsImRyIiwicHIiLCJpbmhlcml0QXR0cnMiLCJ2ciIsInJlbW92ZUF0dHJpYnV0ZU5TIiwicmVtb3ZlQXR0cmlidXRlIiwiaHIiLCJzZXRBdHRyaWJ1dGVOUyIsIl9faWVwaCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJtciIsInlyIiwiX3RyYW5zaXRpb25DbGFzc2VzIiwiX3ByZXZDbGFzcyIsImdyIiwiX3IiLCJiciIsIndyIiwiJHIiLCJ4ciIsIkNyIiwia3IiLCJBciIsInRyaW0iLCJTciIsIk9yIiwiVHIiLCJtYXAiLCJmaWx0ZXIiLCJFciIsIlJyIiwiZHluYW1pYyIsInBsYWluIiwiSXIiLCJkeW5hbWljQXR0cnMiLCJqciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiTHIiLCJpc0R5bmFtaWNBcmciLCJOciIsIk1yIiwicmlnaHQiLCJtaWRkbGUiLCJuYXRpdmVFdmVudHMiLCJldmVudHMiLCJEciIsIlByIiwiRnIiLCJzdGFydCIsImVuZCIsIkhyIiwibnVtYmVyIiwiQnIiLCJsYXN0SW5kZXhPZiIsImV4cCIsInpyIiwiVnIiLCJVciIsIkpyIiwiS3IiLCJxciIsIldyIiwiWnIiLCJHciIsIlFyIiwiWHIiLCJZciIsIl93cmFwcGVyIiwiY3VycmVudFRhcmdldCIsIm93bmVyRG9jdW1lbnQiLCJlaSIsImNoYW5nZSIsInRpIiwibmkiLCJyaSIsImNoaWxkTm9kZXMiLCJfdmFsdWUiLCJpaSIsImlubmVySFRNTCIsImZpcnN0Q2hpbGQiLCJjb21wb3NpbmciLCJhY3RpdmVFbGVtZW50IiwiX3ZNb2RpZmllcnMiLCJvaSIsImFpIiwic2kiLCJjaSIsInN0YXRpY1N0eWxlIiwibGkiLCJ1aSIsImZpIiwiZGkiLCJzZXRQcm9wZXJ0eSIsInZpIiwicGkiLCJoaSIsIm5vcm1hbGl6ZWRTdHlsZSIsIm1pIiwieWkiLCJnaSIsImNsYXNzTGlzdCIsImdldEF0dHJpYnV0ZSIsInJlbW92ZSIsImJpIiwiY3NzIiwid2kiLCJlbnRlckNsYXNzIiwiZW50ZXJUb0NsYXNzIiwiZW50ZXJBY3RpdmVDbGFzcyIsImxlYXZlQ2xhc3MiLCJsZWF2ZVRvQ2xhc3MiLCJsZWF2ZUFjdGl2ZUNsYXNzIiwiJGkiLCJ4aSIsIkNpIiwia2kiLCJBaSIsIlNpIiwiT2kiLCJvbnRyYW5zaXRpb25lbmQiLCJvbndlYmtpdHRyYW5zaXRpb25lbmQiLCJvbmFuaW1hdGlvbmVuZCIsIm9ud2Via2l0YW5pbWF0aW9uZW5kIiwiVGkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJFaSIsIklpIiwiamkiLCJMaSIsIk1pIiwicHJvcENvdW50IiwiTmkiLCJnZXRDb21wdXRlZFN0eWxlIiwiRGkiLCJoYXNUcmFuc2Zvcm0iLCJQaSIsIkZpIiwiX2xlYXZlQ2IiLCJjYW5jZWxsZWQiLCJ0cmFuc2l0aW9uIiwiX2VudGVyQ2IiLCJub2RlVHlwZSIsImFwcGVhckNsYXNzIiwiYXBwZWFyVG9DbGFzcyIsImFwcGVhckFjdGl2ZUNsYXNzIiwiYmVmb3JlRW50ZXIiLCJlbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiZHVyYXRpb24iLCJCaSIsInNob3ciLCJfcGVuZGluZyIsIkhpIiwiUmkiLCJiZWZvcmVMZWF2ZSIsImxlYXZlIiwiYWZ0ZXJMZWF2ZSIsImxlYXZlQ2FuY2VsbGVkIiwiZGVsYXlMZWF2ZSIsIlVpIiwiemkiLCJtb2R1bGVzIiwibm9kZU9wcyIsImFjdGl2YXRlIiwicGVuZGluZ0luc2VydCIsInBvc3RwYXRjaCIsImhhc0NoaWxkTm9kZXMiLCJoYXNBdHRyaWJ1dGUiLCJ2bW9kZWwiLCJYaSIsIlZpIiwiX3ZPcHRpb25zIiwiS2kiLCJXaSIsIlppIiwiR2kiLCJzb21lIiwicWkiLCJKaSIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJZaSIsIlFpIiwiX192T3JpZ2luYWxEaXNwbGF5IiwiZGlzcGxheSIsInVuYmluZCIsImVvIiwibW9kZSIsInRvIiwibm8iLCJybyIsImlvIiwib28iLCJhbyIsIl9sZWF2aW5nIiwic28iLCJtb3ZlQ2xhc3MiLCJjbyIsIl9tb3ZlQ2IiLCJsbyIsIm5ld1BvcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInVvIiwicG9zIiwibGVmdCIsInRvcCIsIm1vdmVkIiwidHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZm8iLCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkdyb3VwIiwiYmVmb3JlTW91bnQiLCJrZXB0IiwicHJldkNoaWxkcmVuIiwicmVtb3ZlZCIsInVwZGF0ZWQiLCJoYXNNb3ZlIiwiX3JlZmxvdyIsImJvZHkiLCJvZmZzZXRIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsImNvbmZpZyIsIkhUTUxVbmtub3duRWxlbWVudCIsIkhUTUxFbGVtZW50IiwicG8iLCJ2byIsImhvIiwibW8iLCJ5byIsInN0YXRpY0tleXMiLCJ0cmFuc2Zvcm1Ob2RlIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSIsImdvIiwic3R5bGVCaW5kaW5nIiwiYm8iLCJ3byIsIiRvIiwieG8iLCJDbyIsImtvIiwiQW8iLCJTbyIsIk9vIiwiVG8iLCJFbyIsIklvIiwiam8iLCJMbyIsIk5vIiwiTW8iLCJEbyIsIlBvIiwiRm8iLCJSbyIsIkhvIiwiQm8iLCJVbyIsInpvIiwiVm8iLCJLbyIsIkpvIiwicW8iLCJXbyIsIlpvIiwiR28iLCJYbyIsIllvIiwiUW8iLCJlYSIsInRhIiwibmEiLCJyYSIsImlhIiwib2EiLCJhYSIsInNhIiwiY2EiLCJ2YSIsInJhd0F0dHJzTWFwIiwibGEiLCJzbG90U2NvcGUiLCJzbG90VGFyZ2V0Iiwic2xvdFRhcmdldER5bmFtaWMiLCJkYSIsInNsb3ROYW1lIiwiaGFzQmluZGluZ3MiLCJwYSIsImNhbWVsIiwidWEiLCJhbGlhcyIsIml0ZXJhdG9yMSIsIml0ZXJhdG9yMiIsImZhIiwiaWZDb25kaXRpb25zIiwiaGEiLCJtYSIsInlhIiwiZ2EiLCJfYSIsImJhIiwicHJlVHJhbnNmb3JtTm9kZSIsInByb2Nlc3NlZCIsImJsb2NrIiwiZWxzZWlmIiwid2EiLCJleHBlY3RIVE1MIiwiaHRtbCIsImlzUHJlVGFnIiwiaXNVbmFyeVRhZyIsImNhbkJlTGVmdE9wZW5UYWciLCJyZWR1Y2UiLCIkYSIsInhhIiwiQ2EiLCJrYSIsIkFhIiwiZXNjIiwidGFiIiwic3BhY2UiLCJ1cCIsImRvd24iLCJTYSIsIk9hIiwiVGEiLCJzdG9wIiwicHJldmVudCIsInNlbGYiLCJjdHJsIiwiYWx0IiwibWV0YSIsIkVhIiwiSWEiLCJqYSIsIkxhIiwid3JhcExpc3RlbmVycyIsIndyYXBEYXRhIiwiY2xvYWsiLCJOYSIsInRyYW5zZm9ybXMiLCJkYXRhR2VuRm5zIiwibWF5YmVDb21wb25lbnQiLCJvbmNlSWQiLCJNYSIsIkRhIiwic3RhdGljUm9vdCIsInN0YXRpY1Byb2Nlc3NlZCIsIlBhIiwib25jZVByb2Nlc3NlZCIsIkZhIiwiZm9yUHJvY2Vzc2VkIiwiSGEiLCJpZlByb2Nlc3NlZCIsIlJhIiwiVmEiLCJxYSIsIkJhIiwic3RhdGljSW5Gb3IiLCJVYSIsInphIiwiS2EiLCJKYSIsIldhIiwiWmEiLCJlcnIiLCJjb2RlIiwiR2EiLCJkZWxpbWl0ZXJzIiwiWGEiLCJZYSIsIlFhIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZSIsImZvcmJpZGRlbiIsImNoYXJzIiwic2hvdWxkS2VlcENvbW1lbnQiLCJjb21tZW50Iiwic3Vic3RyaW5nIiwidW5hcnlTbGFzaCIsInNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiIsInNob3VsZERlY29kZU5ld2xpbmVzIiwibG93ZXJDYXNlZFRhZyIsImNvbW1lbnRzIiwib3V0cHV0U291cmNlUmFuZ2UiLCJwbGFjZWhvbGRlciIsImxhc3RJbmRleCIsImV4ZWMiLCJpbmRleCIsInRva2VucyIsIm9wdGltaXplIiwiYXN0IiwiZXJyb3JzIiwidGlwcyIsImNvbXBpbGUiLCJjb21waWxlVG9GdW5jdGlvbnMiLCJlcyIsInRzIiwicnMiLCJvcyIsImRvY3VtZW50RWxlbWVudCIsInRlbXBsYXRlIiwib3V0ZXJIVE1MIiwic2V0SW1tZWRpYXRlIiwiX2lkIiwiX2NsZWFyRm4iLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbG9zZSIsInVucmVmIiwiZW5yb2xsIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsImdldFByb3RvdHlwZU9mIiwicG9zdE1lc3NhZ2UiLCJpbXBvcnRTY3JpcHRzIiwib25tZXNzYWdlIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MSIsInBvcnQyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmFuZG9tIiwiYXR0YWNoRXZlbnQiLCJhcmdzIiwiRXJyb3IiLCJmdW4iLCJhcnJheSIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJwYXRoIiwiY29tcG9zZWRQYXRoIiwiY29udGFpbnMiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiaGVpZ2h0Iiwid2lkdGgiLCJxdWVyeVNlbGVjdG9yQWxsIiwib25DbGlja2F3YXkiLCJjbG9zZU9uQ2xpY2siLCJjbG9zZU9uU2Nyb2xsIiwiaXRlbVNlbGVjdG9yIiwicm9sZSIsImxvY2FsSXRlbVNlbGVjdG9yIiwibWFwSXRlbVNlbGVjdG9yIiwiYmVmb3JlRGVzdHJveSIsInJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXIiLCJhZGRTY3JvbGxFdmVudExpc3RlbmVyIiwicmVzZXREYXRhIiwiZm9jdXNJdGVtIiwiZmluZCIsImZvY3VzIiwiZm9jdXNOZXh0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJnZXRJdGVtcyIsIm9uQ2xpY2siLCJvbktleWRvd24iLCJrZXlDb2RlIiwib3BlbiIsInBvc2l0aW9uTWVudSIsImNsaWVudFkiLCJjbGllbnRYIiwic2V0SXRlbVJvbGVzIiwiaW5uZXJIZWlnaHQiLCJpbm5lcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJrZXlkb3duIiwiY2xpY2siLCJ0YWJpbmRleCJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxDQUFDLFVBQVNBLENBQVQsRUFBV0MsQ0FBWCxFQUFhO0FB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O0FBQS9pRyxLQUEzdEI7O0FBQTR3SHBULEtBQUMsQ0FBQ08sQ0FBRixDQUFJWixDQUFKLEVBQU0sWUFBTixFQUFtQixZQUFVO0FBQUMsYUFBT3NELENBQVA7QUFBUyxLQUF2QztBQUF5QyxHQUF0bG9HLENBQXQ1QixDQUFQO0FBQXMvcEcsQ0FBdHVxRyxDQUFELEMiLCJmaWxlIjoiLi9kaXN0L2pzL3Z1ZS1jb250ZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBuPXQoKTtmb3IodmFyIHIgaW4gbikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtyXT1uW3JdfX0od2luZG93LGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQscil7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sbi5yPWZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9bihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiZcInN0cmluZ1wiIT10eXBlb2YgZSlmb3IodmFyIGkgaW4gZSluLmQocixpLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsaSkpO3JldHVybiByfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LFwiYVwiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPVwiL1wiLG4obi5zPTIpfShbZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDMpfSxmdW5jdGlvbihlLHQpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe1wib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJihuPXdpbmRvdyl9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9big3KX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0LG4pe3ZhciByPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiBhKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBzKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZXx8XCJzeW1ib2xcIj09dHlwZW9mIGV8fFwiYm9vbGVhblwiPT10eXBlb2YgZX1mdW5jdGlvbiBjKGUpe3JldHVybiBudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiB1KGUpe3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1sLmNhbGwoZSl9ZnVuY3Rpb24gZihlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIHQ+PTAmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiBkKGUpe3JldHVybiBvKGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2F0Y2h9ZnVuY3Rpb24gcChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOkFycmF5LmlzQXJyYXkoZSl8fHUoZSkmJmUudG9TdHJpbmc9PT1sP0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKTpTdHJpbmcoZSl9ZnVuY3Rpb24gdihlKXt2YXIgdD1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTih0KT9lOnR9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZS5zcGxpdChcIixcIiksaT0wO2k8ci5sZW5ndGg7aSsrKW5bcltpXV09ITA7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXX06ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19fXZhciBtPWgoXCJzbG90LGNvbXBvbmVudFwiLCEwKSx5PWgoXCJrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpc1wiKTtmdW5jdGlvbiBnKGUsdCl7aWYoZS5sZW5ndGgpe3ZhciBuPWUuaW5kZXhPZih0KTtpZihuPi0xKXJldHVybiBlLnNwbGljZShuLDEpfX12YXIgXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGIoZSx0KXtyZXR1cm4gXy5jYWxsKGUsdCl9ZnVuY3Rpb24gdyhlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtuXXx8KHRbbl09ZShuKSl9fXZhciAkPS8tKFxcdykvZyx4PXcoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgkLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOlwiXCJ9KX0pLEM9dyhmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfSksaz0vXFxCKFtBLVpdKS9nLEE9dyhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGssXCItJDFcIikudG9Mb3dlckNhc2UoKX0pLFM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5iaW5kKHQpfTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj9yPjE/ZS5hcHBseSh0LGFyZ3VtZW50cyk6ZS5jYWxsKHQsbik6ZS5jYWxsKHQpfXJldHVybiBuLl9sZW5ndGg9ZS5sZW5ndGgsbn07ZnVuY3Rpb24gTyhlLHQpe3Q9dHx8MDtmb3IodmFyIG49ZS5sZW5ndGgtdCxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09ZVtuK3RdO3JldHVybiByfWZ1bmN0aW9uIFQoZSx0KXtmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gRShlKXtmb3IodmFyIHQ9e30sbj0wO248ZS5sZW5ndGg7bisrKWVbbl0mJlQodCxlW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBJKGUsdCxuKXt9dmFyIGo9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExfSxMPWZ1bmN0aW9uKGUpe3JldHVybiBlfTtmdW5jdGlvbiBOKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7dmFyIG49YyhlKSxyPWModCk7aWYoIW58fCFyKXJldHVybiFuJiYhciYmU3RyaW5nKGUpPT09U3RyaW5nKHQpO3RyeXt2YXIgaT1BcnJheS5pc0FycmF5KGUpLG89QXJyYXkuaXNBcnJheSh0KTtpZihpJiZvKXJldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoJiZlLmV2ZXJ5KGZ1bmN0aW9uKGUsbil7cmV0dXJuIE4oZSx0W25dKX0pO2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTtpZihpfHxvKXJldHVybiExO3ZhciBhPU9iamVjdC5rZXlzKGUpLHM9T2JqZWN0LmtleXModCk7cmV0dXJuIGEubGVuZ3RoPT09cy5sZW5ndGgmJmEuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIE4oZVtuXSx0W25dKX0pfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBNKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoTihlW25dLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEQoZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgUD1cImRhdGEtc2VydmVyLXJlbmRlcmVkXCIsRj1bXCJjb21wb25lbnRcIixcImRpcmVjdGl2ZVwiLFwiZmlsdGVyXCJdLFI9W1wiYmVmb3JlQ3JlYXRlXCIsXCJjcmVhdGVkXCIsXCJiZWZvcmVNb3VudFwiLFwibW91bnRlZFwiLFwiYmVmb3JlVXBkYXRlXCIsXCJ1cGRhdGVkXCIsXCJiZWZvcmVEZXN0cm95XCIsXCJkZXN0cm95ZWRcIixcImFjdGl2YXRlZFwiLFwiZGVhY3RpdmF0ZWRcIixcImVycm9yQ2FwdHVyZWRcIixcInNlcnZlclByZWZldGNoXCJdLEg9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpqLGlzUmVzZXJ2ZWRBdHRyOmosaXNVbmtub3duRWxlbWVudDpqLGdldFRhZ05hbWVzcGFjZTpJLHBhcnNlUGxhdGZvcm1UYWdOYW1lOkwsbXVzdFVzZVByb3A6aixhc3luYzohMCxfbGlmZWN5Y2xlSG9va3M6Un0sQj0vYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87ZnVuY3Rpb24gVShlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciB6LFY9bmV3IFJlZ0V4cChcIlteXCIrQi5zb3VyY2UrXCIuJF9cXFxcZF1cIiksSz1cIl9fcHJvdG9fX1wiaW57fSxKPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cscT1cInVuZGVmaW5lZFwiIT10eXBlb2YgV1hFbnZpcm9ubWVudCYmISFXWEVudmlyb25tZW50LnBsYXRmb3JtLFc9cSYmV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpLFo9SiYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxHPVomJi9tc2llfHRyaWRlbnQvLnRlc3QoWiksWD1aJiZaLmluZGV4T2YoXCJtc2llIDkuMFwiKT4wLFk9WiYmWi5pbmRleE9mKFwiZWRnZS9cIik+MCxRPShaJiZaLmluZGV4T2YoXCJhbmRyb2lkXCIpLFomJi9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChaKXx8XCJpb3NcIj09PVcpLGVlPShaJiYvY2hyb21lXFwvXFxkKy8udGVzdChaKSxaJiYvcGhhbnRvbWpzLy50ZXN0KFopLFomJloubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSksdGU9e30ud2F0Y2gsbmU9ITE7aWYoSil0cnl7dmFyIHJlPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7bmU9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0LXBhc3NpdmVcIixudWxsLHJlKX1jYXRjaChyKXt9dmFyIGllPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXomJih6PSFKJiYhcSYmdm9pZCAwIT09dCYmdC5wcm9jZXNzJiZcInNlcnZlclwiPT09dC5wcm9jZXNzLmVudi5WVUVfRU5WKSx6fSxvZT1KJiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiBhZShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYvbmF0aXZlIGNvZGUvLnRlc3QoZS50b1N0cmluZygpKX12YXIgc2UsY2U9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmYWUoU3ltYm9sKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlZmxlY3QmJmFlKFJlZmxlY3Qub3duS2V5cyk7c2U9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldCYmYWUoU2V0KT9TZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09dGhpcy5zZXRbZV19LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNldFtlXT0hMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNldD1PYmplY3QuY3JlYXRlKG51bGwpfSxlfSgpO3ZhciBsZT1JLHVlPTAsZmU9ZnVuY3Rpb24oKXt0aGlzLmlkPXVlKyssdGhpcy5zdWJzPVtdfTtmZS5wcm90b3R5cGUuYWRkU3ViPWZ1bmN0aW9uKGUpe3RoaXMuc3Vicy5wdXNoKGUpfSxmZS5wcm90b3R5cGUucmVtb3ZlU3ViPWZ1bmN0aW9uKGUpe2codGhpcy5zdWJzLGUpfSxmZS5wcm90b3R5cGUuZGVwZW5kPWZ1bmN0aW9uKCl7ZmUudGFyZ2V0JiZmZS50YXJnZXQuYWRkRGVwKHRoaXMpfSxmZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3Vicy5zbGljZSgpLHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspZVt0XS51cGRhdGUoKX0sZmUudGFyZ2V0PW51bGw7dmFyIGRlPVtdO2Z1bmN0aW9uIHBlKGUpe2RlLnB1c2goZSksZmUudGFyZ2V0PWV9ZnVuY3Rpb24gdmUoKXtkZS5wb3AoKSxmZS50YXJnZXQ9ZGVbZGUubGVuZ3RoLTFdfXZhciBoZT1mdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3RoaXMudGFnPWUsdGhpcy5kYXRhPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMudGV4dD1yLHRoaXMuZWxtPWksdGhpcy5ucz12b2lkIDAsdGhpcy5jb250ZXh0PW8sdGhpcy5mbkNvbnRleHQ9dm9pZCAwLHRoaXMuZm5PcHRpb25zPXZvaWQgMCx0aGlzLmZuU2NvcGVJZD12b2lkIDAsdGhpcy5rZXk9dCYmdC5rZXksdGhpcy5jb21wb25lbnRPcHRpb25zPWEsdGhpcy5jb21wb25lbnRJbnN0YW5jZT12b2lkIDAsdGhpcy5wYXJlbnQ9dm9pZCAwLHRoaXMucmF3PSExLHRoaXMuaXNTdGF0aWM9ITEsdGhpcy5pc1Jvb3RJbnNlcnQ9ITAsdGhpcy5pc0NvbW1lbnQ9ITEsdGhpcy5pc0Nsb25lZD0hMSx0aGlzLmlzT25jZT0hMSx0aGlzLmFzeW5jRmFjdG9yeT1zLHRoaXMuYXN5bmNNZXRhPXZvaWQgMCx0aGlzLmlzQXN5bmNQbGFjZWhvbGRlcj0hMX0sbWU9e2NoaWxkOntjb25maWd1cmFibGU6ITB9fTttZS5jaGlsZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaGUucHJvdG90eXBlLG1lKTt2YXIgeWU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9XCJcIik7dmFyIHQ9bmV3IGhlO3JldHVybiB0LnRleHQ9ZSx0LmlzQ29tbWVudD0hMCx0fTtmdW5jdGlvbiBnZShlKXtyZXR1cm4gbmV3IGhlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLFN0cmluZyhlKSl9ZnVuY3Rpb24gX2UoZSl7dmFyIHQ9bmV3IGhlKGUudGFnLGUuZGF0YSxlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNsaWNlKCksZS50ZXh0LGUuZWxtLGUuY29udGV4dCxlLmNvbXBvbmVudE9wdGlvbnMsZS5hc3luY0ZhY3RvcnkpO3JldHVybiB0Lm5zPWUubnMsdC5pc1N0YXRpYz1lLmlzU3RhdGljLHQua2V5PWUua2V5LHQuaXNDb21tZW50PWUuaXNDb21tZW50LHQuZm5Db250ZXh0PWUuZm5Db250ZXh0LHQuZm5PcHRpb25zPWUuZm5PcHRpb25zLHQuZm5TY29wZUlkPWUuZm5TY29wZUlkLHQuYXN5bmNNZXRhPWUuYXN5bmNNZXRhLHQuaXNDbG9uZWQ9ITAsdH12YXIgYmU9QXJyYXkucHJvdG90eXBlLHdlPU9iamVjdC5jcmVhdGUoYmUpO1tcInB1c2hcIixcInBvcFwiLFwic2hpZnRcIixcInVuc2hpZnRcIixcInNwbGljZVwiLFwic29ydFwiLFwicmV2ZXJzZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWJlW2VdO1Uod2UsZSxmdW5jdGlvbigpe2Zvcih2YXIgbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgaSxvPXQuYXBwbHkodGhpcyxuKSxhPXRoaXMuX19vYl9fO3N3aXRjaChlKXtjYXNlXCJwdXNoXCI6Y2FzZVwidW5zaGlmdFwiOmk9bjticmVhaztjYXNlXCJzcGxpY2VcIjppPW4uc2xpY2UoMil9cmV0dXJuIGkmJmEub2JzZXJ2ZUFycmF5KGkpLGEuZGVwLm5vdGlmeSgpLG99KX0pO3ZhciAkZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3ZSkseGU9ITA7ZnVuY3Rpb24gQ2UoZSl7eGU9ZX12YXIga2U9ZnVuY3Rpb24oZSl7dmFyIHQ7dGhpcy52YWx1ZT1lLHRoaXMuZGVwPW5ldyBmZSx0aGlzLnZtQ291bnQ9MCxVKGUsXCJfX29iX19cIix0aGlzKSxBcnJheS5pc0FycmF5KGUpPyhLPyh0PXdlLGUuX19wcm90b19fPXQpOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07VShlLG8sdFtvXSl9fShlLHdlLCRlKSx0aGlzLm9ic2VydmVBcnJheShlKSk6dGhpcy53YWxrKGUpfTtmdW5jdGlvbiBBZShlLHQpe3ZhciBuO2lmKGMoZSkmJiEoZSBpbnN0YW5jZW9mIGhlKSlyZXR1cm4gYihlLFwiX19vYl9fXCIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIGtlP249ZS5fX29iX186eGUmJiFpZSgpJiYoQXJyYXkuaXNBcnJheShlKXx8dShlKSkmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJiFlLl9pc1Z1ZSYmKG49bmV3IGtlKGUpKSx0JiZuJiZuLnZtQ291bnQrKyxufWZ1bmN0aW9uIFNlKGUsdCxuLHIsaSl7dmFyIG89bmV3IGZlLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpO2lmKCFhfHwhMSE9PWEuY29uZmlndXJhYmxlKXt2YXIgcz1hJiZhLmdldCxjPWEmJmEuc2V0O3MmJiFjfHwyIT09YXJndW1lbnRzLmxlbmd0aHx8KG49ZVt0XSk7dmFyIGw9IWkmJkFlKG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PXM/cy5jYWxsKGUpOm47cmV0dXJuIGZlLnRhcmdldCYmKG8uZGVwZW5kKCksbCYmKGwuZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkodCkmJmZ1bmN0aW9uIGUodCl7Zm9yKHZhciBuPXZvaWQgMCxyPTAsaT10Lmxlbmd0aDtyPGk7cisrKShuPXRbcl0pJiZuLl9fb2JfXyYmbi5fX29iX18uZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkobikmJmUobil9KHQpKSksdH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciByPXM/cy5jYWxsKGUpOm47dD09PXJ8fHQhPXQmJnIhPXJ8fHMmJiFjfHwoYz9jLmNhbGwoZSx0KTpuPXQsbD0haSYmQWUodCksby5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIE9lKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiZmKHQpKXJldHVybiBlLmxlbmd0aD1NYXRoLm1heChlLmxlbmd0aCx0KSxlLnNwbGljZSh0LDEsbiksbjtpZih0IGluIGUmJiEodCBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gZVt0XT1uLG47dmFyIHI9ZS5fX29iX187cmV0dXJuIGUuX2lzVnVlfHxyJiZyLnZtQ291bnQ/bjpyPyhTZShyLnZhbHVlLHQsbiksci5kZXAubm90aWZ5KCksbik6KGVbdF09bixuKX1mdW5jdGlvbiBUZShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmYodCkpZS5zcGxpY2UodCwxKTtlbHNle3ZhciBuPWUuX19vYl9fO2UuX2lzVnVlfHxuJiZuLnZtQ291bnR8fGIoZSx0KSYmKGRlbGV0ZSBlW3RdLG4mJm4uZGVwLm5vdGlmeSgpKX19a2UucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylTZShlLHRbbl0pfSxrZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKylBZShlW3RdKX07dmFyIEVlPUgub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIEllKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxvPWNlP1JlZmxlY3Qub3duS2V5cyh0KTpPYmplY3Qua2V5cyh0KSxhPTA7YTxvLmxlbmd0aDthKyspXCJfX29iX19cIiE9PShuPW9bYV0pJiYocj1lW25dLGk9dFtuXSxiKGUsbik/ciE9PWkmJnUocikmJnUoaSkmJkllKHIsaSk6T2UoZSxuLGkpKTtyZXR1cm4gZX1mdW5jdGlvbiBqZShlLHQsbil7cmV0dXJuIG4/ZnVuY3Rpb24oKXt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QuY2FsbChuLG4pOnQsaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbChuLG4pOmU7cmV0dXJuIHI/SWUocixpKTppfTp0P2U/ZnVuY3Rpb24oKXtyZXR1cm4gSWUoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwodGhpcyx0aGlzKTp0LFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZS5jYWxsKHRoaXMsdGhpcyk6ZSl9OnQ6ZX1mdW5jdGlvbiBMZShlLHQpe3ZhciBuPXQ/ZT9lLmNvbmNhdCh0KTpBcnJheS5pc0FycmF5KHQpP3Q6W3RdOmU7cmV0dXJuIG4/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyktMT09PXQuaW5kZXhPZihlW25dKSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fShuKTpufWZ1bmN0aW9uIE5lKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoZXx8bnVsbCk7cmV0dXJuIHQ/VChpLHQpOml9RWUuZGF0YT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/amUoZSx0LG4pOnQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTpqZShlLHQpfSxSLmZvckVhY2goZnVuY3Rpb24oZSl7RWVbZV09TGV9KSxGLmZvckVhY2goZnVuY3Rpb24oZSl7RWVbZStcInNcIl09TmV9KSxFZS53YXRjaD1mdW5jdGlvbihlLHQsbixyKXtpZihlPT09dGUmJihlPXZvaWQgMCksdD09PXRlJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciBpPXt9O2Zvcih2YXIgbyBpbiBUKGksZSksdCl7dmFyIGE9aVtvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSksaVtvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIGl9LEVlLnByb3BzPUVlLm1ldGhvZHM9RWUuaW5qZWN0PUVlLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXJldHVybiB0O3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIFQoaSxlKSx0JiZUKGksdCksaX0sRWUucHJvdmlkZT1qZTt2YXIgTWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIERlKGUsdCxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10Lm9wdGlvbnMpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5wcm9wcztpZihuKXt2YXIgcixpLG89e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3Iocj1uLmxlbmd0aDtyLS07KVwic3RyaW5nXCI9PXR5cGVvZihpPW5bcl0pJiYob1t4KGkpXT17dHlwZTpudWxsfSk7ZWxzZSBpZih1KG4pKWZvcih2YXIgYSBpbiBuKWk9blthXSxvW3goYSldPXUoaSk/aTp7dHlwZTppfTtlLnByb3BzPW99fSh0KSxmdW5jdGlvbihlLHQpe3ZhciBuPWUuaW5qZWN0O2lmKG4pe3ZhciByPWUuaW5qZWN0PXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspcltuW2ldXT17ZnJvbTpuW2ldfTtlbHNlIGlmKHUobikpZm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107cltvXT11KGEpP1Qoe2Zyb206b30sYSk6e2Zyb206YX19fX0odCksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXJlY3RpdmVzO2lmKHQpZm9yKHZhciBuIGluIHQpe3ZhciByPXRbbl07XCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX0odCksIXQuX2Jhc2UmJih0LmV4dGVuZHMmJihlPURlKGUsdC5leHRlbmRzLG4pKSx0Lm1peGlucykpZm9yKHZhciByPTAsaT10Lm1peGlucy5sZW5ndGg7cjxpO3IrKyllPURlKGUsdC5taXhpbnNbcl0sbik7dmFyIG8sYT17fTtmb3IobyBpbiBlKXMobyk7Zm9yKG8gaW4gdCliKGUsbyl8fHMobyk7ZnVuY3Rpb24gcyhyKXt2YXIgaT1FZVtyXXx8TWU7YVtyXT1pKGVbcl0sdFtyXSxuLHIpfXJldHVybiBhfWZ1bmN0aW9uIFBlKGUsdCxuLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXt2YXIgaT1lW3RdO2lmKGIoaSxuKSlyZXR1cm4gaVtuXTt2YXIgbz14KG4pO2lmKGIoaSxvKSlyZXR1cm4gaVtvXTt2YXIgYT1DKG8pO3JldHVybiBiKGksYSk/aVthXTppW25dfHxpW29dfHxpW2FdfX1mdW5jdGlvbiBGZShlLHQsbixyKXt2YXIgaT10W2VdLG89IWIobixlKSxhPW5bZV0scz1CZShCb29sZWFuLGkudHlwZSk7aWYocz4tMSlpZihvJiYhYihpLFwiZGVmYXVsdFwiKSlhPSExO2Vsc2UgaWYoXCJcIj09PWF8fGE9PT1BKGUpKXt2YXIgYz1CZShTdHJpbmcsaS50eXBlKTsoYzwwfHxzPGMpJiYoYT0hMCl9aWYodm9pZCAwPT09YSl7YT1mdW5jdGlvbihlLHQsbil7aWYoYih0LFwiZGVmYXVsdFwiKSl7dmFyIHI9dC5kZWZhdWx0O3JldHVybiBlJiZlLiRvcHRpb25zLnByb3BzRGF0YSYmdm9pZCAwPT09ZS4kb3B0aW9ucy5wcm9wc0RhdGFbbl0mJnZvaWQgMCE9PWUuX3Byb3BzW25dP2UuX3Byb3BzW25dOlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJlwiRnVuY3Rpb25cIiE9PVJlKHQudHlwZSk/ci5jYWxsKGUpOnJ9fShyLGksZSk7dmFyIGw9eGU7Q2UoITApLEFlKGEpLENlKGwpfXJldHVybiBhfWZ1bmN0aW9uIFJlKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxccypmdW5jdGlvbiAoXFx3KykvKTtyZXR1cm4gdD90WzFdOlwiXCJ9ZnVuY3Rpb24gSGUoZSx0KXtyZXR1cm4gUmUoZSk9PT1SZSh0KX1mdW5jdGlvbiBCZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBIZSh0LGUpPzA6LTE7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKEhlKHRbbl0sZSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gVWUoZSx0LG4pe3BlKCk7dHJ5e2lmKHQpZm9yKHZhciByPXQ7cj1yLiRwYXJlbnQ7KXt2YXIgaT1yLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7aWYoaSlmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl0cnl7aWYoITE9PT1pW29dLmNhbGwocixlLHQsbikpcmV0dXJufWNhdGNoKGUpe1ZlKGUscixcImVycm9yQ2FwdHVyZWQgaG9va1wiKX19VmUoZSx0LG4pfWZpbmFsbHl7dmUoKX19ZnVuY3Rpb24gemUoZSx0LG4scixpKXt2YXIgbzt0cnl7KG89bj9lLmFwcGx5KHQsbik6ZS5jYWxsKHQpKSYmIW8uX2lzVnVlJiZkKG8pJiYhby5faGFuZGxlZCYmKG8uY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIFVlKGUscixpK1wiIChQcm9taXNlL2FzeW5jKVwiKX0pLG8uX2hhbmRsZWQ9ITApfWNhdGNoKGUpe1VlKGUscixpKX1yZXR1cm4gb31mdW5jdGlvbiBWZShlLHQsbil7aWYoSC5lcnJvckhhbmRsZXIpdHJ5e3JldHVybiBILmVycm9ySGFuZGxlci5jYWxsKG51bGwsZSx0LG4pfWNhdGNoKHQpe3QhPT1lJiZLZSh0LG51bGwsXCJjb25maWcuZXJyb3JIYW5kbGVyXCIpfUtlKGUsdCxuKX1mdW5jdGlvbiBLZShlLHQsbil7aWYoIUomJiFxfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgY29uc29sZSl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSl9dmFyIEplLHFlPSExLFdlPVtdLFplPSExO2Z1bmN0aW9uIEdlKCl7WmU9ITE7dmFyIGU9V2Uuc2xpY2UoMCk7V2UubGVuZ3RoPTA7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfWlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlJiZhZShQcm9taXNlKSl7dmFyIFhlPVByb21pc2UucmVzb2x2ZSgpO0plPWZ1bmN0aW9uKCl7WGUudGhlbihHZSksUSYmc2V0VGltZW91dChJKX0scWU9ITB9ZWxzZSBpZihHfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgTXV0YXRpb25PYnNlcnZlcnx8IWFlKE11dGF0aW9uT2JzZXJ2ZXIpJiZcIltvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXVwiIT09TXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpKUplPXZvaWQgMCE9PW4mJmFlKG4pP2Z1bmN0aW9uKCl7bihHZSl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dChHZSwwKX07ZWxzZXt2YXIgWWU9MSxRZT1uZXcgTXV0YXRpb25PYnNlcnZlcihHZSksZXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKFllKSk7UWUub2JzZXJ2ZShldCx7Y2hhcmFjdGVyRGF0YTohMH0pLEplPWZ1bmN0aW9uKCl7WWU9KFllKzEpJTIsZXQuZGF0YT1TdHJpbmcoWWUpfSxxZT0hMH1mdW5jdGlvbiB0dChlLHQpe3ZhciBuO2lmKFdlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7VWUoZSx0LFwibmV4dFRpY2tcIil9ZWxzZSBuJiZuKHQpfSksWmV8fChaZT0hMCxKZSgpKSwhZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2UpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe249ZX0pfXZhciBudD1uZXcgc2U7ZnVuY3Rpb24gcnQoZSl7IWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpLG89QXJyYXkuaXNBcnJheSh0KTtpZighKCFvJiYhYyh0KXx8T2JqZWN0LmlzRnJvemVuKHQpfHx0IGluc3RhbmNlb2YgaGUpKXtpZih0Ll9fb2JfXyl7dmFyIGE9dC5fX29iX18uZGVwLmlkO2lmKG4uaGFzKGEpKXJldHVybjtuLmFkZChhKX1pZihvKWZvcihyPXQubGVuZ3RoO3ItLTspZSh0W3JdLG4pO2Vsc2UgZm9yKHI9KGk9T2JqZWN0LmtleXModCkpLmxlbmd0aDtyLS07KWUodFtpW3JdXSxuKX19KGUsbnQpLG50LmNsZWFyKCl9dmFyIGl0PXcoZnVuY3Rpb24oZSl7dmFyIHQ9XCImXCI9PT1lLmNoYXJBdCgwKSxuPVwiflwiPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPVwiIVwiPT09KGU9bj9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKTtyZXR1cm57bmFtZTplPXI/ZS5zbGljZSgxKTplLG9uY2U6bixjYXB0dXJlOnIscGFzc2l2ZTp0fX0pO2Z1bmN0aW9uIG90KGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPWFyZ3VtZW50cyxyPW4uZm5zO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiB6ZShyLG51bGwsYXJndW1lbnRzLHQsXCJ2LW9uIGhhbmRsZXJcIik7Zm9yKHZhciBpPXIuc2xpY2UoKSxvPTA7bzxpLmxlbmd0aDtvKyspemUoaVtvXSxudWxsLGUsdCxcInYtb24gaGFuZGxlclwiKX1yZXR1cm4gbi5mbnM9ZSxufWZ1bmN0aW9uIGF0KGUsdCxuLHIsbyxzKXt2YXIgYyxsLHUsZjtmb3IoYyBpbiBlKWw9ZVtjXSx1PXRbY10sZj1pdChjKSxpKGwpfHwoaSh1KT8oaShsLmZucykmJihsPWVbY109b3QobCxzKSksYShmLm9uY2UpJiYobD1lW2NdPW8oZi5uYW1lLGwsZi5jYXB0dXJlKSksbihmLm5hbWUsbCxmLmNhcHR1cmUsZi5wYXNzaXZlLGYucGFyYW1zKSk6bCE9PXUmJih1LmZucz1sLGVbY109dSkpO2ZvcihjIGluIHQpaShlW2NdKSYmcigoZj1pdChjKSkubmFtZSx0W2NdLGYuY2FwdHVyZSl9ZnVuY3Rpb24gc3QoZSx0LG4pe3ZhciByO2UgaW5zdGFuY2VvZiBoZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBzPWVbdF07ZnVuY3Rpb24gYygpe24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGcoci5mbnMsYyl9aShzKT9yPW90KFtjXSk6byhzLmZucykmJmEocy5tZXJnZWQpPyhyPXMpLmZucy5wdXNoKGMpOnI9b3QoW3MsY10pLHIubWVyZ2VkPSEwLGVbdF09cn1mdW5jdGlvbiBjdChlLHQsbixyLGkpe2lmKG8odCkpe2lmKGIodCxuKSlyZXR1cm4gZVtuXT10W25dLGl8fGRlbGV0ZSB0W25dLCEwO2lmKGIodCxyKSlyZXR1cm4gZVtuXT10W3JdLGl8fGRlbGV0ZSB0W3JdLCEwfXJldHVybiExfWZ1bmN0aW9uIGx0KGUpe3JldHVybiBzKGUpP1tnZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKHQsbil7dmFyIHIsYyxsLHUsZj1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWkoYz10W3JdKXx8XCJib29sZWFuXCI9PXR5cGVvZiBjfHwodT1mW2w9Zi5sZW5ndGgtMV0sQXJyYXkuaXNBcnJheShjKT9jLmxlbmd0aD4wJiYodXQoKGM9ZShjLChufHxcIlwiKStcIl9cIityKSlbMF0pJiZ1dCh1KSYmKGZbbF09Z2UodS50ZXh0K2NbMF0udGV4dCksYy5zaGlmdCgpKSxmLnB1c2guYXBwbHkoZixjKSk6cyhjKT91dCh1KT9mW2xdPWdlKHUudGV4dCtjKTpcIlwiIT09YyYmZi5wdXNoKGdlKGMpKTp1dChjKSYmdXQodSk/ZltsXT1nZSh1LnRleHQrYy50ZXh0KTooYSh0Ll9pc1ZMaXN0KSYmbyhjLnRhZykmJmkoYy5rZXkpJiZvKG4pJiYoYy5rZXk9XCJfX3ZsaXN0XCIrbitcIl9cIityK1wiX19cIiksZi5wdXNoKGMpKSk7cmV0dXJuIGZ9KGUpOnZvaWQgMH1mdW5jdGlvbiB1dChlKXtyZXR1cm4gbyhlKSYmbyhlLnRleHQpJiYhMT09PWUuaXNDb21tZW50fWZ1bmN0aW9uIGZ0KGUsdCl7aWYoZSl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1jZT9SZWZsZWN0Lm93bktleXMoZSk6T2JqZWN0LmtleXMoZSksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKFwiX19vYl9fXCIhPT1vKXtmb3IodmFyIGE9ZVtvXS5mcm9tLHM9dDtzOyl7aWYocy5fcHJvdmlkZWQmJmIocy5fcHJvdmlkZWQsYSkpe25bb109cy5fcHJvdmlkZWRbYV07YnJlYWt9cz1zLiRwYXJlbnR9aWYoIXMmJlwiZGVmYXVsdFwiaW4gZVtvXSl7dmFyIGM9ZVtvXS5kZWZhdWx0O25bb109XCJmdW5jdGlvblwiPT10eXBlb2YgYz9jLmNhbGwodCk6Y319fXJldHVybiBufX1mdW5jdGlvbiBkdChlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJue307Zm9yKHZhciBuPXt9LHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWVbcl0sYT1vLmRhdGE7aWYoYSYmYS5hdHRycyYmYS5hdHRycy5zbG90JiZkZWxldGUgYS5hdHRycy5zbG90LG8uY29udGV4dCE9PXQmJm8uZm5Db250ZXh0IT09dHx8IWF8fG51bGw9PWEuc2xvdCkobi5kZWZhdWx0fHwobi5kZWZhdWx0PVtdKSkucHVzaChvKTtlbHNle3ZhciBzPWEuc2xvdCxjPW5bc118fChuW3NdPVtdKTtcInRlbXBsYXRlXCI9PT1vLnRhZz9jLnB1c2guYXBwbHkoYyxvLmNoaWxkcmVufHxbXSk6Yy5wdXNoKG8pfX1mb3IodmFyIGwgaW4gbiluW2xdLmV2ZXJ5KHB0KSYmZGVsZXRlIG5bbF07cmV0dXJuIG59ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIGUuaXNDb21tZW50JiYhZS5hc3luY0ZhY3Rvcnl8fFwiIFwiPT09ZS50ZXh0fWZ1bmN0aW9uIHZ0KGUsdCxuKXt2YXIgaSxvPU9iamVjdC5rZXlzKHQpLmxlbmd0aD4wLGE9ZT8hIWUuJHN0YWJsZTohbyxzPWUmJmUuJGtleTtpZihlKXtpZihlLl9ub3JtYWxpemVkKXJldHVybiBlLl9ub3JtYWxpemVkO2lmKGEmJm4mJm4hPT1yJiZzPT09bi4ka2V5JiYhbyYmIW4uJGhhc05vcm1hbClyZXR1cm4gbjtmb3IodmFyIGMgaW4gaT17fSxlKWVbY10mJlwiJFwiIT09Y1swXSYmKGlbY109aHQodCxjLGVbY10pKX1lbHNlIGk9e307Zm9yKHZhciBsIGluIHQpbCBpbiBpfHwoaVtsXT1tdCh0LGwpKTtyZXR1cm4gZSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmKGUuX25vcm1hbGl6ZWQ9aSksVShpLFwiJHN0YWJsZVwiLGEpLFUoaSxcIiRrZXlcIixzKSxVKGksXCIkaGFzTm9ybWFsXCIsbyksaX1mdW5jdGlvbiBodChlLHQsbil7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoP24uYXBwbHkobnVsbCxhcmd1bWVudHMpOm4oe30pO3JldHVybihlPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKT9bZV06bHQoZSkpJiYoMD09PWUubGVuZ3RofHwxPT09ZS5sZW5ndGgmJmVbMF0uaXNDb21tZW50KT92b2lkIDA6ZX07cmV0dXJuIG4ucHJveHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldDpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn1mdW5jdGlvbiBtdChlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlW3RdfX1mdW5jdGlvbiB5dChlLHQpe3ZhciBuLHIsaSxhLHM7aWYoQXJyYXkuaXNBcnJheShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGUpZm9yKG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW5bcl09dChlW3JdLHIpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKG49bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09dChyKzEscik7ZWxzZSBpZihjKGUpKWlmKGNlJiZlW1N5bWJvbC5pdGVyYXRvcl0pe249W107Zm9yKHZhciBsPWVbU3ltYm9sLml0ZXJhdG9yXSgpLHU9bC5uZXh0KCk7IXUuZG9uZTspbi5wdXNoKHQodS52YWx1ZSxuLmxlbmd0aCkpLHU9bC5uZXh0KCl9ZWxzZSBmb3IoYT1PYmplY3Qua2V5cyhlKSxuPW5ldyBBcnJheShhLmxlbmd0aCkscj0wLGk9YS5sZW5ndGg7cjxpO3IrKylzPWFbcl0sbltyXT10KGVbc10scyxyKTtyZXR1cm4gbyhuKXx8KG49W10pLG4uX2lzVkxpc3Q9ITAsbn1mdW5jdGlvbiBndChlLHQsbixyKXt2YXIgaSxvPXRoaXMuJHNjb3BlZFNsb3RzW2VdO28/KG49bnx8e30sciYmKG49VChUKHt9LHIpLG4pKSxpPW8obil8fHQpOmk9dGhpcy4kc2xvdHNbZV18fHQ7dmFyIGE9biYmbi5zbG90O3JldHVybiBhP3RoaXMuJGNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiLHtzbG90OmF9LGkpOml9ZnVuY3Rpb24gX3QoZSl7cmV0dXJuIFBlKHRoaXMuJG9wdGlvbnMsXCJmaWx0ZXJzXCIsZSl8fEx9ZnVuY3Rpb24gYnQoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMT09PWUuaW5kZXhPZih0KTplIT09dH1mdW5jdGlvbiB3dChlLHQsbixyLGkpe3ZhciBvPUgua2V5Q29kZXNbdF18fG47cmV0dXJuIGkmJnImJiFILmtleUNvZGVzW3RdP2J0KGkscik6bz9idChvLGUpOnI/QShyKSE9PXQ6dm9pZCAwfWZ1bmN0aW9uICR0KGUsdCxuLHIsaSl7aWYobiYmYyhuKSl7dmFyIG87QXJyYXkuaXNBcnJheShuKSYmKG49RShuKSk7dmFyIGE9ZnVuY3Rpb24oYSl7aWYoXCJjbGFzc1wiPT09YXx8XCJzdHlsZVwiPT09YXx8eShhKSlvPWU7ZWxzZXt2YXIgcz1lLmF0dHJzJiZlLmF0dHJzLnR5cGU7bz1yfHxILm11c3RVc2VQcm9wKHQscyxhKT9lLmRvbVByb3BzfHwoZS5kb21Qcm9wcz17fSk6ZS5hdHRyc3x8KGUuYXR0cnM9e30pfXZhciBjPXgoYSksbD1BKGEpO2MgaW4gb3x8bCBpbiBvfHwob1thXT1uW2FdLGkmJigoZS5vbnx8KGUub249e30pKVtcInVwZGF0ZTpcIithXT1mdW5jdGlvbihlKXtuW2FdPWV9KSl9O2Zvcih2YXIgcyBpbiBuKWEocyl9cmV0dXJuIGV9ZnVuY3Rpb24geHQoZSx0KXt2YXIgbj10aGlzLl9zdGF0aWNUcmVlc3x8KHRoaXMuX3N0YXRpY1RyZWVzPVtdKSxyPW5bZV07cmV0dXJuIHImJiF0P3I6KGt0KHI9bltlXT10aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tlXS5jYWxsKHRoaXMuX3JlbmRlclByb3h5LG51bGwsdGhpcyksXCJfX3N0YXRpY19fXCIrZSwhMSkscil9ZnVuY3Rpb24gQ3QoZSx0LG4pe3JldHVybiBrdChlLFwiX19vbmNlX19cIit0KyhuP1wiX1wiK246XCJcIiksITApLGV9ZnVuY3Rpb24ga3QoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXSYmXCJzdHJpbmdcIiE9dHlwZW9mIGVbcl0mJkF0KGVbcl0sdCtcIl9cIityLG4pO2Vsc2UgQXQoZSx0LG4pfWZ1bmN0aW9uIEF0KGUsdCxuKXtlLmlzU3RhdGljPSEwLGUua2V5PXQsZS5pc09uY2U9bn1mdW5jdGlvbiBTdChlLHQpe2lmKHQmJnUodCkpe3ZhciBuPWUub249ZS5vbj9UKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319cmV0dXJuIGV9ZnVuY3Rpb24gT3QoZSx0LG4scil7dD10fHx7JHN0YWJsZTohbn07Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07QXJyYXkuaXNBcnJheShvKT9PdChvLHQsbik6byYmKG8ucHJveHkmJihvLmZuLnByb3h5PSEwKSx0W28ua2V5XT1vLmZuKX1yZXR1cm4gciYmKHQuJGtleT1yKSx0fWZ1bmN0aW9uIFR0KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXt2YXIgcj10W25dO1wic3RyaW5nXCI9PXR5cGVvZiByJiZyJiYoZVt0W25dXT10W24rMV0pfXJldHVybiBlfWZ1bmN0aW9uIEV0KGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/dCtlOmV9ZnVuY3Rpb24gSXQoZSl7ZS5fbz1DdCxlLl9uPXYsZS5fcz1wLGUuX2w9eXQsZS5fdD1ndCxlLl9xPU4sZS5faT1NLGUuX209eHQsZS5fZj1fdCxlLl9rPXd0LGUuX2I9JHQsZS5fdj1nZSxlLl9lPXllLGUuX3U9T3QsZS5fZz1TdCxlLl9kPVR0LGUuX3A9RXR9ZnVuY3Rpb24ganQoZSx0LG4saSxvKXt2YXIgcyxjPXRoaXMsbD1vLm9wdGlvbnM7YihpLFwiX3VpZFwiKT8ocz1PYmplY3QuY3JlYXRlKGkpKS5fb3JpZ2luYWw9aToocz1pLGk9aS5fb3JpZ2luYWwpO3ZhciB1PWEobC5fY29tcGlsZWQpLGY9IXU7dGhpcy5kYXRhPWUsdGhpcy5wcm9wcz10LHRoaXMuY2hpbGRyZW49bix0aGlzLnBhcmVudD1pLHRoaXMubGlzdGVuZXJzPWUub258fHIsdGhpcy5pbmplY3Rpb25zPWZ0KGwuaW5qZWN0LGkpLHRoaXMuc2xvdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy4kc2xvdHN8fHZ0KGUuc2NvcGVkU2xvdHMsYy4kc2xvdHM9ZHQobixpKSksYy4kc2xvdHN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2NvcGVkU2xvdHNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdnQoZS5zY29wZWRTbG90cyx0aGlzLnNsb3RzKCkpfX0pLHUmJih0aGlzLiRvcHRpb25zPWwsdGhpcy4kc2xvdHM9dGhpcy5zbG90cygpLHRoaXMuJHNjb3BlZFNsb3RzPXZ0KGUuc2NvcGVkU2xvdHMsdGhpcy4kc2xvdHMpKSxsLl9zY29wZUlkP3RoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89QnQocyxlLHQsbixyLGYpO3JldHVybiBvJiYhQXJyYXkuaXNBcnJheShvKSYmKG8uZm5TY29wZUlkPWwuX3Njb3BlSWQsby5mbkNvbnRleHQ9aSksb306dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQnQocyxlLHQsbixyLGYpfX1mdW5jdGlvbiBMdChlLHQsbixyLGkpe3ZhciBvPV9lKGUpO3JldHVybiBvLmZuQ29udGV4dD1uLG8uZm5PcHRpb25zPXIsdC5zbG90JiYoKG8uZGF0YXx8KG8uZGF0YT17fSkpLnNsb3Q9dC5zbG90KSxvfWZ1bmN0aW9uIE50KGUsdCl7Zm9yKHZhciBuIGluIHQpZVt4KG4pXT10W25dfUl0KGp0LnByb3RvdHlwZSk7dmFyIE10PXtpbml0OmZ1bmN0aW9uKGUsdCl7aWYoZS5jb21wb25lbnRJbnN0YW5jZSYmIWUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkJiZlLmRhdGEua2VlcEFsaXZlKXt2YXIgbj1lO010LnByZXBhdGNoKG4sbil9ZWxzZShlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e19pc0NvbXBvbmVudDohMCxfcGFyZW50Vm5vZGU6ZSxwYXJlbnQ6WHR9LHI9ZS5kYXRhLmlubGluZVRlbXBsYXRlO3JldHVybiBvKHIpJiYobi5yZW5kZXI9ci5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9ci5zdGF0aWNSZW5kZXJGbnMpLG5ldyBlLmNvbXBvbmVudE9wdGlvbnMuQ3RvcihuKX0oZSkpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX0scHJlcGF0Y2g6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmNvbXBvbmVudE9wdGlvbnM7IWZ1bmN0aW9uKGUsdCxuLGksbyl7dmFyIGE9aS5kYXRhLnNjb3BlZFNsb3RzLHM9ZS4kc2NvcGVkU2xvdHMsYz0hIShhJiYhYS4kc3RhYmxlfHxzIT09ciYmIXMuJHN0YWJsZXx8YSYmZS4kc2NvcGVkU2xvdHMuJGtleSE9PWEuJGtleSksbD0hIShvfHxlLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbnx8Yyk7aWYoZS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9aSxlLiR2bm9kZT1pLGUuX3Zub2RlJiYoZS5fdm5vZGUucGFyZW50PWkpLGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPW8sZS4kYXR0cnM9aS5kYXRhLmF0dHJzfHxyLGUuJGxpc3RlbmVycz1ufHxyLHQmJmUuJG9wdGlvbnMucHJvcHMpe0NlKCExKTtmb3IodmFyIHU9ZS5fcHJvcHMsZj1lLiRvcHRpb25zLl9wcm9wS2V5c3x8W10sZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdLHY9ZS4kb3B0aW9ucy5wcm9wczt1W3BdPUZlKHAsdix0LGUpfUNlKCEwKSxlLiRvcHRpb25zLnByb3BzRGF0YT10fW49bnx8cjt2YXIgaD1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPW4sR3QoZSxuLGgpLGwmJihlLiRzbG90cz1kdChvLGkuY29udGV4dCksZS4kZm9yY2VVcGRhdGUoKSl9KHQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZSxuLnByb3BzRGF0YSxuLmxpc3RlbmVycyx0LG4uY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCx0bihyLFwibW91bnRlZFwiKSksZS5kYXRhLmtlZXBBbGl2ZSYmKG4uX2lzTW91bnRlZD8oKHQ9cikuX2luYWN0aXZlPSExLHJuLnB1c2godCkpOmVuKHIsITApKX0sZGVzdHJveTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbXBvbmVudEluc3RhbmNlO3QuX2lzRGVzdHJveWVkfHwoZS5kYXRhLmtlZXBBbGl2ZT9mdW5jdGlvbiBlKHQsbil7aWYoIShuJiYodC5fZGlyZWN0SW5hY3RpdmU9ITAsUXQodCkpfHx0Ll9pbmFjdGl2ZSkpe3QuX2luYWN0aXZlPSEwO2Zvcih2YXIgcj0wO3I8dC4kY2hpbGRyZW4ubGVuZ3RoO3IrKyllKHQuJGNoaWxkcmVuW3JdKTt0bih0LFwiZGVhY3RpdmF0ZWRcIil9fSh0LCEwKTp0LiRkZXN0cm95KCkpfX0sRHQ9T2JqZWN0LmtleXMoTXQpO2Z1bmN0aW9uIFB0KGUsdCxuLHMsbCl7aWYoIWkoZSkpe3ZhciB1PW4uJG9wdGlvbnMuX2Jhc2U7aWYoYyhlKSYmKGU9dS5leHRlbmQoZSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZhciBmO2lmKGkoZS5jaWQpJiZ2b2lkIDA9PT0oZT1mdW5jdGlvbihlLHQpe2lmKGEoZS5lcnJvcikmJm8oZS5lcnJvckNvbXApKXJldHVybiBlLmVycm9yQ29tcDtpZihvKGUucmVzb2x2ZWQpKXJldHVybiBlLnJlc29sdmVkO3ZhciBuPXp0O2lmKG4mJm8oZS5vd25lcnMpJiYtMT09PWUub3duZXJzLmluZGV4T2YobikmJmUub3duZXJzLnB1c2gobiksYShlLmxvYWRpbmcpJiZvKGUubG9hZGluZ0NvbXApKXJldHVybiBlLmxvYWRpbmdDb21wO2lmKG4mJiFvKGUub3duZXJzKSl7dmFyIHI9ZS5vd25lcnM9W25dLHM9ITAsbD1udWxsLHU9bnVsbDtuLiRvbihcImhvb2s6ZGVzdHJveWVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gZyhyLG4pfSk7dmFyIGY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1yLmxlbmd0aDt0PG47dCsrKXJbdF0uJGZvcmNlVXBkYXRlKCk7ZSYmKHIubGVuZ3RoPTAsbnVsbCE9PWwmJihjbGVhclRpbWVvdXQobCksbD1udWxsKSxudWxsIT09dSYmKGNsZWFyVGltZW91dCh1KSx1PW51bGwpKX0scD1EKGZ1bmN0aW9uKG4pe2UucmVzb2x2ZWQ9VnQobix0KSxzP3IubGVuZ3RoPTA6ZighMCl9KSx2PUQoZnVuY3Rpb24odCl7byhlLmVycm9yQ29tcCkmJihlLmVycm9yPSEwLGYoITApKX0pLGg9ZShwLHYpO3JldHVybiBjKGgpJiYoZChoKT9pKGUucmVzb2x2ZWQpJiZoLnRoZW4ocCx2KTpkKGguY29tcG9uZW50KSYmKGguY29tcG9uZW50LnRoZW4ocCx2KSxvKGguZXJyb3IpJiYoZS5lcnJvckNvbXA9VnQoaC5lcnJvcix0KSksbyhoLmxvYWRpbmcpJiYoZS5sb2FkaW5nQ29tcD1WdChoLmxvYWRpbmcsdCksMD09PWguZGVsYXk/ZS5sb2FkaW5nPSEwOmw9c2V0VGltZW91dChmdW5jdGlvbigpe2w9bnVsbCxpKGUucmVzb2x2ZWQpJiZpKGUuZXJyb3IpJiYoZS5sb2FkaW5nPSEwLGYoITEpKX0saC5kZWxheXx8MjAwKSksbyhoLnRpbWVvdXQpJiYodT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsLGkoZS5yZXNvbHZlZCkmJnYobnVsbCl9LGgudGltZW91dCkpKSkscz0hMSxlLmxvYWRpbmc/ZS5sb2FkaW5nQ29tcDplLnJlc29sdmVkfX0oZj1lLHUpKSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz15ZSgpO3JldHVybiBvLmFzeW5jRmFjdG9yeT1lLG8uYXN5bmNNZXRhPXtkYXRhOnQsY29udGV4dDpuLGNoaWxkcmVuOnIsdGFnOml9LG99KGYsdCxuLHMsbCk7dD10fHx7fSx4bihlKSxvKHQubW9kZWwpJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUubW9kZWwmJmUubW9kZWwucHJvcHx8XCJ2YWx1ZVwiLHI9ZS5tb2RlbCYmZS5tb2RlbC5ldmVudHx8XCJpbnB1dFwiOyh0LmF0dHJzfHwodC5hdHRycz17fSkpW25dPXQubW9kZWwudmFsdWU7dmFyIGk9dC5vbnx8KHQub249e30pLGE9aVtyXSxzPXQubW9kZWwuY2FsbGJhY2s7byhhKT8oQXJyYXkuaXNBcnJheShhKT8tMT09PWEuaW5kZXhPZihzKTphIT09cykmJihpW3JdPVtzXS5jb25jYXQoYSkpOmlbcl09c30oZS5vcHRpb25zLHQpO3ZhciBwPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm9wdGlvbnMucHJvcHM7aWYoIWkocikpe3ZhciBhPXt9LHM9ZS5hdHRycyxjPWUucHJvcHM7aWYobyhzKXx8byhjKSlmb3IodmFyIGwgaW4gcil7dmFyIHU9QShsKTtjdChhLGMsbCx1LCEwKXx8Y3QoYSxzLGwsdSwhMSl9cmV0dXJuIGF9fSh0LGUpO2lmKGEoZS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHQsbixpLGEpe3ZhciBzPWUub3B0aW9ucyxjPXt9LGw9cy5wcm9wcztpZihvKGwpKWZvcih2YXIgdSBpbiBsKWNbdV09RmUodSxsLHR8fHIpO2Vsc2UgbyhuLmF0dHJzKSYmTnQoYyxuLmF0dHJzKSxvKG4ucHJvcHMpJiZOdChjLG4ucHJvcHMpO3ZhciBmPW5ldyBqdChuLGMsYSxpLGUpLGQ9cy5yZW5kZXIuY2FsbChudWxsLGYuX2MsZik7aWYoZCBpbnN0YW5jZW9mIGhlKXJldHVybiBMdChkLG4sZi5wYXJlbnQscyk7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBwPWx0KGQpfHxbXSx2PW5ldyBBcnJheShwLmxlbmd0aCksaD0wO2g8cC5sZW5ndGg7aCsrKXZbaF09THQocFtoXSxuLGYucGFyZW50LHMpO3JldHVybiB2fX0oZSxwLHQsbixzKTt2YXIgdj10Lm9uO2lmKHQub249dC5uYXRpdmVPbixhKGUub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBoPXQuc2xvdDt0PXt9LGgmJih0LnNsb3Q9aCl9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPER0Lmxlbmd0aDtuKyspe3ZhciByPUR0W25dLGk9dFtyXSxvPU10W3JdO2k9PT1vfHxpJiZpLl9tZXJnZWR8fCh0W3JdPWk/RnQobyxpKTpvKX19KHQpO3ZhciBtPWUub3B0aW9ucy5uYW1lfHxsO3JldHVybiBuZXcgaGUoXCJ2dWUtY29tcG9uZW50LVwiK2UuY2lkKyhtP1wiLVwiK206XCJcIiksdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxuLHtDdG9yOmUscHJvcHNEYXRhOnAsbGlzdGVuZXJzOnYsdGFnOmwsY2hpbGRyZW46c30sZil9fX1mdW5jdGlvbiBGdChlLHQpe3ZhciBuPWZ1bmN0aW9uKG4scil7ZShuLHIpLHQobixyKX07cmV0dXJuIG4uX21lcmdlZD0hMCxufXZhciBSdD0xLEh0PTI7ZnVuY3Rpb24gQnQoZSx0LG4scixsLHUpe3JldHVybihBcnJheS5pc0FycmF5KG4pfHxzKG4pKSYmKGw9cixyPW4sbj12b2lkIDApLGEodSkmJihsPUh0KSxmdW5jdGlvbihlLHQsbixyLHMpe2lmKG8obikmJm8obi5fX29iX18pKXJldHVybiB5ZSgpO2lmKG8obikmJm8obi5pcykmJih0PW4uaXMpLCF0KXJldHVybiB5ZSgpO3ZhciBsLHUsZjsoQXJyYXkuaXNBcnJheShyKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgclswXSYmKChuPW58fHt9KS5zY29wZWRTbG90cz17ZGVmYXVsdDpyWzBdfSxyLmxlbmd0aD0wKSxzPT09SHQ/cj1sdChyKTpzPT09UnQmJihyPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKEFycmF5LmlzQXJyYXkoZVt0XSkpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSk7cmV0dXJuIGV9KHIpKSxcInN0cmluZ1wiPT10eXBlb2YgdCk/KHU9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxILmdldFRhZ05hbWVzcGFjZSh0KSxsPUguaXNSZXNlcnZlZFRhZyh0KT9uZXcgaGUoSC5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLHIsdm9pZCAwLHZvaWQgMCxlKTpuJiZuLnByZXx8IW8oZj1QZShlLiRvcHRpb25zLFwiY29tcG9uZW50c1wiLHQpKT9uZXcgaGUodCxuLHIsdm9pZCAwLHZvaWQgMCxlKTpQdChmLG4sZSxyLHQpKTpsPVB0KHQsbixlLHIpO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2w6byhsKT8obyh1KSYmZnVuY3Rpb24gZSh0LG4scil7aWYodC5ucz1uLFwiZm9yZWlnbk9iamVjdFwiPT09dC50YWcmJihuPXZvaWQgMCxyPSEwKSxvKHQuY2hpbGRyZW4pKWZvcih2YXIgcz0wLGM9dC5jaGlsZHJlbi5sZW5ndGg7czxjO3MrKyl7dmFyIGw9dC5jaGlsZHJlbltzXTtvKGwudGFnKSYmKGkobC5ucyl8fGEocikmJlwic3ZnXCIhPT1sLnRhZykmJmUobCxuLHIpfX0obCx1KSxvKG4pJiZmdW5jdGlvbihlKXtjKGUuc3R5bGUpJiZydChlLnN0eWxlKSxjKGUuY2xhc3MpJiZydChlLmNsYXNzKX0obiksbCk6eWUoKX0oZSx0LG4scixsKX12YXIgVXQsenQ9bnVsbDtmdW5jdGlvbiBWdChlLHQpe3JldHVybihlLl9fZXNNb2R1bGV8fGNlJiZcIk1vZHVsZVwiPT09ZVtTeW1ib2wudG9TdHJpbmdUYWddKSYmKGU9ZS5kZWZhdWx0KSxjKGUpP3QuZXh0ZW5kKGUpOmV9ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIGUuaXNDb21tZW50JiZlLmFzeW5jRmFjdG9yeX1mdW5jdGlvbiBKdChlKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO2lmKG8obikmJihvKG4uY29tcG9uZW50T3B0aW9ucyl8fEt0KG4pKSlyZXR1cm4gbn19ZnVuY3Rpb24gcXQoZSx0KXtVdC4kb24oZSx0KX1mdW5jdGlvbiBXdChlLHQpe1V0LiRvZmYoZSx0KX1mdW5jdGlvbiBadChlLHQpe3ZhciBuPVV0O3JldHVybiBmdW5jdGlvbiByKCl7bnVsbCE9PXQuYXBwbHkobnVsbCxhcmd1bWVudHMpJiZuLiRvZmYoZSxyKX19ZnVuY3Rpb24gR3QoZSx0LG4pe1V0PWUsYXQodCxufHx7fSxxdCxXdCxadCxlKSxVdD12b2lkIDB9dmFyIFh0PW51bGw7ZnVuY3Rpb24gWXQoZSl7dmFyIHQ9WHQ7cmV0dXJuIFh0PWUsZnVuY3Rpb24oKXtYdD10fX1mdW5jdGlvbiBRdChlKXtmb3IoO2UmJihlPWUuJHBhcmVudCk7KWlmKGUuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGVuKGUsdCl7aWYodCl7aWYoZS5fZGlyZWN0SW5hY3RpdmU9ITEsUXQoZSkpcmV0dXJufWVsc2UgaWYoZS5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKGUuX2luYWN0aXZlfHxudWxsPT09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKyllbihlLiRjaGlsZHJlbltuXSk7dG4oZSxcImFjdGl2YXRlZFwiKX19ZnVuY3Rpb24gdG4oZSx0KXtwZSgpO3ZhciBuPWUuJG9wdGlvbnNbdF0scj10K1wiIGhvb2tcIjtpZihuKWZvcih2YXIgaT0wLG89bi5sZW5ndGg7aTxvO2krKyl6ZShuW2ldLGUsbnVsbCxlLHIpO2UuX2hhc0hvb2tFdmVudCYmZS4kZW1pdChcImhvb2s6XCIrdCksdmUoKX12YXIgbm49W10scm49W10sb249e30sYW49ITEsc249ITEsY249MCxsbj0wLHVuPURhdGUubm93O2lmKEomJiFHKXt2YXIgZm49d2luZG93LnBlcmZvcm1hbmNlO2ZuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBmbi5ub3cmJnVuKCk+ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKS50aW1lU3RhbXAmJih1bj1mdW5jdGlvbigpe3JldHVybiBmbi5ub3coKX0pfWZ1bmN0aW9uIGRuKCl7dmFyIGUsdDtmb3IobG49dW4oKSxzbj0hMCxubi5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaWQtdC5pZH0pLGNuPTA7Y248bm4ubGVuZ3RoO2NuKyspKGU9bm5bY25dKS5iZWZvcmUmJmUuYmVmb3JlKCksdD1lLmlkLG9uW3RdPW51bGwsZS5ydW4oKTt2YXIgbj1ybi5zbGljZSgpLHI9bm4uc2xpY2UoKTtjbj1ubi5sZW5ndGg9cm4ubGVuZ3RoPTAsb249e30sYW49c249ITEsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5faW5hY3RpdmU9ITAsZW4oZVt0XSwhMCl9KG4pLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiYhci5faXNEZXN0cm95ZWQmJnRuKHIsXCJ1cGRhdGVkXCIpfX0ociksb2UmJkguZGV2dG9vbHMmJm9lLmVtaXQoXCJmbHVzaFwiKX12YXIgcG49MCx2bj1mdW5jdGlvbihlLHQsbixyLGkpe3RoaXMudm09ZSxpJiYoZS5fd2F0Y2hlcj10aGlzKSxlLl93YXRjaGVycy5wdXNoKHRoaXMpLHI/KHRoaXMuZGVlcD0hIXIuZGVlcCx0aGlzLnVzZXI9ISFyLnVzZXIsdGhpcy5sYXp5PSEhci5sYXp5LHRoaXMuc3luYz0hIXIuc3luYyx0aGlzLmJlZm9yZT1yLmJlZm9yZSk6dGhpcy5kZWVwPXRoaXMudXNlcj10aGlzLmxhenk9dGhpcy5zeW5jPSExLHRoaXMuY2I9bix0aGlzLmlkPSsrcG4sdGhpcy5hY3RpdmU9ITAsdGhpcy5kaXJ0eT10aGlzLmxhenksdGhpcy5kZXBzPVtdLHRoaXMubmV3RGVwcz1bXSx0aGlzLmRlcElkcz1uZXcgc2UsdGhpcy5uZXdEZXBJZHM9bmV3IHNlLHRoaXMuZXhwcmVzc2lvbj1cIlwiLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIVYudGVzdChlKSl7dmFyIHQ9ZS5zcGxpdChcIi5cIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighZSlyZXR1cm47ZT1lW3Rbbl1dfXJldHVybiBlfX19KHQpLHRoaXMuZ2V0dGVyfHwodGhpcy5nZXR0ZXI9SSkpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTt2bi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7cGUodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO1VlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyIFwiJyt0aGlzLmV4cHJlc3Npb24rJ1wiJyl9ZmluYWxseXt0aGlzLmRlZXAmJnJ0KGUpLHZlKCksdGhpcy5jbGVhbnVwRGVwcygpfXJldHVybiBlfSx2bi5wcm90b3R5cGUuYWRkRGVwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQ7dGhpcy5uZXdEZXBJZHMuaGFzKHQpfHwodGhpcy5uZXdEZXBJZHMuYWRkKHQpLHRoaXMubmV3RGVwcy5wdXNoKGUpLHRoaXMuZGVwSWRzLmhhcyh0KXx8ZS5hZGRTdWIodGhpcykpfSx2bi5wcm90b3R5cGUuY2xlYW51cERlcHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXt2YXIgdD10aGlzLmRlcHNbZV07dGhpcy5uZXdEZXBJZHMuaGFzKHQuaWQpfHx0LnJlbW92ZVN1Yih0aGlzKX12YXIgbj10aGlzLmRlcElkczt0aGlzLmRlcElkcz10aGlzLm5ld0RlcElkcyx0aGlzLm5ld0RlcElkcz1uLHRoaXMubmV3RGVwSWRzLmNsZWFyKCksbj10aGlzLmRlcHMsdGhpcy5kZXBzPXRoaXMubmV3RGVwcyx0aGlzLm5ld0RlcHM9bix0aGlzLm5ld0RlcHMubGVuZ3RoPTB9LHZuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxhenk/dGhpcy5kaXJ0eT0hMDp0aGlzLnN5bmM/dGhpcy5ydW4oKTpmdW5jdGlvbihlKXt2YXIgdD1lLmlkO2lmKG51bGw9PW9uW3RdKXtpZihvblt0XT0hMCxzbil7Zm9yKHZhciBuPW5uLmxlbmd0aC0xO24+Y24mJm5uW25dLmlkPmUuaWQ7KW4tLTtubi5zcGxpY2UobisxLDAsZSl9ZWxzZSBubi5wdXNoKGUpO2FufHwoYW49ITAsdHQoZG4pKX19KHRoaXMpfSx2bi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3ZhciBlPXRoaXMuZ2V0KCk7aWYoZSE9PXRoaXMudmFsdWV8fGMoZSl8fHRoaXMuZGVlcCl7dmFyIHQ9dGhpcy52YWx1ZTtpZih0aGlzLnZhbHVlPWUsdGhpcy51c2VyKXRyeXt0aGlzLmNiLmNhbGwodGhpcy52bSxlLHQpfWNhdGNoKGUpe1VlKGUsdGhpcy52bSwnY2FsbGJhY2sgZm9yIHdhdGNoZXIgXCInK3RoaXMuZXhwcmVzc2lvbisnXCInKX1lbHNlIHRoaXMuY2IuY2FsbCh0aGlzLnZtLGUsdCl9fX0sdm4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLmdldCgpLHRoaXMuZGlydHk9ITF9LHZuLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5kZXBlbmQoKX0sdm4ucHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3RoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWR8fGcodGhpcy52bS5fd2F0Y2hlcnMsdGhpcyk7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl0aGlzLmRlcHNbZV0ucmVtb3ZlU3ViKHRoaXMpO3RoaXMuYWN0aXZlPSExfX07dmFyIGhuPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6SSxzZXQ6SX07ZnVuY3Rpb24gbW4oZSx0LG4pe2huLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzW3RdW25dfSxobi5zZXQ9ZnVuY3Rpb24oZSl7dGhpc1t0XVtuXT1lfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGhuKX12YXIgeW49e2xhenk6ITB9O2Z1bmN0aW9uIGduKGUsdCxuKXt2YXIgcj0haWUoKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhobi5nZXQ9cj9fbih0KTpibihuKSxobi5zZXQ9SSk6KGhuLmdldD1uLmdldD9yJiYhMSE9PW4uY2FjaGU/X24odCk6Ym4obi5nZXQpOkksaG4uc2V0PW4uc2V0fHxJKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LGhuKX1mdW5jdGlvbiBfbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb21wdXRlZFdhdGNoZXJzJiZ0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2VdO2lmKHQpcmV0dXJuIHQuZGlydHkmJnQuZXZhbHVhdGUoKSxmZS50YXJnZXQmJnQuZGVwZW5kKCksdC52YWx1ZX19ZnVuY3Rpb24gYm4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0aGlzLHRoaXMpfX1mdW5jdGlvbiB3bihlLHQsbixyKXtyZXR1cm4gdShuKSYmKHI9bixuPW4uaGFuZGxlciksXCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPWVbbl0pLGUuJHdhdGNoKHQsbixyKX12YXIgJG49MDtmdW5jdGlvbiB4bihlKXt2YXIgdD1lLm9wdGlvbnM7aWYoZS5zdXBlcil7dmFyIG49eG4oZS5zdXBlcik7aWYobiE9PWUuc3VwZXJPcHRpb25zKXtlLnN1cGVyT3B0aW9ucz1uO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5vcHRpb25zLHI9ZS5zZWFsZWRPcHRpb25zO2Zvcih2YXIgaSBpbiBuKW5baV0hPT1yW2ldJiYodHx8KHQ9e30pLHRbaV09bltpXSk7cmV0dXJuIHR9KGUpO3ImJlQoZS5leHRlbmRPcHRpb25zLHIpLCh0PWUub3B0aW9ucz1EZShuLGUuZXh0ZW5kT3B0aW9ucykpLm5hbWUmJih0LmNvbXBvbmVudHNbdC5uYW1lXT1lKX19cmV0dXJuIHR9ZnVuY3Rpb24gQ24oZSl7dGhpcy5faW5pdChlKX1mdW5jdGlvbiBrbihlKXtyZXR1cm4gZSYmKGUuQ3Rvci5vcHRpb25zLm5hbWV8fGUudGFnKX1mdW5jdGlvbiBBbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuaW5kZXhPZih0KT4tMTpcInN0cmluZ1wiPT10eXBlb2YgZT9lLnNwbGl0KFwiLFwiKS5pbmRleE9mKHQpPi0xOihuPWUsXCJbb2JqZWN0IFJlZ0V4cF1cIj09PWwuY2FsbChuKSYmZS50ZXN0KHQpKTt2YXIgbn1mdW5jdGlvbiBTbihlLHQpe3ZhciBuPWUuY2FjaGUscj1lLmtleXMsaT1lLl92bm9kZTtmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtpZihhKXt2YXIgcz1rbihhLmNvbXBvbmVudE9wdGlvbnMpO3MmJiF0KHMpJiZPbihuLG8scixpKX19fWZ1bmN0aW9uIE9uKGUsdCxuLHIpe3ZhciBpPWVbdF07IWl8fHImJmkudGFnPT09ci50YWd8fGkuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKSxlW3RdPW51bGwsZyhuLHQpfUNuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3QuX3VpZD0kbisrLHQuX2lzVnVlPSEwLGUmJmUuX2lzQ29tcG9uZW50P2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucykscj10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1yO3ZhciBpPXIuY29tcG9uZW50T3B0aW9ucztuLnByb3BzRGF0YT1pLnByb3BzRGF0YSxuLl9wYXJlbnRMaXN0ZW5lcnM9aS5saXN0ZW5lcnMsbi5fcmVuZGVyQ2hpbGRyZW49aS5jaGlsZHJlbixuLl9jb21wb25lbnRUYWc9aS50YWcsdC5yZW5kZXImJihuLnJlbmRlcj10LnJlbmRlcixuLnN0YXRpY1JlbmRlckZucz10LnN0YXRpY1JlbmRlckZucyl9KHQsZSk6dC4kb3B0aW9ucz1EZSh4bih0LmNvbnN0cnVjdG9yKSxlfHx7fSx0KSx0Ll9yZW5kZXJQcm94eT10LHQuX3NlbGY9dCxmdW5jdGlvbihlKXt2YXIgdD1lLiRvcHRpb25zLG49dC5wYXJlbnQ7aWYobiYmIXQuYWJzdHJhY3Qpe2Zvcig7bi4kb3B0aW9ucy5hYnN0cmFjdCYmbi4kcGFyZW50OyluPW4uJHBhcmVudDtuLiRjaGlsZHJlbi5wdXNoKGUpfWUuJHBhcmVudD1uLGUuJHJvb3Q9bj9uLiRyb290OmUsZS4kY2hpbGRyZW49W10sZS4kcmVmcz17fSxlLl93YXRjaGVyPW51bGwsZS5faW5hY3RpdmU9bnVsbCxlLl9kaXJlY3RJbmFjdGl2ZT0hMSxlLl9pc01vdW50ZWQ9ITEsZS5faXNEZXN0cm95ZWQ9ITEsZS5faXNCZWluZ0Rlc3Ryb3llZD0hMX0odCksZnVuY3Rpb24oZSl7ZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksZS5faGFzSG9va0V2ZW50PSExO3ZhciB0PWUuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVyczt0JiZHdChlLHQpfSh0KSxmdW5jdGlvbihlKXtlLl92bm9kZT1udWxsLGUuX3N0YXRpY1RyZWVzPW51bGw7dmFyIHQ9ZS4kb3B0aW9ucyxuPWUuJHZub2RlPXQuX3BhcmVudFZub2RlLGk9biYmbi5jb250ZXh0O2UuJHNsb3RzPWR0KHQuX3JlbmRlckNoaWxkcmVuLGkpLGUuJHNjb3BlZFNsb3RzPXIsZS5fYz1mdW5jdGlvbih0LG4scixpKXtyZXR1cm4gQnQoZSx0LG4scixpLCExKX0sZS4kY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LG4scixpKXtyZXR1cm4gQnQoZSx0LG4scixpLCEwKX07dmFyIG89biYmbi5kYXRhO1NlKGUsXCIkYXR0cnNcIixvJiZvLmF0dHJzfHxyLG51bGwsITApLFNlKGUsXCIkbGlzdGVuZXJzXCIsdC5fcGFyZW50TGlzdGVuZXJzfHxyLG51bGwsITApfSh0KSx0bih0LFwiYmVmb3JlQ3JlYXRlXCIpLGZ1bmN0aW9uKGUpe3ZhciB0PWZ0KGUuJG9wdGlvbnMuaW5qZWN0LGUpO3QmJihDZSghMSksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtTZShlLG4sdFtuXSl9KSxDZSghMCkpfSh0KSxmdW5jdGlvbihlKXtlLl93YXRjaGVycz1bXTt2YXIgdD1lLiRvcHRpb25zO3QucHJvcHMmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucy5wcm9wc0RhdGF8fHt9LHI9ZS5fcHJvcHM9e30saT1lLiRvcHRpb25zLl9wcm9wS2V5cz1bXTtlLiRwYXJlbnQmJkNlKCExKTt2YXIgbz1mdW5jdGlvbihvKXtpLnB1c2gobyk7dmFyIGE9RmUobyx0LG4sZSk7U2UocixvLGEpLG8gaW4gZXx8bW4oZSxcIl9wcm9wc1wiLG8pfTtmb3IodmFyIGEgaW4gdClvKGEpO0NlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUuJG9wdGlvbnMucHJvcHMsdCllW25dPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRbbl0/STpTKHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO3UodD1lLl9kYXRhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0KXtwZSgpO3RyeXtyZXR1cm4gZS5jYWxsKHQsdCl9Y2F0Y2goZSl7cmV0dXJuIFVlKGUsdCxcImRhdGEoKVwiKSx7fX1maW5hbGx5e3ZlKCl9fSh0LGUpOnR8fHt9KXx8KHQ9e30pO2Zvcih2YXIgbixyPU9iamVjdC5rZXlzKHQpLGk9ZS4kb3B0aW9ucy5wcm9wcyxvPShlLiRvcHRpb25zLm1ldGhvZHMsci5sZW5ndGgpO28tLTspe3ZhciBhPXJbb107aSYmYihpLGEpfHwzNiE9PShuPShhK1wiXCIpLmNoYXJDb2RlQXQoMCkpJiY5NSE9PW4mJm1uKGUsXCJfZGF0YVwiLGEpfUFlKHQsITApfShlKTpBZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWllKCk7Zm9yKHZhciBpIGluIHQpe3ZhciBvPXRbaV0sYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBvP286by5nZXQ7cnx8KG5baV09bmV3IHZuKGUsYXx8SSxJLHluKSksaSBpbiBlfHxnbihlLGksbyl9fShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT10ZSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZihBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXduKGUsbixyW2ldKTtlbHNlIHduKGUsbixyKX19KGUsdC53YXRjaCl9KHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMucHJvdmlkZTt0JiYoZS5fcHJvdmlkZWQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwoZSk6dCl9KHQpLHRuKHQsXCJjcmVhdGVkXCIpLHQuJG9wdGlvbnMuZWwmJnQuJG1vdW50KHQuJG9wdGlvbnMuZWwpfSxmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCIkZGF0YVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCIkcHJvcHNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX0pLGUucHJvdG90eXBlLiRzZXQ9T2UsZS5wcm90b3R5cGUuJGRlbGV0ZT1UZSxlLnByb3RvdHlwZS4kd2F0Y2g9ZnVuY3Rpb24oZSx0LG4pe2lmKHUodCkpcmV0dXJuIHduKHRoaXMsZSx0LG4pOyhuPW58fHt9KS51c2VyPSEwO3ZhciByPW5ldyB2bih0aGlzLGUsdCxuKTtpZihuLmltbWVkaWF0ZSl0cnl7dC5jYWxsKHRoaXMsci52YWx1ZSl9Y2F0Y2goZSl7VWUoZSx0aGlzLCdjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXCInK3IuZXhwcmVzc2lvbisnXCInKX1yZXR1cm4gZnVuY3Rpb24oKXtyLnRlYXJkb3duKCl9fX0oQ24pLGZ1bmN0aW9uKGUpe3ZhciB0PS9eaG9vazovO2UucHJvdG90eXBlLiRvbj1mdW5jdGlvbihlLG4pe3ZhciByPXRoaXM7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIGk9MCxvPWUubGVuZ3RoO2k8bztpKyspci4kb24oZVtpXSxuKTtlbHNlKHIuX2V2ZW50c1tlXXx8KHIuX2V2ZW50c1tlXT1bXSkpLnB1c2gobiksdC50ZXN0KGUpJiYoci5faGFzSG9va0V2ZW50PSEwKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2Z1bmN0aW9uIHIoKXtuLiRvZmYoZSxyKSx0LmFwcGx5KG4sYXJndW1lbnRzKX1yZXR1cm4gci5mbj10LG4uJG9uKGUsciksbn0sZS5wcm90b3R5cGUuJG9mZj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4uX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLG47aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKW4uJG9mZihlW3JdLHQpO3JldHVybiBufXZhciBvLGE9bi5fZXZlbnRzW2VdO2lmKCFhKXJldHVybiBuO2lmKCF0KXJldHVybiBuLl9ldmVudHNbZV09bnVsbCxuO2Zvcih2YXIgcz1hLmxlbmd0aDtzLS07KWlmKChvPWFbc10pPT09dHx8by5mbj09PXQpe2Euc3BsaWNlKHMsMSk7YnJlYWt9cmV0dXJuIG59LGUucHJvdG90eXBlLiRlbWl0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2V2ZW50c1tlXTtpZih0KXt0PXQubGVuZ3RoPjE/Tyh0KTp0O2Zvcih2YXIgbj1PKGFyZ3VtZW50cywxKSxyPSdldmVudCBoYW5kbGVyIGZvciBcIicrZSsnXCInLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspemUodFtpXSx0aGlzLG4sdGhpcyxyKX1yZXR1cm4gdGhpc319KENuKSxmdW5jdGlvbihlKXtlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uJGVsLGk9bi5fdm5vZGUsbz1ZdChuKTtuLl92bm9kZT1lLG4uJGVsPWk/bi5fX3BhdGNoX18oaSxlKTpuLl9fcGF0Y2hfXyhuLiRlbCxlLHQsITEpLG8oKSxyJiYoci5fX3Z1ZV9fPW51bGwpLG4uJGVsJiYobi4kZWwuX192dWVfXz1uKSxuLiR2bm9kZSYmbi4kcGFyZW50JiZuLiR2bm9kZT09PW4uJHBhcmVudC5fdm5vZGUmJihuLiRwYXJlbnQuJGVsPW4uJGVsKX0sZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fd2F0Y2hlciYmdGhpcy5fd2F0Y2hlci51cGRhdGUoKX0sZS5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXt0bihlLFwiYmVmb3JlRGVzdHJveVwiKSxlLl9pc0JlaW5nRGVzdHJveWVkPSEwO3ZhciB0PWUuJHBhcmVudDshdHx8dC5faXNCZWluZ0Rlc3Ryb3llZHx8ZS4kb3B0aW9ucy5hYnN0cmFjdHx8Zyh0LiRjaGlsZHJlbixlKSxlLl93YXRjaGVyJiZlLl93YXRjaGVyLnRlYXJkb3duKCk7Zm9yKHZhciBuPWUuX3dhdGNoZXJzLmxlbmd0aDtuLS07KWUuX3dhdGNoZXJzW25dLnRlYXJkb3duKCk7ZS5fZGF0YS5fX29iX18mJmUuX2RhdGEuX19vYl9fLnZtQ291bnQtLSxlLl9pc0Rlc3Ryb3llZD0hMCxlLl9fcGF0Y2hfXyhlLl92bm9kZSxudWxsKSx0bihlLFwiZGVzdHJveWVkXCIpLGUuJG9mZigpLGUuJGVsJiYoZS4kZWwuX192dWVfXz1udWxsKSxlLiR2bm9kZSYmKGUuJHZub2RlLnBhcmVudD1udWxsKX19fShDbiksZnVuY3Rpb24oZSl7SXQoZS5wcm90b3R5cGUpLGUucHJvdG90eXBlLiRuZXh0VGljaz1mdW5jdGlvbihlKXtyZXR1cm4gdHQoZSx0aGlzKX0sZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxuPXQuJG9wdGlvbnMscj1uLnJlbmRlcixpPW4uX3BhcmVudFZub2RlO2kmJih0LiRzY29wZWRTbG90cz12dChpLmRhdGEuc2NvcGVkU2xvdHMsdC4kc2xvdHMsdC4kc2NvcGVkU2xvdHMpKSx0LiR2bm9kZT1pO3RyeXt6dD10LGU9ci5jYWxsKHQuX3JlbmRlclByb3h5LHQuJGNyZWF0ZUVsZW1lbnQpfWNhdGNoKG4pe1VlKG4sdCxcInJlbmRlclwiKSxlPXQuX3Zub2RlfWZpbmFsbHl7enQ9bnVsbH1yZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMT09PWUubGVuZ3RoJiYoZT1lWzBdKSxlIGluc3RhbmNlb2YgaGV8fChlPXllKCkpLGUucGFyZW50PWksZX19KENuKTt2YXIgVG49W1N0cmluZyxSZWdFeHAsQXJyYXldLEVuPXtLZWVwQWxpdmU6e25hbWU6XCJrZWVwLWFsaXZlXCIsYWJzdHJhY3Q6ITAscHJvcHM6e2luY2x1ZGU6VG4sZXhjbHVkZTpUbixtYXg6W1N0cmluZyxOdW1iZXJdfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5jYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMua2V5cz1bXX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuY2FjaGUpT24odGhpcy5jYWNoZSxlLHRoaXMua2V5cyl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJHdhdGNoKFwiaW5jbHVkZVwiLGZ1bmN0aW9uKHQpe1NuKGUsZnVuY3Rpb24oZSl7cmV0dXJuIEFuKHQsZSl9KX0pLHRoaXMuJHdhdGNoKFwiZXhjbHVkZVwiLGZ1bmN0aW9uKHQpe1NuKGUsZnVuY3Rpb24oZSl7cmV0dXJuIUFuKHQsZSl9KX0pfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzbG90cy5kZWZhdWx0LHQ9SnQoZSksbj10JiZ0LmNvbXBvbmVudE9wdGlvbnM7aWYobil7dmFyIHI9a24obiksaT10aGlzLmluY2x1ZGUsbz10aGlzLmV4Y2x1ZGU7aWYoaSYmKCFyfHwhQW4oaSxyKSl8fG8mJnImJkFuKG8scikpcmV0dXJuIHQ7dmFyIGE9dGhpcy5jYWNoZSxzPXRoaXMua2V5cyxjPW51bGw9PXQua2V5P24uQ3Rvci5jaWQrKG4udGFnP1wiOjpcIituLnRhZzpcIlwiKTp0LmtleTthW2NdPyh0LmNvbXBvbmVudEluc3RhbmNlPWFbY10uY29tcG9uZW50SW5zdGFuY2UsZyhzLGMpLHMucHVzaChjKSk6KGFbY109dCxzLnB1c2goYyksdGhpcy5tYXgmJnMubGVuZ3RoPnBhcnNlSW50KHRoaXMubWF4KSYmT24oYSxzWzBdLHMsdGhpcy5fdm5vZGUpKSx0LmRhdGEua2VlcEFsaXZlPSEwfXJldHVybiB0fHxlJiZlWzBdfX19OyFmdW5jdGlvbihlKXt2YXIgdD17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEh9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImNvbmZpZ1wiLHQpLGUudXRpbD17d2FybjpsZSxleHRlbmQ6VCxtZXJnZU9wdGlvbnM6RGUsZGVmaW5lUmVhY3RpdmU6U2V9LGUuc2V0PU9lLGUuZGVsZXRlPVRlLGUubmV4dFRpY2s9dHQsZS5vYnNlcnZhYmxlPWZ1bmN0aW9uKGUpe3JldHVybiBBZShlKSxlfSxlLm9wdGlvbnM9T2JqZWN0LmNyZWF0ZShudWxsKSxGLmZvckVhY2goZnVuY3Rpb24odCl7ZS5vcHRpb25zW3QrXCJzXCJdPU9iamVjdC5jcmVhdGUobnVsbCl9KSxlLm9wdGlvbnMuX2Jhc2U9ZSxUKGUub3B0aW9ucy5jb21wb25lbnRzLEVuKSxmdW5jdGlvbihlKXtlLnVzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnN0YWxsZWRQbHVnaW5zfHwodGhpcy5faW5zdGFsbGVkUGx1Z2lucz1bXSk7aWYodC5pbmRleE9mKGUpPi0xKXJldHVybiB0aGlzO3ZhciBuPU8oYXJndW1lbnRzLDEpO3JldHVybiBuLnVuc2hpZnQodGhpcyksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5pbnN0YWxsP2UuaW5zdGFsbC5hcHBseShlLG4pOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCxuKSx0LnB1c2goZSksdGhpc319KGUpLGZ1bmN0aW9uKGUpe2UubWl4aW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1EZSh0aGlzLm9wdGlvbnMsZSksdGhpc319KGUpLGZ1bmN0aW9uKGUpe2UuY2lkPTA7dmFyIHQ9MTtlLmV4dGVuZD1mdW5jdGlvbihlKXtlPWV8fHt9O3ZhciBuPXRoaXMscj1uLmNpZCxpPWUuX0N0b3J8fChlLl9DdG9yPXt9KTtpZihpW3JdKXJldHVybiBpW3JdO3ZhciBvPWUubmFtZXx8bi5vcHRpb25zLm5hbWUsYT1mdW5jdGlvbihlKXt0aGlzLl9pbml0KGUpfTtyZXR1cm4oYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWEsYS5jaWQ9dCsrLGEub3B0aW9ucz1EZShuLm9wdGlvbnMsZSksYS5zdXBlcj1uLGEub3B0aW9ucy5wcm9wcyYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLnByb3BzO2Zvcih2YXIgbiBpbiB0KW1uKGUucHJvdG90eXBlLFwiX3Byb3BzXCIsbil9KGEpLGEub3B0aW9ucy5jb21wdXRlZCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KWduKGUucHJvdG90eXBlLG4sdFtuXSl9KGEpLGEuZXh0ZW5kPW4uZXh0ZW5kLGEubWl4aW49bi5taXhpbixhLnVzZT1uLnVzZSxGLmZvckVhY2goZnVuY3Rpb24oZSl7YVtlXT1uW2VdfSksbyYmKGEub3B0aW9ucy5jb21wb25lbnRzW29dPWEpLGEuc3VwZXJPcHRpb25zPW4ub3B0aW9ucyxhLmV4dGVuZE9wdGlvbnM9ZSxhLnNlYWxlZE9wdGlvbnM9VCh7fSxhLm9wdGlvbnMpLGlbcl09YSxhfX0oZSksZnVuY3Rpb24oZSl7Ri5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj8oXCJjb21wb25lbnRcIj09PXQmJnUobikmJihuLm5hbWU9bi5uYW1lfHxlLG49dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChuKSksXCJkaXJlY3RpdmVcIj09PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtiaW5kOm4sdXBkYXRlOm59KSx0aGlzLm9wdGlvbnNbdCtcInNcIl1bZV09bixuKTp0aGlzLm9wdGlvbnNbdCtcInNcIl1bZV19fSl9KGUpfShDbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KENuLnByb3RvdHlwZSxcIiRpc1NlcnZlclwiLHtnZXQ6aWV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQ24ucHJvdG90eXBlLFwiJHNzckNvbnRleHRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDbixcIkZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XCIse3ZhbHVlOmp0fSksQ24udmVyc2lvbj1cIjIuNi4xMFwiO3ZhciBJbj1oKFwic3R5bGUsY2xhc3NcIiksam49aChcImlucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3NcIiksTG49ZnVuY3Rpb24oZSx0LG4pe3JldHVyblwidmFsdWVcIj09PW4mJmpuKGUpJiZcImJ1dHRvblwiIT09dHx8XCJzZWxlY3RlZFwiPT09biYmXCJvcHRpb25cIj09PWV8fFwiY2hlY2tlZFwiPT09biYmXCJpbnB1dFwiPT09ZXx8XCJtdXRlZFwiPT09biYmXCJ2aWRlb1wiPT09ZX0sTm49aChcImNvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVja1wiKSxNbj1oKFwiZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seVwiKSxEbj1mdW5jdGlvbihlLHQpe3JldHVybiBCbih0KXx8XCJmYWxzZVwiPT09dD9cImZhbHNlXCI6XCJjb250ZW50ZWRpdGFibGVcIj09PWUmJk1uKHQpP3Q6XCJ0cnVlXCJ9LFBuPWgoXCJhbGxvd2Z1bGxzY3JlZW4sYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLGRlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCxlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLG11dGVkLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHkscmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSx0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlXCIpLEZuPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFJuPWZ1bmN0aW9uKGUpe3JldHVyblwiOlwiPT09ZS5jaGFyQXQoNSkmJlwieGxpbmtcIj09PWUuc2xpY2UoMCw1KX0sSG49ZnVuY3Rpb24oZSl7cmV0dXJuIFJuKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6XCJcIn0sQm49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fCExPT09ZX07ZnVuY3Rpb24gVW4oZSx0KXtyZXR1cm57c3RhdGljQ2xhc3M6em4oZS5zdGF0aWNDbGFzcyx0LnN0YXRpY0NsYXNzKSxjbGFzczpvKGUuY2xhc3MpP1tlLmNsYXNzLHQuY2xhc3NdOnQuY2xhc3N9fWZ1bmN0aW9uIHpuKGUsdCl7cmV0dXJuIGU/dD9lK1wiIFwiK3Q6ZTp0fHxcIlwifWZ1bmN0aW9uIFZuKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPVwiXCIscj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylvKHQ9Vm4oZVtyXSkpJiZcIlwiIT09dCYmKG4mJihuKz1cIiBcIiksbis9dCk7cmV0dXJuIG59KGUpOmMoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSllW25dJiYodCYmKHQrPVwiIFwiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpcIlwifXZhciBLbj17c3ZnOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixtYXRoOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwifSxKbj1oKFwiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3RcIikscW49aChcInN2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSxmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFuLHVzZSx2aWV3XCIsITApLFduPWZ1bmN0aW9uKGUpe3JldHVybiBKbihlKXx8cW4oZSl9O2Z1bmN0aW9uIFpuKGUpe3JldHVybiBxbihlKT9cInN2Z1wiOlwibWF0aFwiPT09ZT9cIm1hdGhcIjp2b2lkIDB9dmFyIEduPU9iamVjdC5jcmVhdGUobnVsbCksWG49aChcInRleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsXCIpO2Z1bmN0aW9uIFluKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik6ZX12YXIgUW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuXCJzZWxlY3RcIiE9PWU/bjoodC5kYXRhJiZ0LmRhdGEuYXR0cnMmJnZvaWQgMCE9PXQuZGF0YS5hdHRycy5tdWx0aXBsZSYmbi5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLFwibXVsdGlwbGVcIiksbil9LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS25bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsXCJcIil9fSksZXI9e2NyZWF0ZTpmdW5jdGlvbihlLHQpe3RyKHQpfSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXtlLmRhdGEucmVmIT09dC5kYXRhLnJlZiYmKHRyKGUsITApLHRyKHQpKX0sZGVzdHJveTpmdW5jdGlvbihlKXt0cihlLCEwKX19O2Z1bmN0aW9uIHRyKGUsdCl7dmFyIG49ZS5kYXRhLnJlZjtpZihvKG4pKXt2YXIgcj1lLmNvbnRleHQsaT1lLmNvbXBvbmVudEluc3RhbmNlfHxlLmVsbSxhPXIuJHJlZnM7dD9BcnJheS5pc0FycmF5KGFbbl0pP2coYVtuXSxpKTphW25dPT09aSYmKGFbbl09dm9pZCAwKTplLmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW25dKT9hW25dLmluZGV4T2YoaSk8MCYmYVtuXS5wdXNoKGkpOmFbbl09W2ldOmFbbl09aX19dmFyIG5yPW5ldyBoZShcIlwiLHt9LFtdKSxycj1bXCJjcmVhdGVcIixcImFjdGl2YXRlXCIsXCJ1cGRhdGVcIixcInJlbW92ZVwiLFwiZGVzdHJveVwiXTtmdW5jdGlvbiBpcihlLHQpe3JldHVybiBlLmtleT09PXQua2V5JiYoZS50YWc9PT10LnRhZyYmZS5pc0NvbW1lbnQ9PT10LmlzQ29tbWVudCYmbyhlLmRhdGEpPT09byh0LmRhdGEpJiZmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIiE9PWUudGFnKXJldHVybiEwO3ZhciBuLHI9byhuPWUuZGF0YSkmJm8obj1uLmF0dHJzKSYmbi50eXBlLGk9byhuPXQuZGF0YSkmJm8obj1uLmF0dHJzKSYmbi50eXBlO3JldHVybiByPT09aXx8WG4ocikmJlhuKGkpfShlLHQpfHxhKGUuaXNBc3luY1BsYWNlaG9sZGVyKSYmZS5hc3luY0ZhY3Rvcnk9PT10LmFzeW5jRmFjdG9yeSYmaSh0LmFzeW5jRmFjdG9yeS5lcnJvcikpfWZ1bmN0aW9uIG9yKGUsdCxuKXt2YXIgcixpLGE9e307Zm9yKHI9dDtyPD1uOysrcilvKGk9ZVtyXS5rZXkpJiYoYVtpXT1yKTtyZXR1cm4gYX12YXIgYXI9e2NyZWF0ZTpzcix1cGRhdGU6c3IsZGVzdHJveTpmdW5jdGlvbihlKXtzcihlLG5yKX19O2Z1bmN0aW9uIHNyKGUsdCl7KGUuZGF0YS5kaXJlY3RpdmVzfHx0LmRhdGEuZGlyZWN0aXZlcykmJmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG89ZT09PW5yLGE9dD09PW5yLHM9bHIoZS5kYXRhLmRpcmVjdGl2ZXMsZS5jb250ZXh0KSxjPWxyKHQuZGF0YS5kaXJlY3RpdmVzLHQuY29udGV4dCksbD1bXSx1PVtdO2ZvcihuIGluIGMpcj1zW25dLGk9Y1tuXSxyPyhpLm9sZFZhbHVlPXIudmFsdWUsaS5vbGRBcmc9ci5hcmcsZnIoaSxcInVwZGF0ZVwiLHQsZSksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJnUucHVzaChpKSk6KGZyKGksXCJiaW5kXCIsdCxlKSxpLmRlZiYmaS5kZWYuaW5zZXJ0ZWQmJmwucHVzaChpKSk7aWYobC5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjxsLmxlbmd0aDtuKyspZnIobFtuXSxcImluc2VydGVkXCIsdCxlKX07bz9zdCh0LFwiaW5zZXJ0XCIsZik6ZigpfWlmKHUubGVuZ3RoJiZzdCh0LFwicG9zdHBhdGNoXCIsZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPHUubGVuZ3RoO24rKylmcih1W25dLFwiY29tcG9uZW50VXBkYXRlZFwiLHQsZSl9KSwhbylmb3IobiBpbiBzKWNbbl18fGZyKHNbbl0sXCJ1bmJpbmRcIixlLGUsYSl9KGUsdCl9dmFyIGNyPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gbHIoZSx0KXt2YXIgbixyLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gaTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKShyPWVbbl0pLm1vZGlmaWVyc3x8KHIubW9kaWZpZXJzPWNyKSxpW3VyKHIpXT1yLHIuZGVmPVBlKHQuJG9wdGlvbnMsXCJkaXJlY3RpdmVzXCIsci5uYW1lKTtyZXR1cm4gaX1mdW5jdGlvbiB1cihlKXtyZXR1cm4gZS5yYXdOYW1lfHxlLm5hbWUrXCIuXCIrT2JqZWN0LmtleXMoZS5tb2RpZmllcnN8fHt9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBmcihlLHQsbixyLGkpe3ZhciBvPWUuZGVmJiZlLmRlZlt0XTtpZihvKXRyeXtvKG4uZWxtLGUsbixyLGkpfWNhdGNoKHIpe1VlKHIsbi5jb250ZXh0LFwiZGlyZWN0aXZlIFwiK2UubmFtZStcIiBcIit0K1wiIGhvb2tcIil9fXZhciBkcj1bZXIsYXJdO2Z1bmN0aW9uIHByKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zO2lmKCEobyhuKSYmITE9PT1uLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnN8fGkoZS5kYXRhLmF0dHJzKSYmaSh0LmRhdGEuYXR0cnMpKSl7dmFyIHIsYSxzPXQuZWxtLGM9ZS5kYXRhLmF0dHJzfHx7fSxsPXQuZGF0YS5hdHRyc3x8e307Zm9yKHIgaW4gbyhsLl9fb2JfXykmJihsPXQuZGF0YS5hdHRycz1UKHt9LGwpKSxsKWE9bFtyXSxjW3JdIT09YSYmdnIocyxyLGEpO2ZvcihyIGluKEd8fFkpJiZsLnZhbHVlIT09Yy52YWx1ZSYmdnIocyxcInZhbHVlXCIsbC52YWx1ZSksYylpKGxbcl0pJiYoUm4ocik/cy5yZW1vdmVBdHRyaWJ1dGVOUyhGbixIbihyKSk6Tm4ocil8fHMucmVtb3ZlQXR0cmlidXRlKHIpKX19ZnVuY3Rpb24gdnIoZSx0LG4pe2UudGFnTmFtZS5pbmRleE9mKFwiLVwiKT4tMT9ocihlLHQsbik6UG4odCk/Qm4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49XCJhbGxvd2Z1bGxzY3JlZW5cIj09PXQmJlwiRU1CRURcIj09PWUudGFnTmFtZT9cInRydWVcIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOk5uKHQpP2Uuc2V0QXR0cmlidXRlKHQsRG4odCxuKSk6Um4odCk/Qm4obik/ZS5yZW1vdmVBdHRyaWJ1dGVOUyhGbixIbih0KSk6ZS5zZXRBdHRyaWJ1dGVOUyhGbix0LG4pOmhyKGUsdCxuKX1mdW5jdGlvbiBocihlLHQsbil7aWYoQm4obikpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtpZihHJiYhWCYmXCJURVhUQVJFQVwiPT09ZS50YWdOYW1lJiZcInBsYWNlaG9sZGVyXCI9PT10JiZcIlwiIT09biYmIWUuX19pZXBoKXt2YXIgcj1mdW5jdGlvbih0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIscil9O2UuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsciksZS5fX2llcGg9ITB9ZS5zZXRBdHRyaWJ1dGUodCxuKX19dmFyIG1yPXtjcmVhdGU6cHIsdXBkYXRlOnByfTtmdW5jdGlvbiB5cihlLHQpe3ZhciBuPXQuZWxtLHI9dC5kYXRhLGE9ZS5kYXRhO2lmKCEoaShyLnN0YXRpY0NsYXNzKSYmaShyLmNsYXNzKSYmKGkoYSl8fGkoYS5zdGF0aWNDbGFzcykmJmkoYS5jbGFzcykpKSl7dmFyIHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuZGF0YSxuPWUscj1lO28oci5jb21wb25lbnRJbnN0YW5jZSk7KShyPXIuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKSYmci5kYXRhJiYodD1VbihyLmRhdGEsdCkpO2Zvcig7byhuPW4ucGFyZW50KTspbiYmbi5kYXRhJiYodD1Vbih0LG4uZGF0YSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBvKGUpfHxvKHQpP3puKGUsVm4odCkpOlwiXCJ9KHQuc3RhdGljQ2xhc3MsdC5jbGFzcyl9KHQpLGM9bi5fdHJhbnNpdGlvbkNsYXNzZXM7byhjKSYmKHM9em4ocyxWbihjKSkpLHMhPT1uLl9wcmV2Q2xhc3MmJihuLnNldEF0dHJpYnV0ZShcImNsYXNzXCIscyksbi5fcHJldkNsYXNzPXMpfX12YXIgZ3IsX3IsYnIsd3IsJHIseHIsQ3I9e2NyZWF0ZTp5cix1cGRhdGU6eXJ9LGtyPS9bXFx3KS4rXFwtXyRcXF1dLztmdW5jdGlvbiBBcihlKXt2YXIgdCxuLHIsaSxvLGE9ITEscz0hMSxjPSExLGw9ITEsdT0wLGY9MCxkPTAscD0wO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaWYobj10LHQ9ZS5jaGFyQ29kZUF0KHIpLGEpMzk9PT10JiY5MiE9PW4mJihhPSExKTtlbHNlIGlmKHMpMzQ9PT10JiY5MiE9PW4mJihzPSExKTtlbHNlIGlmKGMpOTY9PT10JiY5MiE9PW4mJihjPSExKTtlbHNlIGlmKGwpNDc9PT10JiY5MiE9PW4mJihsPSExKTtlbHNlIGlmKDEyNCE9PXR8fDEyND09PWUuY2hhckNvZGVBdChyKzEpfHwxMjQ9PT1lLmNoYXJDb2RlQXQoci0xKXx8dXx8Znx8ZCl7c3dpdGNoKHQpe2Nhc2UgMzQ6cz0hMDticmVhaztjYXNlIDM5OmE9ITA7YnJlYWs7Y2FzZSA5NjpjPSEwO2JyZWFrO2Nhc2UgNDA6ZCsrO2JyZWFrO2Nhc2UgNDE6ZC0tO2JyZWFrO2Nhc2UgOTE6ZisrO2JyZWFrO2Nhc2UgOTM6Zi0tO2JyZWFrO2Nhc2UgMTIzOnUrKzticmVhaztjYXNlIDEyNTp1LS19aWYoNDc9PT10KXtmb3IodmFyIHY9ci0xLGg9dm9pZCAwO3Y+PTAmJlwiIFwiPT09KGg9ZS5jaGFyQXQodikpO3YtLSk7aCYma3IudGVzdChoKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PWk/KHA9cisxLGk9ZS5zbGljZSgwLHIpLnRyaW0oKSk6bSgpO2Z1bmN0aW9uIG0oKXsob3x8KG89W10pKS5wdXNoKGUuc2xpY2UocCxyKS50cmltKCkpLHA9cisxfWlmKHZvaWQgMD09PWk/aT1lLnNsaWNlKDAscikudHJpbSgpOjAhPT1wJiZtKCksbylmb3Iocj0wO3I8by5sZW5ndGg7cisrKWk9U3IoaSxvW3JdKTtyZXR1cm4gaX1mdW5jdGlvbiBTcihlLHQpe3ZhciBuPXQuaW5kZXhPZihcIihcIik7aWYobjwwKXJldHVybidfZihcIicrdCsnXCIpKCcrZStcIilcIjt2YXIgcj10LnNsaWNlKDAsbiksaT10LnNsaWNlKG4rMSk7cmV0dXJuJ19mKFwiJytyKydcIikoJytlKyhcIilcIiE9PWk/XCIsXCIraTppKX1mdW5jdGlvbiBPcihlLHQpe2NvbnNvbGUuZXJyb3IoXCJbVnVlIGNvbXBpbGVyXTogXCIrZSl9ZnVuY3Rpb24gVHIoZSx0KXtyZXR1cm4gZT9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZVt0XX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pOltdfWZ1bmN0aW9uIEVyKGUsdCxuLHIsaSl7KGUucHJvcHN8fChlLnByb3BzPVtdKSkucHVzaChScih7bmFtZTp0LHZhbHVlOm4sZHluYW1pYzppfSxyKSksZS5wbGFpbj0hMX1mdW5jdGlvbiBJcihlLHQsbixyLGkpeyhpP2UuZHluYW1pY0F0dHJzfHwoZS5keW5hbWljQXR0cnM9W10pOmUuYXR0cnN8fChlLmF0dHJzPVtdKSkucHVzaChScih7bmFtZTp0LHZhbHVlOm4sZHluYW1pYzppfSxyKSksZS5wbGFpbj0hMX1mdW5jdGlvbiBqcihlLHQsbixyKXtlLmF0dHJzTWFwW3RdPW4sZS5hdHRyc0xpc3QucHVzaChScih7bmFtZTp0LHZhbHVlOm59LHIpKX1mdW5jdGlvbiBMcihlLHQsbixyLGksbyxhLHMpeyhlLmRpcmVjdGl2ZXN8fChlLmRpcmVjdGl2ZXM9W10pKS5wdXNoKFJyKHtuYW1lOnQscmF3TmFtZTpuLHZhbHVlOnIsYXJnOmksaXNEeW5hbWljQXJnOm8sbW9kaWZpZXJzOmF9LHMpKSxlLnBsYWluPSExfWZ1bmN0aW9uIE5yKGUsdCxuKXtyZXR1cm4gbj9cIl9wKFwiK3QrJyxcIicrZSsnXCIpJzplK3R9ZnVuY3Rpb24gTXIoZSx0LG4saSxvLGEscyxjKXt2YXIgbDsoaT1pfHxyKS5yaWdodD9jP3Q9XCIoXCIrdCtcIik9PT0nY2xpY2snPydjb250ZXh0bWVudSc6KFwiK3QrXCIpXCI6XCJjbGlja1wiPT09dCYmKHQ9XCJjb250ZXh0bWVudVwiLGRlbGV0ZSBpLnJpZ2h0KTppLm1pZGRsZSYmKGM/dD1cIihcIit0K1wiKT09PSdjbGljayc/J21vdXNldXAnOihcIit0K1wiKVwiOlwiY2xpY2tcIj09PXQmJih0PVwibW91c2V1cFwiKSksaS5jYXB0dXJlJiYoZGVsZXRlIGkuY2FwdHVyZSx0PU5yKFwiIVwiLHQsYykpLGkub25jZSYmKGRlbGV0ZSBpLm9uY2UsdD1OcihcIn5cIix0LGMpKSxpLnBhc3NpdmUmJihkZWxldGUgaS5wYXNzaXZlLHQ9TnIoXCImXCIsdCxjKSksaS5uYXRpdmU/KGRlbGV0ZSBpLm5hdGl2ZSxsPWUubmF0aXZlRXZlbnRzfHwoZS5uYXRpdmVFdmVudHM9e30pKTpsPWUuZXZlbnRzfHwoZS5ldmVudHM9e30pO3ZhciB1PVJyKHt2YWx1ZTpuLnRyaW0oKSxkeW5hbWljOmN9LHMpO2khPT1yJiYodS5tb2RpZmllcnM9aSk7dmFyIGY9bFt0XTtBcnJheS5pc0FycmF5KGYpP28/Zi51bnNoaWZ0KHUpOmYucHVzaCh1KTpsW3RdPWY/bz9bdSxmXTpbZix1XTp1LGUucGxhaW49ITF9ZnVuY3Rpb24gRHIoZSx0LG4pe3ZhciByPVByKGUsXCI6XCIrdCl8fFByKGUsXCJ2LWJpbmQ6XCIrdCk7aWYobnVsbCE9cilyZXR1cm4gQXIocik7aWYoITEhPT1uKXt2YXIgaT1QcihlLHQpO2lmKG51bGwhPWkpcmV0dXJuIEpTT04uc3RyaW5naWZ5KGkpfX1mdW5jdGlvbiBQcihlLHQsbil7dmFyIHI7aWYobnVsbCE9KHI9ZS5hdHRyc01hcFt0XSkpZm9yKHZhciBpPWUuYXR0cnNMaXN0LG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYoaVtvXS5uYW1lPT09dCl7aS5zcGxpY2UobywxKTticmVha31yZXR1cm4gbiYmZGVsZXRlIGUuYXR0cnNNYXBbdF0scn1mdW5jdGlvbiBGcihlLHQpe2Zvcih2YXIgbj1lLmF0dHJzTGlzdCxyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdO2lmKHQudGVzdChvLm5hbWUpKXJldHVybiBuLnNwbGljZShyLDEpLG99fWZ1bmN0aW9uIFJyKGUsdCl7cmV0dXJuIHQmJihudWxsIT10LnN0YXJ0JiYoZS5zdGFydD10LnN0YXJ0KSxudWxsIT10LmVuZCYmKGUuZW5kPXQuZW5kKSksZX1mdW5jdGlvbiBIcihlLHQsbil7dmFyIHI9bnx8e30saT1yLm51bWJlcixvPVwiJCR2XCI7ci50cmltJiYobz1cIih0eXBlb2YgJCR2ID09PSAnc3RyaW5nJz8gJCR2LnRyaW0oKTogJCR2KVwiKSxpJiYobz1cIl9uKFwiK28rXCIpXCIpO3ZhciBhPUJyKHQsbyk7ZS5tb2RlbD17dmFsdWU6XCIoXCIrdCtcIilcIixleHByZXNzaW9uOkpTT04uc3RyaW5naWZ5KHQpLGNhbGxiYWNrOlwiZnVuY3Rpb24gKCQkdikge1wiK2ErXCJ9XCJ9fWZ1bmN0aW9uIEJyKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7aWYoZT1lLnRyaW0oKSxncj1lLmxlbmd0aCxlLmluZGV4T2YoXCJbXCIpPDB8fGUubGFzdEluZGV4T2YoXCJdXCIpPGdyLTEpcmV0dXJuKHdyPWUubGFzdEluZGV4T2YoXCIuXCIpKT4tMT97ZXhwOmUuc2xpY2UoMCx3ciksa2V5OidcIicrZS5zbGljZSh3cisxKSsnXCInfTp7ZXhwOmUsa2V5Om51bGx9O2Zvcihfcj1lLHdyPSRyPXhyPTA7IXpyKCk7KVZyKGJyPVVyKCkpP0pyKGJyKTo5MT09PWJyJiZLcihicik7cmV0dXJue2V4cDplLnNsaWNlKDAsJHIpLGtleTplLnNsaWNlKCRyKzEseHIpfX0oZSk7cmV0dXJuIG51bGw9PT1uLmtleT9lK1wiPVwiK3Q6XCIkc2V0KFwiK24uZXhwK1wiLCBcIituLmtleStcIiwgXCIrdCtcIilcIn1mdW5jdGlvbiBVcigpe3JldHVybiBfci5jaGFyQ29kZUF0KCsrd3IpfWZ1bmN0aW9uIHpyKCl7cmV0dXJuIHdyPj1ncn1mdW5jdGlvbiBWcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gS3IoZSl7dmFyIHQ9MTtmb3IoJHI9d3I7IXpyKCk7KWlmKFZyKGU9VXIoKSkpSnIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7eHI9d3I7YnJlYWt9fWZ1bmN0aW9uIEpyKGUpe2Zvcih2YXIgdD1lOyF6cigpJiYoZT1VcigpKSE9PXQ7KTt9dmFyIHFyLFdyPVwiX19yXCIsWnI9XCJfX2NcIjtmdW5jdGlvbiBHcihlLHQsbil7dmFyIHI9cXI7cmV0dXJuIGZ1bmN0aW9uIGkoKXtudWxsIT09dC5hcHBseShudWxsLGFyZ3VtZW50cykmJlFyKGUsaSxuLHIpfX12YXIgWHI9cWUmJiEoZWUmJk51bWJlcihlZVsxXSk8PTUzKTtmdW5jdGlvbiBZcihlLHQsbixyKXtpZihYcil7dmFyIGk9bG4sbz10O3Q9by5fd3JhcHBlcj1mdW5jdGlvbihlKXtpZihlLnRhcmdldD09PWUuY3VycmVudFRhcmdldHx8ZS50aW1lU3RhbXA+PWl8fGUudGltZVN0YW1wPD0wfHxlLnRhcmdldC5vd25lckRvY3VtZW50IT09ZG9jdW1lbnQpcmV0dXJuIG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1xci5hZGRFdmVudExpc3RlbmVyKGUsdCxuZT97Y2FwdHVyZTpuLHBhc3NpdmU6cn06bil9ZnVuY3Rpb24gUXIoZSx0LG4scil7KHJ8fHFyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd3JhcHBlcnx8dCxuKX1mdW5jdGlvbiBlaShlLHQpe2lmKCFpKGUuZGF0YS5vbil8fCFpKHQuZGF0YS5vbikpe3ZhciBuPXQuZGF0YS5vbnx8e30scj1lLmRhdGEub258fHt9O3FyPXQuZWxtLGZ1bmN0aW9uKGUpe2lmKG8oZVtXcl0pKXt2YXIgdD1HP1wiY2hhbmdlXCI6XCJpbnB1dFwiO2VbdF09W10uY29uY2F0KGVbV3JdLGVbdF18fFtdKSxkZWxldGUgZVtXcl19byhlW1pyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtacl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtacl0pfShuKSxhdChuLHIsWXIsUXIsR3IsdC5jb250ZXh0KSxxcj12b2lkIDB9fXZhciB0aSxuaT17Y3JlYXRlOmVpLHVwZGF0ZTplaX07ZnVuY3Rpb24gcmkoZSx0KXtpZighaShlLmRhdGEuZG9tUHJvcHMpfHwhaSh0LmRhdGEuZG9tUHJvcHMpKXt2YXIgbixyLGE9dC5lbG0scz1lLmRhdGEuZG9tUHJvcHN8fHt9LGM9dC5kYXRhLmRvbVByb3BzfHx7fTtmb3IobiBpbiBvKGMuX19vYl9fKSYmKGM9dC5kYXRhLmRvbVByb3BzPVQoe30sYykpLHMpbiBpbiBjfHwoYVtuXT1cIlwiKTtmb3IobiBpbiBjKXtpZihyPWNbbl0sXCJ0ZXh0Q29udGVudFwiPT09bnx8XCJpbm5lckhUTUxcIj09PW4pe2lmKHQuY2hpbGRyZW4mJih0LmNoaWxkcmVuLmxlbmd0aD0wKSxyPT09c1tuXSljb250aW51ZTsxPT09YS5jaGlsZE5vZGVzLmxlbmd0aCYmYS5yZW1vdmVDaGlsZChhLmNoaWxkTm9kZXNbMF0pfWlmKFwidmFsdWVcIj09PW4mJlwiUFJPR1JFU1NcIiE9PWEudGFnTmFtZSl7YS5fdmFsdWU9cjt2YXIgbD1pKHIpP1wiXCI6U3RyaW5nKHIpO2lpKGEsbCkmJihhLnZhbHVlPWwpfWVsc2UgaWYoXCJpbm5lckhUTUxcIj09PW4mJnFuKGEudGFnTmFtZSkmJmkoYS5pbm5lckhUTUwpKXsodGk9dGl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1cIjxzdmc+XCIrcitcIjwvc3ZnPlwiO2Zvcih2YXIgdT10aS5maXJzdENoaWxkO2EuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcig7dS5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKHUuZmlyc3RDaGlsZCl9ZWxzZSBpZihyIT09c1tuXSl0cnl7YVtuXT1yfWNhdGNoKGUpe319fX1mdW5jdGlvbiBpaShlLHQpe3JldHVybiFlLmNvbXBvc2luZyYmKFwiT1BUSU9OXCI9PT1lLnRhZ05hbWV8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ITA7dHJ5e249ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWV9Y2F0Y2goZSl7fXJldHVybiBuJiZlLnZhbHVlIT09dH0oZSx0KXx8ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5fdk1vZGlmaWVycztpZihvKHIpKXtpZihyLm51bWJlcilyZXR1cm4gdihuKSE9PXYodCk7aWYoci50cmltKXJldHVybiBuLnRyaW0oKSE9PXQudHJpbSgpfXJldHVybiBuIT09dH0oZSx0KSl9dmFyIG9pPXtjcmVhdGU6cmksdXBkYXRlOnJpfSxhaT13KGZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXFwpKS9nKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPWUuc3BsaXQobik7ci5sZW5ndGg+MSYmKHRbclswXS50cmltKCldPXJbMV0udHJpbSgpKX19KSx0fSk7ZnVuY3Rpb24gc2koZSl7dmFyIHQ9Y2koZS5zdHlsZSk7cmV0dXJuIGUuc3RhdGljU3R5bGU/VChlLnN0YXRpY1N0eWxlLHQpOnR9ZnVuY3Rpb24gY2koZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/RShlKTpcInN0cmluZ1wiPT10eXBlb2YgZT9haShlKTplfXZhciBsaSx1aT0vXi0tLyxmaT0vXFxzKiFpbXBvcnRhbnQkLyxkaT1mdW5jdGlvbihlLHQsbil7aWYodWkudGVzdCh0KSllLnN0eWxlLnNldFByb3BlcnR5KHQsbik7ZWxzZSBpZihmaS50ZXN0KG4pKWUuc3R5bGUuc2V0UHJvcGVydHkoQSh0KSxuLnJlcGxhY2UoZmksXCJcIiksXCJpbXBvcnRhbnRcIik7ZWxzZXt2YXIgcj12aSh0KTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgaT0wLG89bi5sZW5ndGg7aTxvO2krKyllLnN0eWxlW3JdPW5baV07ZWxzZSBlLnN0eWxlW3JdPW59fSxwaT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0sdmk9dyhmdW5jdGlvbihlKXtpZihsaT1saXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSxcImZpbHRlclwiIT09KGU9eChlKSkmJmUgaW4gbGkpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxwaS5sZW5ndGg7bisrKXt2YXIgcj1waVtuXSt0O2lmKHIgaW4gbGkpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gaGkoZSx0KXt2YXIgbj10LmRhdGEscj1lLmRhdGE7aWYoIShpKG4uc3RhdGljU3R5bGUpJiZpKG4uc3R5bGUpJiZpKHIuc3RhdGljU3R5bGUpJiZpKHIuc3R5bGUpKSl7dmFyIGEscyxjPXQuZWxtLGw9ci5zdGF0aWNTdHlsZSx1PXIubm9ybWFsaXplZFN0eWxlfHxyLnN0eWxlfHx7fSxmPWx8fHUsZD1jaSh0LmRhdGEuc3R5bGUpfHx7fTt0LmRhdGEubm9ybWFsaXplZFN0eWxlPW8oZC5fX29iX18pP1Qoe30sZCk6ZDt2YXIgcD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPXt9LGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49c2koaS5kYXRhKSkmJlQocixuKTsobj1zaShlLmRhdGEpKSYmVChyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49c2koby5kYXRhKSkmJlQocixuKTtyZXR1cm4gcn0odCk7Zm9yKHMgaW4gZilpKHBbc10pJiZkaShjLHMsXCJcIik7Zm9yKHMgaW4gcCkoYT1wW3NdKSE9PWZbc10mJmRpKGMscyxudWxsPT1hP1wiXCI6YSl9fXZhciBtaT17Y3JlYXRlOmhpLHVwZGF0ZTpoaX0seWk9L1xccysvO2Z1bmN0aW9uIGdpKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZihcIiBcIik+LTE/dC5zcGxpdCh5aSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKHQpfSk6ZS5jbGFzc0xpc3QuYWRkKHQpO2Vsc2V7dmFyIG49XCIgXCIrKGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIFwiO24uaW5kZXhPZihcIiBcIit0K1wiIFwiKTwwJiZlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsKG4rdCkudHJpbSgpKX19ZnVuY3Rpb24gX2koZSx0KXtpZih0JiYodD10LnRyaW0oKSkpaWYoZS5jbGFzc0xpc3QpdC5pbmRleE9mKFwiIFwiKT4tMT90LnNwbGl0KHlpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUodCl9KTplLmNsYXNzTGlzdC5yZW1vdmUodCksZS5jbGFzc0xpc3QubGVuZ3RofHxlLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpO2Vsc2V7Zm9yKHZhciBuPVwiIFwiKyhlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKStcIiBcIixyPVwiIFwiK3QrXCIgXCI7bi5pbmRleE9mKHIpPj0wOyluPW4ucmVwbGFjZShyLFwiIFwiKTsobj1uLnRyaW0oKSk/ZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLG4pOmUucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIil9fWZ1bmN0aW9uIGJpKGUpe2lmKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZUKHQsd2koZS5uYW1lfHxcInZcIikpLFQodCxlKSx0fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP3dpKGUpOnZvaWQgMH19dmFyIHdpPXcoZnVuY3Rpb24oZSl7cmV0dXJue2VudGVyQ2xhc3M6ZStcIi1lbnRlclwiLGVudGVyVG9DbGFzczplK1wiLWVudGVyLXRvXCIsZW50ZXJBY3RpdmVDbGFzczplK1wiLWVudGVyLWFjdGl2ZVwiLGxlYXZlQ2xhc3M6ZStcIi1sZWF2ZVwiLGxlYXZlVG9DbGFzczplK1wiLWxlYXZlLXRvXCIsbGVhdmVBY3RpdmVDbGFzczplK1wiLWxlYXZlLWFjdGl2ZVwifX0pLCRpPUomJiFYLHhpPVwidHJhbnNpdGlvblwiLENpPVwiYW5pbWF0aW9uXCIsa2k9XCJ0cmFuc2l0aW9uXCIsQWk9XCJ0cmFuc2l0aW9uZW5kXCIsU2k9XCJhbmltYXRpb25cIixPaT1cImFuaW1hdGlvbmVuZFwiOyRpJiYodm9pZCAwPT09d2luZG93Lm9udHJhbnNpdGlvbmVuZCYmdm9pZCAwIT09d2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCYmKGtpPVwiV2Via2l0VHJhbnNpdGlvblwiLEFpPVwid2Via2l0VHJhbnNpdGlvbkVuZFwiKSx2b2lkIDA9PT13aW5kb3cub25hbmltYXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCYmKFNpPVwiV2Via2l0QW5pbWF0aW9uXCIsT2k9XCJ3ZWJraXRBbmltYXRpb25FbmRcIikpO3ZhciBUaT1KP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiBFaShlKXtUaShmdW5jdGlvbigpe1RpKGUpfSl9ZnVuY3Rpb24gSWkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxnaShlLHQpKX1mdW5jdGlvbiBqaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZnKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLF9pKGUsdCl9ZnVuY3Rpb24gTGkoZSx0LG4pe3ZhciByPU1pKGUsdCksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT14aT9BaTpPaSxjPTAsbD1mdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLHUpLG4oKX0sdT1mdW5jdGlvbih0KXt0LnRhcmdldD09PWUmJisrYz49YSYmbCgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZsKCl9LG8rMSksZS5hZGRFdmVudExpc3RlbmVyKHMsdSl9dmFyIE5pPS9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87ZnVuY3Rpb24gTWkoZSx0KXt2YXIgbixyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLGk9KHJba2krXCJEZWxheVwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxvPShyW2tpK1wiRHVyYXRpb25cIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksYT1EaShpLG8pLHM9KHJbU2krXCJEZWxheVwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxjPShyW1NpK1wiRHVyYXRpb25cIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksbD1EaShzLGMpLHU9MCxmPTA7cmV0dXJuIHQ9PT14aT9hPjAmJihuPXhpLHU9YSxmPW8ubGVuZ3RoKTp0PT09Q2k/bD4wJiYobj1DaSx1PWwsZj1jLmxlbmd0aCk6Zj0obj0odT1NYXRoLm1heChhLGwpKT4wP2E+bD94aTpDaTpudWxsKT9uPT09eGk/by5sZW5ndGg6Yy5sZW5ndGg6MCx7dHlwZTpuLHRpbWVvdXQ6dSxwcm9wQ291bnQ6ZixoYXNUcmFuc2Zvcm06bj09PXhpJiZOaS50ZXN0KHJba2krXCJQcm9wZXJ0eVwiXSl9fWZ1bmN0aW9uIERpKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBQaSh0KStQaShlW25dKX0pKX1mdW5jdGlvbiBQaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpLnJlcGxhY2UoXCIsXCIsXCIuXCIpKX1mdW5jdGlvbiBGaShlLHQpe3ZhciBuPWUuZWxtO28obi5fbGVhdmVDYikmJihuLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxuLl9sZWF2ZUNiKCkpO3ZhciByPWJpKGUuZGF0YS50cmFuc2l0aW9uKTtpZighaShyKSYmIW8obi5fZW50ZXJDYikmJjE9PT1uLm5vZGVUeXBlKXtmb3IodmFyIGE9ci5jc3Mscz1yLnR5cGUsbD1yLmVudGVyQ2xhc3MsdT1yLmVudGVyVG9DbGFzcyxmPXIuZW50ZXJBY3RpdmVDbGFzcyxkPXIuYXBwZWFyQ2xhc3MscD1yLmFwcGVhclRvQ2xhc3MsaD1yLmFwcGVhckFjdGl2ZUNsYXNzLG09ci5iZWZvcmVFbnRlcix5PXIuZW50ZXIsZz1yLmFmdGVyRW50ZXIsXz1yLmVudGVyQ2FuY2VsbGVkLGI9ci5iZWZvcmVBcHBlYXIsdz1yLmFwcGVhciwkPXIuYWZ0ZXJBcHBlYXIseD1yLmFwcGVhckNhbmNlbGxlZCxDPXIuZHVyYXRpb24saz1YdCxBPVh0LiR2bm9kZTtBJiZBLnBhcmVudDspaz1BLmNvbnRleHQsQT1BLnBhcmVudDt2YXIgUz0hay5faXNNb3VudGVkfHwhZS5pc1Jvb3RJbnNlcnQ7aWYoIVN8fHd8fFwiXCI9PT13KXt2YXIgTz1TJiZkP2Q6bCxUPVMmJmg/aDpmLEU9UyYmcD9wOnUsST1TJiZifHxtLGo9UyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygdz93OnksTD1TJiYkfHxnLE49UyYmeHx8XyxNPXYoYyhDKT9DLmVudGVyOkMpLFA9ITEhPT1hJiYhWCxGPUJpKGopLFI9bi5fZW50ZXJDYj1EKGZ1bmN0aW9uKCl7UCYmKGppKG4sRSksamkobixUKSksUi5jYW5jZWxsZWQ/KFAmJmppKG4sTyksTiYmTihuKSk6TCYmTChuKSxuLl9lbnRlckNiPW51bGx9KTtlLmRhdGEuc2hvd3x8c3QoZSxcImluc2VydFwiLGZ1bmN0aW9uKCl7dmFyIHQ9bi5wYXJlbnROb2RlLHI9dCYmdC5fcGVuZGluZyYmdC5fcGVuZGluZ1tlLmtleV07ciYmci50YWc9PT1lLnRhZyYmci5lbG0uX2xlYXZlQ2ImJnIuZWxtLl9sZWF2ZUNiKCksaiYmaihuLFIpfSksSSYmSShuKSxQJiYoSWkobixPKSxJaShuLFQpLEVpKGZ1bmN0aW9uKCl7amkobixPKSxSLmNhbmNlbGxlZHx8KElpKG4sRSksRnx8KEhpKE0pP3NldFRpbWVvdXQoUixNKTpMaShuLHMsUikpKX0pKSxlLmRhdGEuc2hvdyYmKHQmJnQoKSxqJiZqKG4sUikpLFB8fEZ8fFIoKX19fWZ1bmN0aW9uIFJpKGUsdCl7dmFyIG49ZS5lbG07byhuLl9lbnRlckNiKSYmKG4uX2VudGVyQ2IuY2FuY2VsbGVkPSEwLG4uX2VudGVyQ2IoKSk7dmFyIHI9YmkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKGkocil8fDEhPT1uLm5vZGVUeXBlKXJldHVybiB0KCk7aWYoIW8obi5fbGVhdmVDYikpe3ZhciBhPXIuY3NzLHM9ci50eXBlLGw9ci5sZWF2ZUNsYXNzLHU9ci5sZWF2ZVRvQ2xhc3MsZj1yLmxlYXZlQWN0aXZlQ2xhc3MsZD1yLmJlZm9yZUxlYXZlLHA9ci5sZWF2ZSxoPXIuYWZ0ZXJMZWF2ZSxtPXIubGVhdmVDYW5jZWxsZWQseT1yLmRlbGF5TGVhdmUsZz1yLmR1cmF0aW9uLF89ITEhPT1hJiYhWCxiPUJpKHApLHc9dihjKGcpP2cubGVhdmU6ZyksJD1uLl9sZWF2ZUNiPUQoZnVuY3Rpb24oKXtuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5fcGVuZGluZyYmKG4ucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksXyYmKGppKG4sdSksamkobixmKSksJC5jYW5jZWxsZWQ/KF8mJmppKG4sbCksbSYmbShuKSk6KHQoKSxoJiZoKG4pKSxuLl9sZWF2ZUNiPW51bGx9KTt5P3koeCk6eCgpfWZ1bmN0aW9uIHgoKXskLmNhbmNlbGxlZHx8KCFlLmRhdGEuc2hvdyYmbi5wYXJlbnROb2RlJiYoKG4ucGFyZW50Tm9kZS5fcGVuZGluZ3x8KG4ucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxkJiZkKG4pLF8mJihJaShuLGwpLElpKG4sZiksRWkoZnVuY3Rpb24oKXtqaShuLGwpLCQuY2FuY2VsbGVkfHwoSWkobix1KSxifHwoSGkodyk/c2V0VGltZW91dCgkLHcpOkxpKG4scywkKSkpfSkpLHAmJnAobiwkKSxffHxifHwkKCkpfX1mdW5jdGlvbiBIaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmIWlzTmFOKGUpfWZ1bmN0aW9uIEJpKGUpe2lmKGkoZSkpcmV0dXJuITE7dmFyIHQ9ZS5mbnM7cmV0dXJuIG8odCk/QmkoQXJyYXkuaXNBcnJheSh0KT90WzBdOnQpOihlLl9sZW5ndGh8fGUubGVuZ3RoKT4xfWZ1bmN0aW9uIFVpKGUsdCl7ITAhPT10LmRhdGEuc2hvdyYmRmkodCl9dmFyIHppPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj17fSxjPWUubW9kdWxlcyxsPWUubm9kZU9wcztmb3IodD0wO3Q8cnIubGVuZ3RoOysrdClmb3Iocltyclt0XV09W10sbj0wO248Yy5sZW5ndGg7KytuKW8oY1tuXVtyclt0XV0pJiZyW3JyW3RdXS5wdXNoKGNbbl1bcnJbdF1dKTtmdW5jdGlvbiB1KGUpe3ZhciB0PWwucGFyZW50Tm9kZShlKTtvKHQpJiZsLnJlbW92ZUNoaWxkKHQsZSl9ZnVuY3Rpb24gZihlLHQsbixpLHMsYyx1KXtpZihvKGUuZWxtKSYmbyhjKSYmKGU9Y1t1XT1fZShlKSksZS5pc1Jvb3RJbnNlcnQ9IXMsIWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUuZGF0YTtpZihvKHMpKXt2YXIgYz1vKGUuY29tcG9uZW50SW5zdGFuY2UpJiZzLmtlZXBBbGl2ZTtpZihvKHM9cy5ob29rKSYmbyhzPXMuaW5pdCkmJnMoZSwhMSksbyhlLmNvbXBvbmVudEluc3RhbmNlKSlyZXR1cm4gZChlLHQpLHAobixlLmVsbSxpKSxhKGMpJiZmdW5jdGlvbihlLHQsbixpKXtmb3IodmFyIGEscz1lO3MuY29tcG9uZW50SW5zdGFuY2U7KWlmKG8oYT0ocz1zLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkuZGF0YSkmJm8oYT1hLnRyYW5zaXRpb24pKXtmb3IoYT0wO2E8ci5hY3RpdmF0ZS5sZW5ndGg7KythKXIuYWN0aXZhdGVbYV0obnIscyk7dC5wdXNoKHMpO2JyZWFrfXAobixlLmVsbSxpKX0oZSx0LG4saSksITB9fShlLHQsbixpKSl7dmFyIGY9ZS5kYXRhLGg9ZS5jaGlsZHJlbixtPWUudGFnO28obSk/KGUuZWxtPWUubnM/bC5jcmVhdGVFbGVtZW50TlMoZS5ucyxtKTpsLmNyZWF0ZUVsZW1lbnQobSxlKSxnKGUpLHYoZSxoLHQpLG8oZikmJnkoZSx0KSxwKG4sZS5lbG0saSkpOmEoZS5pc0NvbW1lbnQpPyhlLmVsbT1sLmNyZWF0ZUNvbW1lbnQoZS50ZXh0KSxwKG4sZS5lbG0saSkpOihlLmVsbT1sLmNyZWF0ZVRleHROb2RlKGUudGV4dCkscChuLGUuZWxtLGkpKX19ZnVuY3Rpb24gZChlLHQpe28oZS5kYXRhLnBlbmRpbmdJbnNlcnQpJiYodC5wdXNoLmFwcGx5KHQsZS5kYXRhLnBlbmRpbmdJbnNlcnQpLGUuZGF0YS5wZW5kaW5nSW5zZXJ0PW51bGwpLGUuZWxtPWUuY29tcG9uZW50SW5zdGFuY2UuJGVsLG0oZSk/KHkoZSx0KSxnKGUpKToodHIoZSksdC5wdXNoKGUpKX1mdW5jdGlvbiBwKGUsdCxuKXtvKGUpJiYobyhuKT9sLnBhcmVudE5vZGUobik9PT1lJiZsLmluc2VydEJlZm9yZShlLHQsbik6bC5hcHBlbmRDaGlsZChlLHQpKX1mdW5jdGlvbiB2KGUsdCxuKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWYodFtyXSxuLGUuZWxtLG51bGwsITAsdCxyKTtlbHNlIHMoZS50ZXh0KSYmbC5hcHBlbmRDaGlsZChlLmVsbSxsLmNyZWF0ZVRleHROb2RlKFN0cmluZyhlLnRleHQpKSl9ZnVuY3Rpb24gbShlKXtmb3IoO2UuY29tcG9uZW50SW5zdGFuY2U7KWU9ZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7cmV0dXJuIG8oZS50YWcpfWZ1bmN0aW9uIHkoZSxuKXtmb3IodmFyIGk9MDtpPHIuY3JlYXRlLmxlbmd0aDsrK2kpci5jcmVhdGVbaV0obnIsZSk7byh0PWUuZGF0YS5ob29rKSYmKG8odC5jcmVhdGUpJiZ0LmNyZWF0ZShucixlKSxvKHQuaW5zZXJ0KSYmbi5wdXNoKGUpKX1mdW5jdGlvbiBnKGUpe3ZhciB0O2lmKG8odD1lLmZuU2NvcGVJZCkpbC5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpO2Vsc2UgZm9yKHZhciBuPWU7bjspbyh0PW4uY29udGV4dCkmJm8odD10LiRvcHRpb25zLl9zY29wZUlkKSYmbC5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpLG49bi5wYXJlbnQ7byh0PVh0KSYmdCE9PWUuY29udGV4dCYmdCE9PWUuZm5Db250ZXh0JiZvKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJmwuc2V0U3R5bGVTY29wZShlLmVsbSx0KX1mdW5jdGlvbiBfKGUsdCxuLHIsaSxvKXtmb3IoO3I8PWk7KytyKWYobltyXSxvLGUsdCwhMSxuLHIpfWZ1bmN0aW9uIGIoZSl7dmFyIHQsbixpPWUuZGF0YTtpZihvKGkpKWZvcihvKHQ9aS5ob29rKSYmbyh0PXQuZGVzdHJveSkmJnQoZSksdD0wO3Q8ci5kZXN0cm95Lmxlbmd0aDsrK3Qpci5kZXN0cm95W3RdKGUpO2lmKG8odD1lLmNoaWxkcmVuKSlmb3Iobj0wO248ZS5jaGlsZHJlbi5sZW5ndGg7KytuKWIoZS5jaGlsZHJlbltuXSl9ZnVuY3Rpb24gdyhlLHQsbixyKXtmb3IoO248PXI7KytuKXt2YXIgaT10W25dO28oaSkmJihvKGkudGFnKT8oJChpKSxiKGkpKTp1KGkuZWxtKSl9fWZ1bmN0aW9uICQoZSx0KXtpZihvKHQpfHxvKGUuZGF0YSkpe3ZhciBuLGk9ci5yZW1vdmUubGVuZ3RoKzE7Zm9yKG8odCk/dC5saXN0ZW5lcnMrPWk6dD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXswPT0tLW4ubGlzdGVuZXJzJiZ1KGUpfXJldHVybiBuLmxpc3RlbmVycz10LG59KGUuZWxtLGkpLG8obj1lLmNvbXBvbmVudEluc3RhbmNlKSYmbyhuPW4uX3Zub2RlKSYmbyhuLmRhdGEpJiYkKG4sdCksbj0wO248ci5yZW1vdmUubGVuZ3RoOysrbilyLnJlbW92ZVtuXShlLHQpO28obj1lLmRhdGEuaG9vaykmJm8obj1uLnJlbW92ZSk/bihlLHQpOnQoKX1lbHNlIHUoZS5lbG0pfWZ1bmN0aW9uIHgoZSx0LG4scil7Zm9yKHZhciBpPW47aTxyO2krKyl7dmFyIGE9dFtpXTtpZihvKGEpJiZpcihlLGEpKXJldHVybiBpfX1mdW5jdGlvbiBDKGUsdCxuLHMsYyx1KXtpZihlIT09dCl7byh0LmVsbSkmJm8ocykmJih0PXNbY109X2UodCkpO3ZhciBkPXQuZWxtPWUuZWxtO2lmKGEoZS5pc0FzeW5jUGxhY2Vob2xkZXIpKW8odC5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpP1MoZS5lbG0sdCxuKTp0LmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtlbHNlIGlmKGEodC5pc1N0YXRpYykmJmEoZS5pc1N0YXRpYykmJnQua2V5PT09ZS5rZXkmJihhKHQuaXNDbG9uZWQpfHxhKHQuaXNPbmNlKSkpdC5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlO2Vsc2V7dmFyIHAsdj10LmRhdGE7byh2KSYmbyhwPXYuaG9vaykmJm8ocD1wLnByZXBhdGNoKSYmcChlLHQpO3ZhciBoPWUuY2hpbGRyZW4seT10LmNoaWxkcmVuO2lmKG8odikmJm0odCkpe2ZvcihwPTA7cDxyLnVwZGF0ZS5sZW5ndGg7KytwKXIudXBkYXRlW3BdKGUsdCk7byhwPXYuaG9vaykmJm8ocD1wLnVwZGF0ZSkmJnAoZSx0KX1pKHQudGV4dCk/byhoKSYmbyh5KT9oIT09eSYmZnVuY3Rpb24oZSx0LG4scixhKXtmb3IodmFyIHMsYyx1LGQ9MCxwPTAsdj10Lmxlbmd0aC0xLGg9dFswXSxtPXRbdl0seT1uLmxlbmd0aC0xLGc9blswXSxiPW5beV0sJD0hYTtkPD12JiZwPD15OylpKGgpP2g9dFsrK2RdOmkobSk/bT10Wy0tdl06aXIoaCxnKT8oQyhoLGcscixuLHApLGg9dFsrK2RdLGc9blsrK3BdKTppcihtLGIpPyhDKG0sYixyLG4seSksbT10Wy0tdl0sYj1uWy0teV0pOmlyKGgsYik/KEMoaCxiLHIsbix5KSwkJiZsLmluc2VydEJlZm9yZShlLGguZWxtLGwubmV4dFNpYmxpbmcobS5lbG0pKSxoPXRbKytkXSxiPW5bLS15XSk6aXIobSxnKT8oQyhtLGcscixuLHApLCQmJmwuaW5zZXJ0QmVmb3JlKGUsbS5lbG0saC5lbG0pLG09dFstLXZdLGc9blsrK3BdKTooaShzKSYmKHM9b3IodCxkLHYpKSxpKGM9byhnLmtleSk/c1tnLmtleV06eChnLHQsZCx2KSk/ZihnLHIsZSxoLmVsbSwhMSxuLHApOmlyKHU9dFtjXSxnKT8oQyh1LGcscixuLHApLHRbY109dm9pZCAwLCQmJmwuaW5zZXJ0QmVmb3JlKGUsdS5lbG0saC5lbG0pKTpmKGcscixlLGguZWxtLCExLG4scCksZz1uWysrcF0pO2Q+dj9fKGUsaShuW3krMV0pP251bGw6blt5KzFdLmVsbSxuLHAseSxyKTpwPnkmJncoMCx0LGQsdil9KGQsaCx5LG4sdSk6byh5KT8obyhlLnRleHQpJiZsLnNldFRleHRDb250ZW50KGQsXCJcIiksXyhkLG51bGwseSwwLHkubGVuZ3RoLTEsbikpOm8oaCk/dygwLGgsMCxoLmxlbmd0aC0xKTpvKGUudGV4dCkmJmwuc2V0VGV4dENvbnRlbnQoZCxcIlwiKTplLnRleHQhPT10LnRleHQmJmwuc2V0VGV4dENvbnRlbnQoZCx0LnRleHQpLG8odikmJm8ocD12Lmhvb2spJiZvKHA9cC5wb3N0cGF0Y2gpJiZwKGUsdCl9fX1mdW5jdGlvbiBrKGUsdCxuKXtpZihhKG4pJiZvKGUucGFyZW50KSllLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQ9dDtlbHNlIGZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXRbcl0uZGF0YS5ob29rLmluc2VydCh0W3JdKX12YXIgQT1oKFwiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5XCIpO2Z1bmN0aW9uIFMoZSx0LG4scil7dmFyIGkscz10LnRhZyxjPXQuZGF0YSxsPXQuY2hpbGRyZW47aWYocj1yfHxjJiZjLnByZSx0LmVsbT1lLGEodC5pc0NvbW1lbnQpJiZvKHQuYXN5bmNGYWN0b3J5KSlyZXR1cm4gdC5pc0FzeW5jUGxhY2Vob2xkZXI9ITAsITA7aWYobyhjKSYmKG8oaT1jLmhvb2spJiZvKGk9aS5pbml0KSYmaSh0LCEwKSxvKGk9dC5jb21wb25lbnRJbnN0YW5jZSkpKXJldHVybiBkKHQsbiksITA7aWYobyhzKSl7aWYobyhsKSlpZihlLmhhc0NoaWxkTm9kZXMoKSlpZihvKGk9YykmJm8oaT1pLmRvbVByb3BzKSYmbyhpPWkuaW5uZXJIVE1MKSl7aWYoaSE9PWUuaW5uZXJIVE1MKXJldHVybiExfWVsc2V7Zm9yKHZhciB1PSEwLGY9ZS5maXJzdENoaWxkLHA9MDtwPGwubGVuZ3RoO3ArKyl7aWYoIWZ8fCFTKGYsbFtwXSxuLHIpKXt1PSExO2JyZWFrfWY9Zi5uZXh0U2libGluZ31pZighdXx8ZilyZXR1cm4hMX1lbHNlIHYodCxsLG4pO2lmKG8oYykpe3ZhciBoPSExO2Zvcih2YXIgbSBpbiBjKWlmKCFBKG0pKXtoPSEwLHkodCxuKTticmVha30haCYmYy5jbGFzcyYmcnQoYy5jbGFzcyl9fWVsc2UgZS5kYXRhIT09dC50ZXh0JiYoZS5kYXRhPXQudGV4dCk7cmV0dXJuITB9cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHMpe2lmKCFpKHQpKXt2YXIgYyx1PSExLGQ9W107aWYoaShlKSl1PSEwLGYodCxkKTtlbHNle3ZhciBwPW8oZS5ub2RlVHlwZSk7aWYoIXAmJmlyKGUsdCkpQyhlLHQsZCxudWxsLG51bGwscyk7ZWxzZXtpZihwKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoUCkmJihlLnJlbW92ZUF0dHJpYnV0ZShQKSxuPSEwKSxhKG4pJiZTKGUsdCxkKSlyZXR1cm4gayh0LGQsITApLGU7Yz1lLGU9bmV3IGhlKGwudGFnTmFtZShjKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxjKX12YXIgdj1lLmVsbSxoPWwucGFyZW50Tm9kZSh2KTtpZihmKHQsZCx2Ll9sZWF2ZUNiP251bGw6aCxsLm5leHRTaWJsaW5nKHYpKSxvKHQucGFyZW50KSlmb3IodmFyIHk9dC5wYXJlbnQsZz1tKHQpO3k7KXtmb3IodmFyIF89MDtfPHIuZGVzdHJveS5sZW5ndGg7KytfKXIuZGVzdHJveVtfXSh5KTtpZih5LmVsbT10LmVsbSxnKXtmb3IodmFyICQ9MDskPHIuY3JlYXRlLmxlbmd0aDsrKyQpci5jcmVhdGVbJF0obnIseSk7dmFyIHg9eS5kYXRhLmhvb2suaW5zZXJ0O2lmKHgubWVyZ2VkKWZvcih2YXIgQT0xO0E8eC5mbnMubGVuZ3RoO0ErKyl4LmZuc1tBXSgpfWVsc2UgdHIoeSk7eT15LnBhcmVudH1vKGgpP3coMCxbZV0sMCwwKTpvKGUudGFnKSYmYihlKX19cmV0dXJuIGsodCxkLHUpLHQuZWxtfW8oZSkmJmIoZSl9fSh7bm9kZU9wczpRbixtb2R1bGVzOlttcixDcixuaSxvaSxtaSxKP3tjcmVhdGU6VWksYWN0aXZhdGU6VWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9SaShlLHQpOnQoKX19Ont9XS5jb25jYXQoZHIpfSk7WCYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlJiZlLnZtb2RlbCYmWGkoZSxcImlucHV0XCIpfSk7dmFyIFZpPXtpbnNlcnRlZDpmdW5jdGlvbihlLHQsbixyKXtcInNlbGVjdFwiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP3N0KG4sXCJwb3N0cGF0Y2hcIixmdW5jdGlvbigpe1ZpLmNvbXBvbmVudFVwZGF0ZWQoZSx0LG4pfSk6S2koZSx0LG4uY29udGV4dCksZS5fdk9wdGlvbnM9W10ubWFwLmNhbGwoZS5vcHRpb25zLFdpKSk6KFwidGV4dGFyZWFcIj09PW4udGFnfHxYbihlLnR5cGUpKSYmKGUuX3ZNb2RpZmllcnM9dC5tb2RpZmllcnMsdC5tb2RpZmllcnMubGF6eXx8KGUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixaaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIixHaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsR2kpLFgmJihlLnZtb2RlbD0hMCkpKX0sY29tcG9uZW50VXBkYXRlZDpmdW5jdGlvbihlLHQsbil7aWYoXCJzZWxlY3RcIj09PW4udGFnKXtLaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxXaSk7aS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIU4oZSxyW3RdKX0pJiYoZS5tdWx0aXBsZT90LnZhbHVlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHFpKGUsaSl9KTp0LnZhbHVlIT09dC5vbGRWYWx1ZSYmcWkodC52YWx1ZSxpKSkmJlhpKGUsXCJjaGFuZ2VcIil9fX07ZnVuY3Rpb24gS2koZSx0LG4pe0ppKGUsdCxuKSwoR3x8WSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtKaShlLHQsbil9LDApfWZ1bmN0aW9uIEppKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9ZS5tdWx0aXBsZTtpZighaXx8QXJyYXkuaXNBcnJheShyKSl7Zm9yKHZhciBvLGEscz0wLGM9ZS5vcHRpb25zLmxlbmd0aDtzPGM7cysrKWlmKGE9ZS5vcHRpb25zW3NdLGkpbz1NKHIsV2koYSkpPi0xLGEuc2VsZWN0ZWQhPT1vJiYoYS5zZWxlY3RlZD1vKTtlbHNlIGlmKE4oV2koYSkscikpcmV0dXJuIHZvaWQoZS5zZWxlY3RlZEluZGV4IT09cyYmKGUuc2VsZWN0ZWRJbmRleD1zKSk7aXx8KGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIHFpKGUsdCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIU4odCxlKX0pfWZ1bmN0aW9uIFdpKGUpe3JldHVyblwiX3ZhbHVlXCJpbiBlP2UuX3ZhbHVlOmUudmFsdWV9ZnVuY3Rpb24gWmkoZSl7ZS50YXJnZXQuY29tcG9zaW5nPSEwfWZ1bmN0aW9uIEdpKGUpe2UudGFyZ2V0LmNvbXBvc2luZyYmKGUudGFyZ2V0LmNvbXBvc2luZz0hMSxYaShlLnRhcmdldCxcImlucHV0XCIpKX1mdW5jdGlvbiBYaShlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiSFRNTEV2ZW50c1wiKTtuLmluaXRFdmVudCh0LCEwLCEwKSxlLmRpc3BhdGNoRXZlbnQobil9ZnVuY3Rpb24gWWkoZSl7cmV0dXJuIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZGF0YSYmZS5kYXRhLnRyYW5zaXRpb24/ZTpZaShlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSl9dmFyIFFpPXttb2RlbDpWaSxzaG93OntiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9KG49WWkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9XCJub25lXCI9PT1lLnN0eWxlLmRpc3BsYXk/XCJcIjplLnN0eWxlLmRpc3BsYXk7ciYmaT8obi5kYXRhLnNob3c9ITAsRmkobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1vfSkpOmUuc3R5bGUuZGlzcGxheT1yP286XCJub25lXCJ9LHVwZGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZTshciE9IXQub2xkVmFsdWUmJigobj1ZaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24/KG4uZGF0YS5zaG93PSEwLHI/RmkobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pOlJpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9XCJub25lXCJ9KSk6ZS5zdHlsZS5kaXNwbGF5PXI/ZS5fX3ZPcmlnaW5hbERpc3BsYXk6XCJub25lXCIpfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0LG4scixpKXtpfHwoZS5zdHlsZS5kaXNwbGF5PWUuX192T3JpZ2luYWxEaXNwbGF5KX19fSxlbz17bmFtZTpTdHJpbmcsYXBwZWFyOkJvb2xlYW4sY3NzOkJvb2xlYW4sbW9kZTpTdHJpbmcsdHlwZTpTdHJpbmcsZW50ZXJDbGFzczpTdHJpbmcsbGVhdmVDbGFzczpTdHJpbmcsZW50ZXJUb0NsYXNzOlN0cmluZyxsZWF2ZVRvQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhckNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsZHVyYXRpb246W051bWJlcixTdHJpbmcsT2JqZWN0XX07ZnVuY3Rpb24gdG8oZSl7dmFyIHQ9ZSYmZS5jb21wb25lbnRPcHRpb25zO3JldHVybiB0JiZ0LkN0b3Iub3B0aW9ucy5hYnN0cmFjdD90byhKdCh0LmNoaWxkcmVuKSk6ZX1mdW5jdGlvbiBubyhlKXt2YXIgdD17fSxuPWUuJG9wdGlvbnM7Zm9yKHZhciByIGluIG4ucHJvcHNEYXRhKXRbcl09ZVtyXTt2YXIgaT1uLl9wYXJlbnRMaXN0ZW5lcnM7Zm9yKHZhciBvIGluIGkpdFt4KG8pXT1pW29dO3JldHVybiB0fWZ1bmN0aW9uIHJvKGUsdCl7aWYoL1xcZC1rZWVwLWFsaXZlJC8udGVzdCh0LnRhZykpcmV0dXJuIGUoXCJrZWVwLWFsaXZlXCIse3Byb3BzOnQuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGF9KX12YXIgaW89ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnfHxLdChlKX0sb289ZnVuY3Rpb24oZSl7cmV0dXJuXCJzaG93XCI9PT1lLm5hbWV9LGFvPXtuYW1lOlwidHJhbnNpdGlvblwiLHByb3BzOmVvLGFic3RyYWN0OiEwLHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy4kc2xvdHMuZGVmYXVsdDtpZihuJiYobj1uLmZpbHRlcihpbykpLmxlbmd0aCl7dmFyIHI9dGhpcy5tb2RlLGk9blswXTtpZihmdW5jdGlvbihlKXtmb3IoO2U9ZS5wYXJlbnQ7KWlmKGUuZGF0YS50cmFuc2l0aW9uKXJldHVybiEwfSh0aGlzLiR2bm9kZSkpcmV0dXJuIGk7dmFyIG89dG8oaSk7aWYoIW8pcmV0dXJuIGk7aWYodGhpcy5fbGVhdmluZylyZXR1cm4gcm8oZSxpKTt2YXIgYT1cIl9fdHJhbnNpdGlvbi1cIit0aGlzLl91aWQrXCItXCI7by5rZXk9bnVsbD09by5rZXk/by5pc0NvbW1lbnQ/YStcImNvbW1lbnRcIjphK28udGFnOnMoby5rZXkpPzA9PT1TdHJpbmcoby5rZXkpLmluZGV4T2YoYSk/by5rZXk6YStvLmtleTpvLmtleTt2YXIgYz0oby5kYXRhfHwoby5kYXRhPXt9KSkudHJhbnNpdGlvbj1ubyh0aGlzKSxsPXRoaXMuX3Zub2RlLHU9dG8obCk7aWYoby5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUob28pJiYoby5kYXRhLnNob3c9ITApLHUmJnUuZGF0YSYmIWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQua2V5PT09ZS5rZXkmJnQudGFnPT09ZS50YWd9KG8sdSkmJiFLdCh1KSYmKCF1LmNvbXBvbmVudEluc3RhbmNlfHwhdS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KSl7dmFyIGY9dS5kYXRhLnRyYW5zaXRpb249VCh7fSxjKTtpZihcIm91dC1pblwiPT09cilyZXR1cm4gdGhpcy5fbGVhdmluZz0hMCxzdChmLFwiYWZ0ZXJMZWF2ZVwiLGZ1bmN0aW9uKCl7dC5fbGVhdmluZz0hMSx0LiRmb3JjZVVwZGF0ZSgpfSkscm8oZSxpKTtpZihcImluLW91dFwiPT09cil7aWYoS3QobykpcmV0dXJuIGw7dmFyIGQscD1mdW5jdGlvbigpe2QoKX07c3QoYyxcImFmdGVyRW50ZXJcIixwKSxzdChjLFwiZW50ZXJDYW5jZWxsZWRcIixwKSxzdChmLFwiZGVsYXlMZWF2ZVwiLGZ1bmN0aW9uKGUpe2Q9ZX0pfX1yZXR1cm4gaX19fSxzbz1UKHt0YWc6U3RyaW5nLG1vdmVDbGFzczpTdHJpbmd9LGVvKTtmdW5jdGlvbiBjbyhlKXtlLmVsbS5fbW92ZUNiJiZlLmVsbS5fbW92ZUNiKCksZS5lbG0uX2VudGVyQ2ImJmUuZWxtLl9lbnRlckNiKCl9ZnVuY3Rpb24gbG8oZSl7ZS5kYXRhLm5ld1Bvcz1lLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiB1byhlKXt2YXIgdD1lLmRhdGEucG9zLG49ZS5kYXRhLm5ld1BvcyxyPXQubGVmdC1uLmxlZnQsaT10LnRvcC1uLnRvcDtpZihyfHxpKXtlLmRhdGEubW92ZWQ9ITA7dmFyIG89ZS5lbG0uc3R5bGU7by50cmFuc2Zvcm09by5XZWJraXRUcmFuc2Zvcm09XCJ0cmFuc2xhdGUoXCIrcitcInB4LFwiK2krXCJweClcIixvLnRyYW5zaXRpb25EdXJhdGlvbj1cIjBzXCJ9fWRlbGV0ZSBzby5tb2RlO3ZhciBmbz17VHJhbnNpdGlvbjphbyxUcmFuc2l0aW9uR3JvdXA6e3Byb3BzOnNvLGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuX3VwZGF0ZTt0aGlzLl91cGRhdGU9ZnVuY3Rpb24obixyKXt2YXIgaT1ZdChlKTtlLl9fcGF0Y2hfXyhlLl92bm9kZSxlLmtlcHQsITEsITApLGUuX3Zub2RlPWUua2VwdCxpKCksdC5jYWxsKGUsbixyKX19LHJlbmRlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50YWd8fHRoaXMuJHZub2RlLmRhdGEudGFnfHxcInNwYW5cIixuPU9iamVjdC5jcmVhdGUobnVsbCkscj10aGlzLnByZXZDaGlsZHJlbj10aGlzLmNoaWxkcmVuLGk9dGhpcy4kc2xvdHMuZGVmYXVsdHx8W10sbz10aGlzLmNoaWxkcmVuPVtdLGE9bm8odGhpcykscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgYz1pW3NdO2MudGFnJiZudWxsIT1jLmtleSYmMCE9PVN0cmluZyhjLmtleSkuaW5kZXhPZihcIl9fdmxpc3RcIikmJihvLnB1c2goYyksbltjLmtleV09YywoYy5kYXRhfHwoYy5kYXRhPXt9KSkudHJhbnNpdGlvbj1hKX1pZihyKXtmb3IodmFyIGw9W10sdT1bXSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBkPXJbZl07ZC5kYXRhLnRyYW5zaXRpb249YSxkLmRhdGEucG9zPWQuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG5bZC5rZXldP2wucHVzaChkKTp1LnB1c2goZCl9dGhpcy5rZXB0PWUodCxudWxsLGwpLHRoaXMucmVtb3ZlZD11fXJldHVybiBlKHQsbnVsbCxvKX0sdXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJldkNoaWxkcmVuLHQ9dGhpcy5tb3ZlQ2xhc3N8fCh0aGlzLm5hbWV8fFwidlwiKStcIi1tb3ZlXCI7ZS5sZW5ndGgmJnRoaXMuaGFzTW92ZShlWzBdLmVsbSx0KSYmKGUuZm9yRWFjaChjbyksZS5mb3JFYWNoKGxvKSxlLmZvckVhY2godW8pLHRoaXMuX3JlZmxvdz1kb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxlLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5kYXRhLm1vdmVkKXt2YXIgbj1lLmVsbSxyPW4uc3R5bGU7SWkobix0KSxyLnRyYW5zZm9ybT1yLldlYmtpdFRyYW5zZm9ybT1yLnRyYW5zaXRpb25EdXJhdGlvbj1cIlwiLG4uYWRkRXZlbnRMaXN0ZW5lcihBaSxuLl9tb3ZlQ2I9ZnVuY3Rpb24gZShyKXtyJiZyLnRhcmdldCE9PW58fHImJiEvdHJhbnNmb3JtJC8udGVzdChyLnByb3BlcnR5TmFtZSl8fChuLnJlbW92ZUV2ZW50TGlzdGVuZXIoQWksZSksbi5fbW92ZUNiPW51bGwsamkobix0KSl9KX19KSl9LG1ldGhvZHM6e2hhc01vdmU6ZnVuY3Rpb24oZSx0KXtpZighJGkpcmV0dXJuITE7aWYodGhpcy5faGFzTW92ZSlyZXR1cm4gdGhpcy5faGFzTW92ZTt2YXIgbj1lLmNsb25lTm9kZSgpO2UuX3RyYW5zaXRpb25DbGFzc2VzJiZlLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe19pKG4sZSl9KSxnaShuLHQpLG4uc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLiRlbC5hcHBlbmRDaGlsZChuKTt2YXIgcj1NaShuKTtyZXR1cm4gdGhpcy4kZWwucmVtb3ZlQ2hpbGQobiksdGhpcy5faGFzTW92ZT1yLmhhc1RyYW5zZm9ybX19fX07Q24uY29uZmlnLm11c3RVc2VQcm9wPUxuLENuLmNvbmZpZy5pc1Jlc2VydmVkVGFnPVduLENuLmNvbmZpZy5pc1Jlc2VydmVkQXR0cj1JbixDbi5jb25maWcuZ2V0VGFnTmFtZXNwYWNlPVpuLENuLmNvbmZpZy5pc1Vua25vd25FbGVtZW50PWZ1bmN0aW9uKGUpe2lmKCFKKXJldHVybiEwO2lmKFduKGUpKXJldHVybiExO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLG51bGwhPUduW2VdKXJldHVybiBHbltlXTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlLmluZGV4T2YoXCItXCIpPi0xP0duW2VdPXQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTFVua25vd25FbGVtZW50fHx0LmNvbnN0cnVjdG9yPT09d2luZG93LkhUTUxFbGVtZW50OkduW2VdPS9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QodC50b1N0cmluZygpKX0sVChDbi5vcHRpb25zLmRpcmVjdGl2ZXMsUWkpLFQoQ24ub3B0aW9ucy5jb21wb25lbnRzLGZvKSxDbi5wcm90b3R5cGUuX19wYXRjaF9fPUo/emk6SSxDbi5wcm90b3R5cGUuJG1vdW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZS4kZWw9dCxlLiRvcHRpb25zLnJlbmRlcnx8KGUuJG9wdGlvbnMucmVuZGVyPXllKSx0bihlLFwiYmVmb3JlTW91bnRcIikscj1mdW5jdGlvbigpe2UuX3VwZGF0ZShlLl9yZW5kZXIoKSxuKX0sbmV3IHZuKGUscixJLHtiZWZvcmU6ZnVuY3Rpb24oKXtlLl9pc01vdW50ZWQmJiFlLl9pc0Rlc3Ryb3llZCYmdG4oZSxcImJlZm9yZVVwZGF0ZVwiKX19LCEwKSxuPSExLG51bGw9PWUuJHZub2RlJiYoZS5faXNNb3VudGVkPSEwLHRuKGUsXCJtb3VudGVkXCIpKSxlfSh0aGlzLGU9ZSYmSj9ZbihlKTp2b2lkIDAsdCl9LEomJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtILmRldnRvb2xzJiZvZSYmb2UuZW1pdChcImluaXRcIixDbil9LDApO3ZhciBwbyx2bz0vXFx7XFx7KCg/Oi58XFxyP1xcbikrPylcXH1cXH0vZyxobz0vWy0uKis/XiR7fSgpfFtcXF1cXC9cXFxcXS9nLG1vPXcoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS5yZXBsYWNlKGhvLFwiXFxcXCQmXCIpLG49ZVsxXS5yZXBsYWNlKGhvLFwiXFxcXCQmXCIpO3JldHVybiBuZXcgUmVnRXhwKHQrXCIoKD86LnxcXFxcbikrPylcIituLFwiZ1wiKX0pLHlvPXtzdGF0aWNLZXlzOltcInN0YXRpY0NsYXNzXCJdLHRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXt0Lndhcm47dmFyIG49UHIoZSxcImNsYXNzXCIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1EcihlLFwiY2xhc3NcIiwhMSk7ciYmKGUuY2xhc3NCaW5kaW5nPXIpfSxnZW5EYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7cmV0dXJuIGUuc3RhdGljQ2xhc3MmJih0Kz1cInN0YXRpY0NsYXNzOlwiK2Uuc3RhdGljQ2xhc3MrXCIsXCIpLGUuY2xhc3NCaW5kaW5nJiYodCs9XCJjbGFzczpcIitlLmNsYXNzQmluZGluZytcIixcIiksdH19LGdvPXtzdGF0aWNLZXlzOltcInN0YXRpY1N0eWxlXCJdLHRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXt0Lndhcm47dmFyIG49UHIoZSxcInN0eWxlXCIpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KGFpKG4pKSk7dmFyIHI9RHIoZSxcInN0eWxlXCIsITEpO3ImJihlLnN0eWxlQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiO3JldHVybiBlLnN0YXRpY1N0eWxlJiYodCs9XCJzdGF0aWNTdHlsZTpcIitlLnN0YXRpY1N0eWxlK1wiLFwiKSxlLnN0eWxlQmluZGluZyYmKHQrPVwic3R5bGU6KFwiK2Uuc3R5bGVCaW5kaW5nK1wiKSxcIiksdH19LF9vPWgoXCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiclwiKSxibz1oKFwiY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZVwiKSx3bz1oKFwiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLGRldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSxvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdGl0bGUsdHIsdHJhY2tcIiksJG89L15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy8seG89L15cXHMqKCg/OnYtW1xcdy1dKzp8QHw6fCMpXFxbW149XStcXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vLENvPVwiW2EtekEtWl9dW1xcXFwtXFxcXC4wLTlfYS16QS1aXCIrQi5zb3VyY2UrXCJdKlwiLGtvPVwiKCg/OlwiK0NvK1wiXFxcXDopP1wiK0NvK1wiKVwiLEFvPW5ldyBSZWdFeHAoXCJePFwiK2tvKSxTbz0vXlxccyooXFwvPyk+LyxPbz1uZXcgUmVnRXhwKFwiXjxcXFxcL1wiK2tvK1wiW14+XSo+XCIpLFRvPS9ePCFET0NUWVBFIFtePl0rPi9pLEVvPS9ePCFcXC0tLyxJbz0vXjwhXFxbLyxqbz1oKFwic2NyaXB0LHN0eWxlLHRleHRhcmVhXCIsITApLExvPXt9LE5vPXtcIiZsdDtcIjpcIjxcIixcIiZndDtcIjpcIj5cIixcIiZxdW90O1wiOidcIicsXCImYW1wO1wiOlwiJlwiLFwiJiMxMDtcIjpcIlxcblwiLFwiJiM5O1wiOlwiXFx0XCIsXCImIzM5O1wiOlwiJ1wifSxNbz0vJig/Omx0fGd0fHF1b3R8YW1wfCMzOSk7L2csRG89LyYoPzpsdHxndHxxdW90fGFtcHwjMzl8IzEwfCM5KTsvZyxQbz1oKFwicHJlLHRleHRhcmVhXCIsITApLEZvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJlBvKGUpJiZcIlxcblwiPT09dFswXX07ZnVuY3Rpb24gUm8oZSx0KXt2YXIgbj10P0RvOk1vO3JldHVybiBlLnJlcGxhY2UobixmdW5jdGlvbihlKXtyZXR1cm4gTm9bZV19KX12YXIgSG8sQm8sVW8sem8sVm8sS28sSm8scW8sV289L15AfF52LW9uOi8sWm89L152LXxeQHxeOi8sR289LyhbXFxzXFxTXSo/KVxccysoPzppbnxvZilcXHMrKFtcXHNcXFNdKikvLFhvPS8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLyxZbz0vXlxcKHxcXCkkL2csUW89L15cXFsuKlxcXSQvLGVhPS86KC4qKSQvLHRhPS9eOnxeXFwufF52LWJpbmQ6LyxuYT0vXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZyxyYT0vXnYtc2xvdCg6fCQpfF4jLyxpYT0vW1xcclxcbl0vLG9hPS9cXHMrL2csYWE9dyhmdW5jdGlvbihlKXtyZXR1cm4ocG89cG98fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1lLHBvLnRleHRDb250ZW50fSksc2E9XCJfZW1wdHlfXCI7ZnVuY3Rpb24gY2EoZSx0LG4pe3JldHVybnt0eXBlOjEsdGFnOmUsYXR0cnNMaXN0OnQsYXR0cnNNYXA6dmEodCkscmF3QXR0cnNNYXA6e30scGFyZW50Om4sY2hpbGRyZW46W119fWZ1bmN0aW9uIGxhKGUsdCl7dmFyIG4scjsocj1EcihuPWUsXCJrZXlcIikpJiYobi5rZXk9ciksZS5wbGFpbj0hZS5rZXkmJiFlLnNjb3BlZFNsb3RzJiYhZS5hdHRyc0xpc3QubGVuZ3RoLGZ1bmN0aW9uKGUpe3ZhciB0PURyKGUsXCJyZWZcIik7dCYmKGUucmVmPXQsZS5yZWZJbkZvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZTt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oZSkpfShlKSxmdW5jdGlvbihlKXt2YXIgdDtcInRlbXBsYXRlXCI9PT1lLnRhZz8odD1QcihlLFwic2NvcGVcIiksZS5zbG90U2NvcGU9dHx8UHIoZSxcInNsb3Qtc2NvcGVcIikpOih0PVByKGUsXCJzbG90LXNjb3BlXCIpKSYmKGUuc2xvdFNjb3BlPXQpO3ZhciBuPURyKGUsXCJzbG90XCIpO2lmKG4mJihlLnNsb3RUYXJnZXQ9J1wiXCInPT09bj8nXCJkZWZhdWx0XCInOm4sZS5zbG90VGFyZ2V0RHluYW1pYz0hKCFlLmF0dHJzTWFwW1wiOnNsb3RcIl0mJiFlLmF0dHJzTWFwW1widi1iaW5kOnNsb3RcIl0pLFwidGVtcGxhdGVcIj09PWUudGFnfHxlLnNsb3RTY29wZXx8SXIoZSxcInNsb3RcIixuLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmF3QXR0cnNNYXBbXCI6XCIrdF18fGUucmF3QXR0cnNNYXBbXCJ2LWJpbmQ6XCIrdF18fGUucmF3QXR0cnNNYXBbdF19KGUsXCJzbG90XCIpKSksXCJ0ZW1wbGF0ZVwiPT09ZS50YWcpe3ZhciByPUZyKGUscmEpO2lmKHIpe3ZhciBpPWRhKHIpLG89aS5uYW1lLGE9aS5keW5hbWljO2Uuc2xvdFRhcmdldD1vLGUuc2xvdFRhcmdldER5bmFtaWM9YSxlLnNsb3RTY29wZT1yLnZhbHVlfHxzYX19ZWxzZXt2YXIgcz1GcihlLHJhKTtpZihzKXt2YXIgYz1lLnNjb3BlZFNsb3RzfHwoZS5zY29wZWRTbG90cz17fSksbD1kYShzKSx1PWwubmFtZSxmPWwuZHluYW1pYyxkPWNbdV09Y2EoXCJ0ZW1wbGF0ZVwiLFtdLGUpO2Quc2xvdFRhcmdldD11LGQuc2xvdFRhcmdldER5bmFtaWM9ZixkLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe2lmKCFlLnNsb3RTY29wZSlyZXR1cm4gZS5wYXJlbnQ9ZCwhMH0pLGQuc2xvdFNjb3BlPXMudmFsdWV8fHNhLGUuY2hpbGRyZW49W10sZS5wbGFpbj0hMX19fShlKSxmdW5jdGlvbihlKXtcInNsb3RcIj09PWUudGFnJiYoZS5zbG90TmFtZT1EcihlLFwibmFtZVwiKSl9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PURyKGUsXCJpc1wiKSkmJihlLmNvbXBvbmVudD10KSxudWxsIT1QcihlLFwiaW5saW5lLXRlbXBsYXRlXCIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgaT0wO2k8VW8ubGVuZ3RoO2krKyllPVVvW2ldKGUsdCl8fGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGMsbD1lLmF0dHJzTGlzdDtmb3IodD0wLG49bC5sZW5ndGg7dDxuO3QrKylpZihyPWk9bFt0XS5uYW1lLG89bFt0XS52YWx1ZSxaby50ZXN0KHIpKWlmKGUuaGFzQmluZGluZ3M9ITAsKGE9cGEoci5yZXBsYWNlKFpvLFwiXCIpKSkmJihyPXIucmVwbGFjZShuYSxcIlwiKSksdGEudGVzdChyKSlyPXIucmVwbGFjZSh0YSxcIlwiKSxvPUFyKG8pLChjPVFvLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxhJiYoYS5wcm9wJiYhYyYmXCJpbm5lckh0bWxcIj09PShyPXgocikpJiYocj1cImlubmVySFRNTFwiKSxhLmNhbWVsJiYhYyYmKHI9eChyKSksYS5zeW5jJiYocz1CcihvLFwiJGV2ZW50XCIpLGM/TXIoZSwnXCJ1cGRhdGU6XCIrKCcrcitcIilcIixzLG51bGwsITEsMCxsW3RdLCEwKTooTXIoZSxcInVwZGF0ZTpcIit4KHIpLHMsbnVsbCwhMSwwLGxbdF0pLEEocikhPT14KHIpJiZNcihlLFwidXBkYXRlOlwiK0EocikscyxudWxsLCExLDAsbFt0XSkpKSksYSYmYS5wcm9wfHwhZS5jb21wb25lbnQmJkpvKGUudGFnLGUuYXR0cnNNYXAudHlwZSxyKT9FcihlLHIsbyxsW3RdLGMpOklyKGUscixvLGxbdF0sYyk7ZWxzZSBpZihXby50ZXN0KHIpKXI9ci5yZXBsYWNlKFdvLFwiXCIpLChjPVFvLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxNcihlLHIsbyxhLCExLDAsbFt0XSxjKTtlbHNle3ZhciB1PShyPXIucmVwbGFjZShabyxcIlwiKSkubWF0Y2goZWEpLGY9dSYmdVsxXTtjPSExLGYmJihyPXIuc2xpY2UoMCwtKGYubGVuZ3RoKzEpKSxRby50ZXN0KGYpJiYoZj1mLnNsaWNlKDEsLTEpLGM9ITApKSxMcihlLHIsaSxvLGYsYyxhLGxbdF0pfWVsc2UgSXIoZSxyLEpTT04uc3RyaW5naWZ5KG8pLGxbdF0pLCFlLmNvbXBvbmVudCYmXCJtdXRlZFwiPT09ciYmSm8oZS50YWcsZS5hdHRyc01hcC50eXBlLHIpJiZFcihlLHIsXCJ0cnVlXCIsbFt0XSl9KGUpLGV9ZnVuY3Rpb24gdWEoZSl7dmFyIHQ7aWYodD1QcihlLFwidi1mb3JcIikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goR28pO2lmKHQpe3ZhciBuPXt9O24uZm9yPXRbMl0udHJpbSgpO3ZhciByPXRbMV0udHJpbSgpLnJlcGxhY2UoWW8sXCJcIiksaT1yLm1hdGNoKFhvKTtyZXR1cm4gaT8obi5hbGlhcz1yLnJlcGxhY2UoWG8sXCJcIikudHJpbSgpLG4uaXRlcmF0b3IxPWlbMV0udHJpbSgpLGlbMl0mJihuLml0ZXJhdG9yMj1pWzJdLnRyaW0oKSkpOm4uYWxpYXM9cixufX0odCk7biYmVChlLG4pfX1mdW5jdGlvbiBmYShlLHQpe2UuaWZDb25kaXRpb25zfHwoZS5pZkNvbmRpdGlvbnM9W10pLGUuaWZDb25kaXRpb25zLnB1c2godCl9ZnVuY3Rpb24gZGEoZSl7dmFyIHQ9ZS5uYW1lLnJlcGxhY2UocmEsXCJcIik7cmV0dXJuIHR8fFwiI1wiIT09ZS5uYW1lWzBdJiYodD1cImRlZmF1bHRcIiksUW8udGVzdCh0KT97bmFtZTp0LnNsaWNlKDEsLTEpLGR5bmFtaWM6ITB9OntuYW1lOidcIicrdCsnXCInLGR5bmFtaWM6ITF9fWZ1bmN0aW9uIHBhKGUpe3ZhciB0PWUubWF0Y2gobmEpO2lmKHQpe3ZhciBuPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7bltlLnNsaWNlKDEpXT0hMH0pLG59fWZ1bmN0aW9uIHZhKGUpe2Zvcih2YXIgdD17fSxuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbZVtuXS5uYW1lXT1lW25dLnZhbHVlO3JldHVybiB0fXZhciBoYT0vXnhtbG5zOk5TXFxkKy8sbWE9L15OU1xcZCs6LztmdW5jdGlvbiB5YShlKXtyZXR1cm4gY2EoZS50YWcsZS5hdHRyc0xpc3Quc2xpY2UoKSxlLnBhcmVudCl9dmFyIGdhLF9hLGJhPVt5byxnbyx7cHJlVHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIj09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbXCJ2LW1vZGVsXCJdKXJldHVybjtpZigocltcIjp0eXBlXCJdfHxyW1widi1iaW5kOnR5cGVcIl0pJiYobj1EcihlLFwidHlwZVwiKSksci50eXBlfHxufHwhcltcInYtYmluZFwiXXx8KG49XCIoXCIrcltcInYtYmluZFwiXStcIikudHlwZVwiKSxuKXt2YXIgaT1QcihlLFwidi1pZlwiLCEwKSxvPWk/XCImJihcIitpK1wiKVwiOlwiXCIsYT1udWxsIT1QcihlLFwidi1lbHNlXCIsITApLHM9UHIoZSxcInYtZWxzZS1pZlwiLCEwKSxjPXlhKGUpO3VhKGMpLGpyKGMsXCJ0eXBlXCIsXCJjaGVja2JveFwiKSxsYShjLHQpLGMucHJvY2Vzc2VkPSEwLGMuaWY9XCIoXCIrbitcIik9PT0nY2hlY2tib3gnXCIrbyxmYShjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIGw9eWEoZSk7UHIobCxcInYtZm9yXCIsITApLGpyKGwsXCJ0eXBlXCIsXCJyYWRpb1wiKSxsYShsLHQpLGZhKGMse2V4cDpcIihcIituK1wiKT09PSdyYWRpbydcIitvLGJsb2NrOmx9KTt2YXIgdT15YShlKTtyZXR1cm4gUHIodSxcInYtZm9yXCIsITApLGpyKHUsXCI6dHlwZVwiLG4pLGxhKHUsdCksZmEoYyx7ZXhwOmksYmxvY2s6dX0pLGE/Yy5lbHNlPSEwOnMmJihjLmVsc2VpZj1zKSxjfX19fV0sd2E9e2V4cGVjdEhUTUw6ITAsbW9kdWxlczpiYSxkaXJlY3RpdmVzOnttb2RlbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZSxpPXQubW9kaWZpZXJzLG89ZS50YWcsYT1lLmF0dHJzTWFwLnR5cGU7aWYoZS5jb21wb25lbnQpcmV0dXJuIEhyKGUscixpKSwhMTtpZihcInNlbGVjdFwiPT09bykhZnVuY3Rpb24oZSx0LG4pe3ZhciByPSd2YXIgJCRzZWxlY3RlZFZhbCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFwiX3ZhbHVlXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZTtyZXR1cm4gJysoaSYmaS5udW1iZXI/XCJfbih2YWwpXCI6XCJ2YWxcIikrXCJ9KTtcIjtNcihlLFwiY2hhbmdlXCIscj1yK1wiIFwiK0JyKHQsXCIkZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF1cIiksbnVsbCwhMCl9KGUscik7ZWxzZSBpZihcImlucHV0XCI9PT1vJiZcImNoZWNrYm94XCI9PT1hKSFmdW5jdGlvbihlLHQsbil7dmFyIHI9biYmbi5udW1iZXIsaT1EcihlLFwidmFsdWVcIil8fFwibnVsbFwiLG89RHIoZSxcInRydWUtdmFsdWVcIil8fFwidHJ1ZVwiLGE9RHIoZSxcImZhbHNlLXZhbHVlXCIpfHxcImZhbHNlXCI7RXIoZSxcImNoZWNrZWRcIixcIkFycmF5LmlzQXJyYXkoXCIrdCtcIik/X2koXCIrdCtcIixcIitpK1wiKT4tMVwiKyhcInRydWVcIj09PW8/XCI6KFwiK3QrXCIpXCI6XCI6X3EoXCIrdCtcIixcIitvK1wiKVwiKSksTXIoZSxcImNoYW5nZVwiLFwidmFyICQkYT1cIit0K1wiLCQkZWw9JGV2ZW50LnRhcmdldCwkJGM9JCRlbC5jaGVja2VkPyhcIitvK1wiKTooXCIrYStcIik7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIgJCR2PVwiKyhyP1wiX24oXCIraStcIilcIjppKStcIiwkJGk9X2koJCRhLCQkdik7aWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKFwiK0JyKHQsXCIkJGEuY29uY2F0KFskJHZdKVwiKStcIil9ZWxzZXskJGk+LTEmJihcIitCcih0LFwiJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSlcIikrXCIpfX1lbHNle1wiK0JyKHQsXCIkJGNcIikrXCJ9XCIsbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW8mJlwicmFkaW9cIj09PWEpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uJiZuLm51bWJlcixpPURyKGUsXCJ2YWx1ZVwiKXx8XCJudWxsXCI7RXIoZSxcImNoZWNrZWRcIixcIl9xKFwiK3QrXCIsXCIrKGk9cj9cIl9uKFwiK2krXCIpXCI6aSkrXCIpXCIpLE1yKGUsXCJjaGFuZ2VcIixCcih0LGkpLG51bGwsITApfShlLHIsaSk7ZWxzZSBpZihcImlucHV0XCI9PT1vfHxcInRleHRhcmVhXCI9PT1vKSFmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5hdHRyc01hcC50eXBlLGk9bnx8e30sbz1pLmxhenksYT1pLm51bWJlcixzPWkudHJpbSxjPSFvJiZcInJhbmdlXCIhPT1yLGw9bz9cImNoYW5nZVwiOlwicmFuZ2VcIj09PXI/V3I6XCJpbnB1dFwiLHU9XCIkZXZlbnQudGFyZ2V0LnZhbHVlXCI7cyYmKHU9XCIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKVwiKSxhJiYodT1cIl9uKFwiK3UrXCIpXCIpO3ZhciBmPUJyKHQsdSk7YyYmKGY9XCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIrZiksRXIoZSxcInZhbHVlXCIsXCIoXCIrdCtcIilcIiksTXIoZSxsLGYsbnVsbCwhMCksKHN8fGEpJiZNcihlLFwiYmx1clwiLFwiJGZvcmNlVXBkYXRlKClcIil9KGUscixpKTtlbHNlIGlmKCFILmlzUmVzZXJ2ZWRUYWcobykpcmV0dXJuIEhyKGUscixpKSwhMTtyZXR1cm4hMH0sdGV4dDpmdW5jdGlvbihlLHQpe3QudmFsdWUmJkVyKGUsXCJ0ZXh0Q29udGVudFwiLFwiX3MoXCIrdC52YWx1ZStcIilcIix0KX0saHRtbDpmdW5jdGlvbihlLHQpe3QudmFsdWUmJkVyKGUsXCJpbm5lckhUTUxcIixcIl9zKFwiK3QudmFsdWUrXCIpXCIsdCl9fSxpc1ByZVRhZzpmdW5jdGlvbihlKXtyZXR1cm5cInByZVwiPT09ZX0saXNVbmFyeVRhZzpfbyxtdXN0VXNlUHJvcDpMbixjYW5CZUxlZnRPcGVuVGFnOmJvLGlzUmVzZXJ2ZWRUYWc6V24sZ2V0VGFnTmFtZXNwYWNlOlpuLHN0YXRpY0tleXM6YmEucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KHQuc3RhdGljS2V5c3x8W10pfSxbXSkuam9pbihcIixcIil9LCRhPXcoZnVuY3Rpb24oZSl7cmV0dXJuIGgoXCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcFwiKyhlP1wiLFwiK2U6XCJcIikpfSk7dmFyIHhhPS9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uXFxzKig/OltcXHckXSspP1xccypcXCgvLENhPS9cXChbXildKj9cXCk7KiQvLGthPS9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC8sQWE9e2VzYzoyNyx0YWI6OSxlbnRlcjoxMyxzcGFjZTozMix1cDozOCxsZWZ0OjM3LHJpZ2h0OjM5LGRvd246NDAsZGVsZXRlOls4LDQ2XX0sU2E9e2VzYzpbXCJFc2NcIixcIkVzY2FwZVwiXSx0YWI6XCJUYWJcIixlbnRlcjpcIkVudGVyXCIsc3BhY2U6W1wiIFwiLFwiU3BhY2ViYXJcIl0sdXA6W1wiVXBcIixcIkFycm93VXBcIl0sbGVmdDpbXCJMZWZ0XCIsXCJBcnJvd0xlZnRcIl0scmlnaHQ6W1wiUmlnaHRcIixcIkFycm93UmlnaHRcIl0sZG93bjpbXCJEb3duXCIsXCJBcnJvd0Rvd25cIl0sZGVsZXRlOltcIkJhY2tzcGFjZVwiLFwiRGVsZXRlXCIsXCJEZWxcIl19LE9hPWZ1bmN0aW9uKGUpe3JldHVyblwiaWYoXCIrZStcIilyZXR1cm4gbnVsbDtcIn0sVGE9e3N0b3A6XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIscHJldmVudDpcIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiLHNlbGY6T2EoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxjdHJsOk9hKFwiISRldmVudC5jdHJsS2V5XCIpLHNoaWZ0Ok9hKFwiISRldmVudC5zaGlmdEtleVwiKSxhbHQ6T2EoXCIhJGV2ZW50LmFsdEtleVwiKSxtZXRhOk9hKFwiISRldmVudC5tZXRhS2V5XCIpLGxlZnQ6T2EoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxtaWRkbGU6T2EoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxyaWdodDpPYShcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyXCIpfTtmdW5jdGlvbiBFYShlLHQpe3ZhciBuPXQ/XCJuYXRpdmVPbjpcIjpcIm9uOlwiLHI9XCJcIixpPVwiXCI7Zm9yKHZhciBvIGluIGUpe3ZhciBhPUlhKGVbb10pO2Vbb10mJmVbb10uZHluYW1pYz9pKz1vK1wiLFwiK2ErXCIsXCI6cis9J1wiJytvKydcIjonK2ErXCIsXCJ9cmV0dXJuIHI9XCJ7XCIrci5zbGljZSgwLC0xKStcIn1cIixpP24rXCJfZChcIityK1wiLFtcIitpLnNsaWNlKDAsLTEpK1wiXSlcIjpuK3J9ZnVuY3Rpb24gSWEoZSl7aWYoIWUpcmV0dXJuXCJmdW5jdGlvbigpe31cIjtpZihBcnJheS5pc0FycmF5KGUpKXJldHVyblwiW1wiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBJYShlKX0pLmpvaW4oXCIsXCIpK1wiXVwiO3ZhciB0PWthLnRlc3QoZS52YWx1ZSksbj14YS50ZXN0KGUudmFsdWUpLHI9a2EudGVzdChlLnZhbHVlLnJlcGxhY2UoQ2EsXCJcIikpO2lmKGUubW9kaWZpZXJzKXt2YXIgaT1cIlwiLG89XCJcIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihUYVtzXSlvKz1UYVtzXSxBYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoXCJleGFjdFwiPT09cyl7dmFyIGM9ZS5tb2RpZmllcnM7bys9T2EoW1wiY3RybFwiLFwic2hpZnRcIixcImFsdFwiLFwibWV0YVwiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWNbZV19KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCIkZXZlbnQuXCIrZStcIktleVwifSkuam9pbihcInx8XCIpKX1lbHNlIGEucHVzaChzKTtyZXR1cm4gYS5sZW5ndGgmJihpKz1cImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIrYS5tYXAoamEpLmpvaW4oXCImJlwiKStcIilyZXR1cm4gbnVsbDtcIiksbyYmKGkrPW8pLFwiZnVuY3Rpb24oJGV2ZW50KXtcIitpKyh0P1wicmV0dXJuIFwiK2UudmFsdWUrXCIoJGV2ZW50KVwiOm4/XCJyZXR1cm4gKFwiK2UudmFsdWUrXCIpKCRldmVudClcIjpyP1wicmV0dXJuIFwiK2UudmFsdWU6ZS52YWx1ZSkrXCJ9XCJ9cmV0dXJuIHR8fG4/ZS52YWx1ZTpcImZ1bmN0aW9uKCRldmVudCl7XCIrKHI/XCJyZXR1cm4gXCIrZS52YWx1ZTplLnZhbHVlKStcIn1cIn1mdW5jdGlvbiBqYShlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0KXJldHVyblwiJGV2ZW50LmtleUNvZGUhPT1cIit0O3ZhciBuPUFhW2VdLHI9U2FbZV07cmV0dXJuXCJfaygkZXZlbnQua2V5Q29kZSxcIitKU09OLnN0cmluZ2lmeShlKStcIixcIitKU09OLnN0cmluZ2lmeShuKStcIiwkZXZlbnQua2V5LFwiK0pTT04uc3RyaW5naWZ5KHIpK1wiKVwifXZhciBMYT17b246ZnVuY3Rpb24oZSx0KXtlLndyYXBMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuXCJfZyhcIitlK1wiLFwiK3QudmFsdWUrXCIpXCJ9fSxiaW5kOmZ1bmN0aW9uKGUsdCl7ZS53cmFwRGF0YT1mdW5jdGlvbihuKXtyZXR1cm5cIl9iKFwiK24rXCIsJ1wiK2UudGFnK1wiJyxcIit0LnZhbHVlK1wiLFwiKyh0Lm1vZGlmaWVycyYmdC5tb2RpZmllcnMucHJvcD9cInRydWVcIjpcImZhbHNlXCIpKyh0Lm1vZGlmaWVycyYmdC5tb2RpZmllcnMuc3luYz9cIix0cnVlXCI6XCJcIikrXCIpXCJ9fSxjbG9hazpJfSxOYT1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLndhcm49ZS53YXJufHxPcix0aGlzLnRyYW5zZm9ybXM9VHIoZS5tb2R1bGVzLFwidHJhbnNmb3JtQ29kZVwiKSx0aGlzLmRhdGFHZW5GbnM9VHIoZS5tb2R1bGVzLFwiZ2VuRGF0YVwiKSx0aGlzLmRpcmVjdGl2ZXM9VChUKHt9LExhKSxlLmRpcmVjdGl2ZXMpO3ZhciB0PWUuaXNSZXNlcnZlZFRhZ3x8ajt0aGlzLm1heWJlQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3JldHVybiEhZS5jb21wb25lbnR8fCF0KGUudGFnKX0sdGhpcy5vbmNlSWQ9MCx0aGlzLnN0YXRpY1JlbmRlckZucz1bXSx0aGlzLnByZT0hMX07ZnVuY3Rpb24gTWEoZSx0KXt2YXIgbj1uZXcgTmEodCk7cmV0dXJue3JlbmRlcjpcIndpdGgodGhpcyl7cmV0dXJuIFwiKyhlP0RhKGUsbik6J19jKFwiZGl2XCIpJykrXCJ9XCIsc3RhdGljUmVuZGVyRm5zOm4uc3RhdGljUmVuZGVyRm5zfX1mdW5jdGlvbiBEYShlLHQpe2lmKGUucGFyZW50JiYoZS5wcmU9ZS5wcmV8fGUucGFyZW50LnByZSksZS5zdGF0aWNSb290JiYhZS5zdGF0aWNQcm9jZXNzZWQpcmV0dXJuIFBhKGUsdCk7aWYoZS5vbmNlJiYhZS5vbmNlUHJvY2Vzc2VkKXJldHVybiBGYShlLHQpO2lmKGUuZm9yJiYhZS5mb3JQcm9jZXNzZWQpcmV0dXJuIEhhKGUsdCk7aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIFJhKGUsdCk7aWYoXCJ0ZW1wbGF0ZVwiIT09ZS50YWd8fGUuc2xvdFRhcmdldHx8dC5wcmUpe2lmKFwic2xvdFwiPT09ZS50YWcpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zbG90TmFtZXx8J1wiZGVmYXVsdFwiJyxyPVZhKGUsdCksaT1cIl90KFwiK24rKHI/XCIsXCIrcjpcIlwiKSxvPWUuYXR0cnN8fGUuZHluYW1pY0F0dHJzP3FhKChlLmF0dHJzfHxbXSkuY29uY2F0KGUuZHluYW1pY0F0dHJzfHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOngoZS5uYW1lKSx2YWx1ZTplLnZhbHVlLGR5bmFtaWM6ZS5keW5hbWljfX0pKTpudWxsLGE9ZS5hdHRyc01hcFtcInYtYmluZFwiXTtyZXR1cm4hbyYmIWF8fHJ8fChpKz1cIixudWxsXCIpLG8mJihpKz1cIixcIitvKSxhJiYoaSs9KG8/XCJcIjpcIixudWxsXCIpK1wiLFwiK2EpLGkrXCIpXCJ9KGUsdCk7dmFyIG47aWYoZS5jb21wb25lbnQpbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5pbmxpbmVUZW1wbGF0ZT9udWxsOlZhKHQsbiwhMCk7cmV0dXJuXCJfYyhcIitlK1wiLFwiK0JhKHQsbikrKHI/XCIsXCIrcjpcIlwiKStcIilcIn0oZS5jb21wb25lbnQsZSx0KTtlbHNle3ZhciByOyghZS5wbGFpbnx8ZS5wcmUmJnQubWF5YmVDb21wb25lbnQoZSkpJiYocj1CYShlLHQpKTt2YXIgaT1lLmlubGluZVRlbXBsYXRlP251bGw6VmEoZSx0LCEwKTtuPVwiX2MoJ1wiK2UudGFnK1wiJ1wiKyhyP1wiLFwiK3I6XCJcIikrKGk/XCIsXCIraTpcIlwiKStcIilcIn1mb3IodmFyIG89MDtvPHQudHJhbnNmb3Jtcy5sZW5ndGg7bysrKW49dC50cmFuc2Zvcm1zW29dKGUsbik7cmV0dXJuIG59cmV0dXJuIFZhKGUsdCl8fFwidm9pZCAwXCJ9ZnVuY3Rpb24gUGEoZSx0KXtlLnN0YXRpY1Byb2Nlc3NlZD0hMDt2YXIgbj10LnByZTtyZXR1cm4gZS5wcmUmJih0LnByZT1lLnByZSksdC5zdGF0aWNSZW5kZXJGbnMucHVzaChcIndpdGgodGhpcyl7cmV0dXJuIFwiK0RhKGUsdCkrXCJ9XCIpLHQucHJlPW4sXCJfbShcIisodC5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoLTEpKyhlLnN0YXRpY0luRm9yP1wiLHRydWVcIjpcIlwiKStcIilcIn1mdW5jdGlvbiBGYShlLHQpe2lmKGUub25jZVByb2Nlc3NlZD0hMCxlLmlmJiYhZS5pZlByb2Nlc3NlZClyZXR1cm4gUmEoZSx0KTtpZihlLnN0YXRpY0luRm9yKXtmb3IodmFyIG49XCJcIixyPWUucGFyZW50O3I7KXtpZihyLmZvcil7bj1yLmtleTticmVha31yPXIucGFyZW50fXJldHVybiBuP1wiX28oXCIrRGEoZSx0KStcIixcIit0Lm9uY2VJZCsrK1wiLFwiK24rXCIpXCI6RGEoZSx0KX1yZXR1cm4gUGEoZSx0KX1mdW5jdGlvbiBSYShlLHQsbixyKXtyZXR1cm4gZS5pZlByb2Nlc3NlZD0hMCxmdW5jdGlvbiBlKHQsbixyLGkpe2lmKCF0Lmxlbmd0aClyZXR1cm4gaXx8XCJfZSgpXCI7dmFyIG89dC5zaGlmdCgpO3JldHVybiBvLmV4cD9cIihcIitvLmV4cCtcIik/XCIrYShvLmJsb2NrKStcIjpcIitlKHQsbixyLGkpOlwiXCIrYShvLmJsb2NrKTtmdW5jdGlvbiBhKGUpe3JldHVybiByP3IoZSxuKTplLm9uY2U/RmEoZSxuKTpEYShlLG4pfX0oZS5pZkNvbmRpdGlvbnMuc2xpY2UoKSx0LG4scil9ZnVuY3Rpb24gSGEoZSx0LG4scil7dmFyIGk9ZS5mb3Isbz1lLmFsaWFzLGE9ZS5pdGVyYXRvcjE/XCIsXCIrZS5pdGVyYXRvcjE6XCJcIixzPWUuaXRlcmF0b3IyP1wiLFwiK2UuaXRlcmF0b3IyOlwiXCI7cmV0dXJuIGUuZm9yUHJvY2Vzc2VkPSEwLChyfHxcIl9sXCIpK1wiKChcIitpK1wiKSxmdW5jdGlvbihcIitvK2ErcytcIil7cmV0dXJuIFwiKyhufHxEYSkoZSx0KStcIn0pXCJ9ZnVuY3Rpb24gQmEoZSx0KXt2YXIgbj1cIntcIixyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5kaXJlY3RpdmVzO2lmKG4pe3ZhciByLGksbyxhLHM9XCJkaXJlY3RpdmVzOltcIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgbD10LmRpcmVjdGl2ZXNbby5uYW1lXTtsJiYoYT0hIWwoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZTpcIicrby5uYW1lKydcIixyYXdOYW1lOlwiJytvLnJhd05hbWUrJ1wiJysoby52YWx1ZT9cIix2YWx1ZTooXCIrby52YWx1ZStcIiksZXhwcmVzc2lvbjpcIitKU09OLnN0cmluZ2lmeShvLnZhbHVlKTpcIlwiKSsoby5hcmc/XCIsYXJnOlwiKyhvLmlzRHluYW1pY0FyZz9vLmFyZzonXCInK28uYXJnKydcIicpOlwiXCIpKyhvLm1vZGlmaWVycz9cIixtb2RpZmllcnM6XCIrSlNPTi5zdHJpbmdpZnkoby5tb2RpZmllcnMpOlwiXCIpK1wifSxcIil9cmV0dXJuIGM/cy5zbGljZSgwLC0xKStcIl1cIjp2b2lkIDB9fShlLHQpO3ImJihuKz1yK1wiLFwiKSxlLmtleSYmKG4rPVwia2V5OlwiK2Uua2V5K1wiLFwiKSxlLnJlZiYmKG4rPVwicmVmOlwiK2UucmVmK1wiLFwiKSxlLnJlZkluRm9yJiYobis9XCJyZWZJbkZvcjp0cnVlLFwiKSxlLnByZSYmKG4rPVwicHJlOnRydWUsXCIpLGUuY29tcG9uZW50JiYobis9J3RhZzpcIicrZS50YWcrJ1wiLCcpO2Zvcih2YXIgaT0wO2k8dC5kYXRhR2VuRm5zLmxlbmd0aDtpKyspbis9dC5kYXRhR2VuRm5zW2ldKGUpO2lmKGUuYXR0cnMmJihuKz1cImF0dHJzOlwiK3FhKGUuYXR0cnMpK1wiLFwiKSxlLnByb3BzJiYobis9XCJkb21Qcm9wczpcIitxYShlLnByb3BzKStcIixcIiksZS5ldmVudHMmJihuKz1FYShlLmV2ZW50cywhMSkrXCIsXCIpLGUubmF0aXZlRXZlbnRzJiYobis9RWEoZS5uYXRpdmVFdmVudHMsITApK1wiLFwiKSxlLnNsb3RUYXJnZXQmJiFlLnNsb3RTY29wZSYmKG4rPVwic2xvdDpcIitlLnNsb3RUYXJnZXQrXCIsXCIpLGUuc2NvcGVkU2xvdHMmJihuKz1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5mb3J8fE9iamVjdC5rZXlzKHQpLnNvbWUoZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtyZXR1cm4gbi5zbG90VGFyZ2V0RHluYW1pY3x8bi5pZnx8bi5mb3J8fFVhKG4pfSksaT0hIWUuaWY7aWYoIXIpZm9yKHZhciBvPWUucGFyZW50O287KXtpZihvLnNsb3RTY29wZSYmby5zbG90U2NvcGUhPT1zYXx8by5mb3Ipe3I9ITA7YnJlYWt9by5pZiYmKGk9ITApLG89by5wYXJlbnR9dmFyIGE9T2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB6YSh0W2VdLG4pfSkuam9pbihcIixcIik7cmV0dXJuXCJzY29wZWRTbG90czpfdShbXCIrYStcIl1cIisocj9cIixudWxsLHRydWVcIjpcIlwiKSsoIXImJmk/XCIsbnVsbCxmYWxzZSxcIitmdW5jdGlvbihlKXtmb3IodmFyIHQ9NTM4MSxuPWUubGVuZ3RoO247KXQ9MzMqdF5lLmNoYXJDb2RlQXQoLS1uKTtyZXR1cm4gdD4+PjB9KGEpOlwiXCIpK1wiKVwifShlLGUuc2NvcGVkU2xvdHMsdCkrXCIsXCIpLGUubW9kZWwmJihuKz1cIm1vZGVsOnt2YWx1ZTpcIitlLm1vZGVsLnZhbHVlK1wiLGNhbGxiYWNrOlwiK2UubW9kZWwuY2FsbGJhY2srXCIsZXhwcmVzc2lvbjpcIitlLm1vZGVsLmV4cHJlc3Npb24rXCJ9LFwiKSxlLmlubGluZVRlbXBsYXRlKXt2YXIgbz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY2hpbGRyZW5bMF07aWYobiYmMT09PW4udHlwZSl7dmFyIHI9TWEobix0Lm9wdGlvbnMpO3JldHVyblwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiK3IucmVuZGVyK1wifSxzdGF0aWNSZW5kZXJGbnM6W1wiK3Iuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uKCl7XCIrZStcIn1cIn0pLmpvaW4oXCIsXCIpK1wiXX1cIn19KGUsdCk7byYmKG4rPW8rXCIsXCIpfXJldHVybiBuPW4ucmVwbGFjZSgvLCQvLFwiXCIpK1wifVwiLGUuZHluYW1pY0F0dHJzJiYobj1cIl9iKFwiK24rJyxcIicrZS50YWcrJ1wiLCcrcWEoZS5keW5hbWljQXR0cnMpK1wiKVwiKSxlLndyYXBEYXRhJiYobj1lLndyYXBEYXRhKG4pKSxlLndyYXBMaXN0ZW5lcnMmJihuPWUud3JhcExpc3RlbmVycyhuKSksbn1mdW5jdGlvbiBVYShlKXtyZXR1cm4gMT09PWUudHlwZSYmKFwic2xvdFwiPT09ZS50YWd8fGUuY2hpbGRyZW4uc29tZShVYSkpfWZ1bmN0aW9uIHphKGUsdCl7dmFyIG49ZS5hdHRyc01hcFtcInNsb3Qtc2NvcGVcIl07aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQmJiFuKXJldHVybiBSYShlLHQsemEsXCJudWxsXCIpO2lmKGUuZm9yJiYhZS5mb3JQcm9jZXNzZWQpcmV0dXJuIEhhKGUsdCx6YSk7dmFyIHI9ZS5zbG90U2NvcGU9PT1zYT9cIlwiOlN0cmluZyhlLnNsb3RTY29wZSksaT1cImZ1bmN0aW9uKFwiK3IrXCIpe3JldHVybiBcIisoXCJ0ZW1wbGF0ZVwiPT09ZS50YWc/ZS5pZiYmbj9cIihcIitlLmlmK1wiKT9cIisoVmEoZSx0KXx8XCJ1bmRlZmluZWRcIikrXCI6dW5kZWZpbmVkXCI6VmEoZSx0KXx8XCJ1bmRlZmluZWRcIjpEYShlLHQpKStcIn1cIixvPXI/XCJcIjpcIixwcm94eTp0cnVlXCI7cmV0dXJuXCJ7a2V5OlwiKyhlLnNsb3RUYXJnZXR8fCdcImRlZmF1bHRcIicpK1wiLGZuOlwiK2krbytcIn1cIn1mdW5jdGlvbiBWYShlLHQsbixyLGkpe3ZhciBvPWUuY2hpbGRyZW47aWYoby5sZW5ndGgpe3ZhciBhPW9bMF07aWYoMT09PW8ubGVuZ3RoJiZhLmZvciYmXCJ0ZW1wbGF0ZVwiIT09YS50YWcmJlwic2xvdFwiIT09YS50YWcpe3ZhciBzPW4/dC5tYXliZUNvbXBvbmVudChhKT9cIiwxXCI6XCIsMFwiOlwiXCI7cmV0dXJuXCJcIisocnx8RGEpKGEsdCkrc312YXIgYz1uP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO2lmKDE9PT1pLnR5cGUpe2lmKEthKGkpfHxpLmlmQ29uZGl0aW9ucyYmaS5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gS2EoZS5ibG9jayl9KSl7bj0yO2JyZWFrfSh0KGkpfHxpLmlmQ29uZGl0aW9ucyYmaS5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdChlLmJsb2NrKX0pKSYmKG49MSl9fXJldHVybiBufShvLHQubWF5YmVDb21wb25lbnQpOjAsbD1pfHxKYTtyZXR1cm5cIltcIitvLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbChlLHQpfSkuam9pbihcIixcIikrXCJdXCIrKGM/XCIsXCIrYzpcIlwiKX19ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIHZvaWQgMCE9PWUuZm9yfHxcInRlbXBsYXRlXCI9PT1lLnRhZ3x8XCJzbG90XCI9PT1lLnRhZ31mdW5jdGlvbiBKYShlLHQpe3JldHVybiAxPT09ZS50eXBlP0RhKGUsdCk6Mz09PWUudHlwZSYmZS5pc0NvbW1lbnQ/KHI9ZSxcIl9lKFwiK0pTT04uc3RyaW5naWZ5KHIudGV4dCkrXCIpXCIpOlwiX3YoXCIrKDI9PT0obj1lKS50eXBlP24uZXhwcmVzc2lvbjpXYShKU09OLnN0cmluZ2lmeShuLnRleHQpKSkrXCIpXCI7dmFyIG4scn1mdW5jdGlvbiBxYShlKXtmb3IodmFyIHQ9XCJcIixuPVwiXCIscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdLG89V2EoaS52YWx1ZSk7aS5keW5hbWljP24rPWkubmFtZStcIixcIitvK1wiLFwiOnQrPSdcIicraS5uYW1lKydcIjonK28rXCIsXCJ9cmV0dXJuIHQ9XCJ7XCIrdC5zbGljZSgwLC0xKStcIn1cIixuP1wiX2QoXCIrdCtcIixbXCIrbi5zbGljZSgwLC0xKStcIl0pXCI6dH1mdW5jdGlvbiBXYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXHUyMDI4L2csXCJcXFxcdTIwMjhcIikucmVwbGFjZSgvXFx1MjAyOS9nLFwiXFxcXHUyMDI5XCIpfWZ1bmN0aW9uIFphKGUsdCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oZSl9Y2F0Y2gobil7cmV0dXJuIHQucHVzaCh7ZXJyOm4sY29kZTplfSksSX19ZnVuY3Rpb24gR2EoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obixyLGkpeyhyPVQoe30scikpLndhcm4sZGVsZXRlIHIud2Fybjt2YXIgbz1yLmRlbGltaXRlcnM/U3RyaW5nKHIuZGVsaW1pdGVycykrbjpuO2lmKHRbb10pcmV0dXJuIHRbb107dmFyIGE9ZShuLHIpLHM9e30sYz1bXTtyZXR1cm4gcy5yZW5kZXI9WmEoYS5yZW5kZXIsYykscy5zdGF0aWNSZW5kZXJGbnM9YS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBaYShlLGMpfSksdFtvXT1zfX1uZXcgUmVnRXhwKFwiXFxcXGJcIitcImRvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3Qsc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LGV4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHNcIi5zcGxpdChcIixcIikuam9pbihcIlxcXFxifFxcXFxiXCIpK1wiXFxcXGJcIik7dmFyIFhhLFlhLFFhPShYYT1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7SG89dC53YXJufHxPcixLbz10LmlzUHJlVGFnfHxqLEpvPXQubXVzdFVzZVByb3B8fGoscW89dC5nZXRUYWdOYW1lc3BhY2V8fGosdC5pc1Jlc2VydmVkVGFnLFVvPVRyKHQubW9kdWxlcyxcInRyYW5zZm9ybU5vZGVcIiksem89VHIodC5tb2R1bGVzLFwicHJlVHJhbnNmb3JtTm9kZVwiKSxWbz1Ucih0Lm1vZHVsZXMsXCJwb3N0VHJhbnNmb3JtTm9kZVwiKSxCbz10LmRlbGltaXRlcnM7dmFyIG4scixpPVtdLG89ITEhPT10LnByZXNlcnZlV2hpdGVzcGFjZSxhPXQud2hpdGVzcGFjZSxzPSExLGM9ITE7ZnVuY3Rpb24gbChlKXtpZih1KGUpLHN8fGUucHJvY2Vzc2VkfHwoZT1sYShlLHQpKSxpLmxlbmd0aHx8ZT09PW58fG4uaWYmJihlLmVsc2VpZnx8ZS5lbHNlKSYmZmEobix7ZXhwOmUuZWxzZWlmLGJsb2NrOmV9KSxyJiYhZS5mb3JiaWRkZW4paWYoZS5lbHNlaWZ8fGUuZWxzZSlhPWUsKGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLTspe2lmKDE9PT1lW3RdLnR5cGUpcmV0dXJuIGVbdF07ZS5wb3AoKX19KHIuY2hpbGRyZW4pKSYmbC5pZiYmZmEobCx7ZXhwOmEuZWxzZWlmLGJsb2NrOmF9KTtlbHNle2lmKGUuc2xvdFNjb3BlKXt2YXIgbz1lLnNsb3RUYXJnZXR8fCdcImRlZmF1bHRcIic7KHIuc2NvcGVkU2xvdHN8fChyLnNjb3BlZFNsb3RzPXt9KSlbb109ZX1yLmNoaWxkcmVuLnB1c2goZSksZS5wYXJlbnQ9cn12YXIgYSxsO2UuY2hpbGRyZW49ZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuc2xvdFNjb3BlfSksdShlKSxlLnByZSYmKHM9ITEpLEtvKGUudGFnKSYmKGM9ITEpO2Zvcih2YXIgZj0wO2Y8Vm8ubGVuZ3RoO2YrKylWb1tmXShlLHQpfWZ1bmN0aW9uIHUoZSl7aWYoIWMpZm9yKHZhciB0Oyh0PWUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV0pJiYzPT09dC50eXBlJiZcIiBcIj09PXQudGV4dDspZS5jaGlsZHJlbi5wb3AoKX1yZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpPVtdLG89dC5leHBlY3RIVE1MLGE9dC5pc1VuYXJ5VGFnfHxqLHM9dC5jYW5CZUxlZnRPcGVuVGFnfHxqLGM9MDtlOyl7aWYobj1lLHImJmpvKHIpKXt2YXIgbD0wLHU9ci50b0xvd2VyQ2FzZSgpLGY9TG9bdV18fChMb1t1XT1uZXcgUmVnRXhwKFwiKFtcXFxcc1xcXFxTXSo/KSg8L1wiK3UrXCJbXj5dKj4pXCIsXCJpXCIpKSxkPWUucmVwbGFjZShmLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbD1yLmxlbmd0aCxqbyh1KXx8XCJub3NjcmlwdFwiPT09dXx8KG49bi5yZXBsYWNlKC88IVxcLS0oW1xcc1xcU10qPyktLT4vZyxcIiQxXCIpLnJlcGxhY2UoLzwhXFxbQ0RBVEFcXFsoW1xcc1xcU10qPyldXT4vZyxcIiQxXCIpKSxGbyh1LG4pJiYobj1uLnNsaWNlKDEpKSx0LmNoYXJzJiZ0LmNoYXJzKG4pLFwiXCJ9KTtjKz1lLmxlbmd0aC1kLmxlbmd0aCxlPWQsQSh1LGMtbCxjKX1lbHNle3ZhciBwPWUuaW5kZXhPZihcIjxcIik7aWYoMD09PXApe2lmKEVvLnRlc3QoZSkpe3ZhciB2PWUuaW5kZXhPZihcIi0tXFx4M2VcIik7aWYodj49MCl7dC5zaG91bGRLZWVwQ29tbWVudCYmdC5jb21tZW50KGUuc3Vic3RyaW5nKDQsdiksYyxjK3YrMykseCh2KzMpO2NvbnRpbnVlfX1pZihJby50ZXN0KGUpKXt2YXIgaD1lLmluZGV4T2YoXCJdPlwiKTtpZihoPj0wKXt4KGgrMik7Y29udGludWV9fXZhciBtPWUubWF0Y2goVG8pO2lmKG0pe3gobVswXS5sZW5ndGgpO2NvbnRpbnVlfXZhciB5PWUubWF0Y2goT28pO2lmKHkpe3ZhciBnPWM7eCh5WzBdLmxlbmd0aCksQSh5WzFdLGcsYyk7Y29udGludWV9dmFyIF89QygpO2lmKF8pe2soXyksRm8oXy50YWdOYW1lLGUpJiZ4KDEpO2NvbnRpbnVlfX12YXIgYj12b2lkIDAsdz12b2lkIDAsJD12b2lkIDA7aWYocD49MCl7Zm9yKHc9ZS5zbGljZShwKTshKE9vLnRlc3Qodyl8fEFvLnRlc3Qodyl8fEVvLnRlc3Qodyl8fElvLnRlc3Qodyl8fCgkPXcuaW5kZXhPZihcIjxcIiwxKSk8MCk7KXArPSQsdz1lLnNsaWNlKHApO2I9ZS5zdWJzdHJpbmcoMCxwKX1wPDAmJihiPWUpLGImJngoYi5sZW5ndGgpLHQuY2hhcnMmJmImJnQuY2hhcnMoYixjLWIubGVuZ3RoLGMpfWlmKGU9PT1uKXt0LmNoYXJzJiZ0LmNoYXJzKGUpO2JyZWFrfX1mdW5jdGlvbiB4KHQpe2MrPXQsZT1lLnN1YnN0cmluZyh0KX1mdW5jdGlvbiBDKCl7dmFyIHQ9ZS5tYXRjaChBbyk7aWYodCl7dmFyIG4scixpPXt0YWdOYW1lOnRbMV0sYXR0cnM6W10sc3RhcnQ6Y307Zm9yKHgodFswXS5sZW5ndGgpOyEobj1lLm1hdGNoKFNvKSkmJihyPWUubWF0Y2goeG8pfHxlLm1hdGNoKCRvKSk7KXIuc3RhcnQ9Yyx4KHJbMF0ubGVuZ3RoKSxyLmVuZD1jLGkuYXR0cnMucHVzaChyKTtpZihuKXJldHVybiBpLnVuYXJ5U2xhc2g9blsxXSx4KG5bMF0ubGVuZ3RoKSxpLmVuZD1jLGl9fWZ1bmN0aW9uIGsoZSl7dmFyIG49ZS50YWdOYW1lLGM9ZS51bmFyeVNsYXNoO28mJihcInBcIj09PXImJndvKG4pJiZBKHIpLHMobikmJnI9PT1uJiZBKG4pKTtmb3IodmFyIGw9YShuKXx8ISFjLHU9ZS5hdHRycy5sZW5ndGgsZj1uZXcgQXJyYXkodSksZD0wO2Q8dTtkKyspe3ZhciBwPWUuYXR0cnNbZF0sdj1wWzNdfHxwWzRdfHxwWzVdfHxcIlwiLGg9XCJhXCI9PT1uJiZcImhyZWZcIj09PXBbMV0/dC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6dC5zaG91bGREZWNvZGVOZXdsaW5lcztmW2RdPXtuYW1lOnBbMV0sdmFsdWU6Um8odixoKX19bHx8KGkucHVzaCh7dGFnOm4sbG93ZXJDYXNlZFRhZzpuLnRvTG93ZXJDYXNlKCksYXR0cnM6ZixzdGFydDplLnN0YXJ0LGVuZDplLmVuZH0pLHI9biksdC5zdGFydCYmdC5zdGFydChuLGYsbCxlLnN0YXJ0LGUuZW5kKX1mdW5jdGlvbiBBKGUsbixvKXt2YXIgYSxzO2lmKG51bGw9PW4mJihuPWMpLG51bGw9PW8mJihvPWMpLGUpZm9yKHM9ZS50b0xvd2VyQ2FzZSgpLGE9aS5sZW5ndGgtMTthPj0wJiZpW2FdLmxvd2VyQ2FzZWRUYWchPT1zO2EtLSk7ZWxzZSBhPTA7aWYoYT49MCl7Zm9yKHZhciBsPWkubGVuZ3RoLTE7bD49YTtsLS0pdC5lbmQmJnQuZW5kKGlbbF0udGFnLG4sbyk7aS5sZW5ndGg9YSxyPWEmJmlbYS0xXS50YWd9ZWxzZVwiYnJcIj09PXM/dC5zdGFydCYmdC5zdGFydChlLFtdLCEwLG4sbyk6XCJwXCI9PT1zJiYodC5zdGFydCYmdC5zdGFydChlLFtdLCExLG4sbyksdC5lbmQmJnQuZW5kKGUsbixvKSl9QSgpfShlLHt3YXJuOkhvLGV4cGVjdEhUTUw6dC5leHBlY3RIVE1MLGlzVW5hcnlUYWc6dC5pc1VuYXJ5VGFnLGNhbkJlTGVmdE9wZW5UYWc6dC5jYW5CZUxlZnRPcGVuVGFnLHNob3VsZERlY29kZU5ld2xpbmVzOnQuc2hvdWxkRGVjb2RlTmV3bGluZXMsc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOnQuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmLHNob3VsZEtlZXBDb21tZW50OnQuY29tbWVudHMsb3V0cHV0U291cmNlUmFuZ2U6dC5vdXRwdXRTb3VyY2VSYW5nZSxzdGFydDpmdW5jdGlvbihlLG8sYSx1LGYpe3ZhciBkPXImJnIubnN8fHFvKGUpO0cmJlwic3ZnXCI9PT1kJiYobz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO2hhLnRlc3Qoci5uYW1lKXx8KHIubmFtZT1yLm5hbWUucmVwbGFjZShtYSxcIlwiKSx0LnB1c2gocikpfXJldHVybiB0fShvKSk7dmFyIHAsdj1jYShlLG8scik7ZCYmKHYubnM9ZCksXCJzdHlsZVwiIT09KHA9dikudGFnJiYoXCJzY3JpcHRcIiE9PXAudGFnfHxwLmF0dHJzTWFwLnR5cGUmJlwidGV4dC9qYXZhc2NyaXB0XCIhPT1wLmF0dHJzTWFwLnR5cGUpfHxpZSgpfHwodi5mb3JiaWRkZW49ITApO2Zvcih2YXIgaD0wO2g8em8ubGVuZ3RoO2grKyl2PXpvW2hdKHYsdCl8fHY7c3x8KGZ1bmN0aW9uKGUpe251bGwhPVByKGUsXCJ2LXByZVwiKSYmKGUucHJlPSEwKX0odiksdi5wcmUmJihzPSEwKSksS28odi50YWcpJiYoYz0hMCkscz9mdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJzTGlzdCxuPXQubGVuZ3RoO2lmKG4pZm9yKHZhciByPWUuYXR0cnM9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09e25hbWU6dFtpXS5uYW1lLHZhbHVlOkpTT04uc3RyaW5naWZ5KHRbaV0udmFsdWUpfSxudWxsIT10W2ldLnN0YXJ0JiYocltpXS5zdGFydD10W2ldLnN0YXJ0LHJbaV0uZW5kPXRbaV0uZW5kKTtlbHNlIGUucHJlfHwoZS5wbGFpbj0hMCl9KHYpOnYucHJvY2Vzc2VkfHwodWEodiksZnVuY3Rpb24oZSl7dmFyIHQ9UHIoZSxcInYtaWZcIik7aWYodCllLmlmPXQsZmEoZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9UHIoZSxcInYtZWxzZVwiKSYmKGUuZWxzZT0hMCk7dmFyIG49UHIoZSxcInYtZWxzZS1pZlwiKTtuJiYoZS5lbHNlaWY9bil9fSh2KSxmdW5jdGlvbihlKXtudWxsIT1QcihlLFwidi1vbmNlXCIpJiYoZS5vbmNlPSEwKX0odikpLG58fChuPXYpLGE/bCh2KToocj12LGkucHVzaCh2KSl9LGVuZDpmdW5jdGlvbihlLHQsbil7dmFyIG89aVtpLmxlbmd0aC0xXTtpLmxlbmd0aC09MSxyPWlbaS5sZW5ndGgtMV0sbChvKX0sY2hhcnM6ZnVuY3Rpb24oZSx0LG4pe2lmKHImJighR3x8XCJ0ZXh0YXJlYVwiIT09ci50YWd8fHIuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIGksbCx1LGY9ci5jaGlsZHJlbjsoZT1jfHxlLnRyaW0oKT9cInNjcmlwdFwiPT09KGk9cikudGFnfHxcInN0eWxlXCI9PT1pLnRhZz9lOmFhKGUpOmYubGVuZ3RoP2E/XCJjb25kZW5zZVwiPT09YSYmaWEudGVzdChlKT9cIlwiOlwiIFwiOm8/XCIgXCI6XCJcIjpcIlwiKSYmKGN8fFwiY29uZGVuc2VcIiE9PWF8fChlPWUucmVwbGFjZShvYSxcIiBcIikpLCFzJiZcIiBcIiE9PWUmJihsPWZ1bmN0aW9uKGUsdCl7dmFyIG49Qm8/bW8oQm8pOnZvO2lmKG4udGVzdChlKSl7Zm9yKHZhciByLGksbyxhPVtdLHM9W10sYz1uLmxhc3RJbmRleD0wO3I9bi5leGVjKGUpOyl7KGk9ci5pbmRleCk+YyYmKHMucHVzaChvPWUuc2xpY2UoYyxpKSksYS5wdXNoKEpTT04uc3RyaW5naWZ5KG8pKSk7dmFyIGw9QXIoclsxXS50cmltKCkpO2EucHVzaChcIl9zKFwiK2wrXCIpXCIpLHMucHVzaCh7XCJAYmluZGluZ1wiOmx9KSxjPWkrclswXS5sZW5ndGh9cmV0dXJuIGM8ZS5sZW5ndGgmJihzLnB1c2gobz1lLnNsaWNlKGMpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKSx7ZXhwcmVzc2lvbjphLmpvaW4oXCIrXCIpLHRva2VuczpzfX19KGUpKT91PXt0eXBlOjIsZXhwcmVzc2lvbjpsLmV4cHJlc3Npb24sdG9rZW5zOmwudG9rZW5zLHRleHQ6ZX06XCIgXCI9PT1lJiZmLmxlbmd0aCYmXCIgXCI9PT1mW2YubGVuZ3RoLTFdLnRleHR8fCh1PXt0eXBlOjMsdGV4dDplfSksdSYmZi5wdXNoKHUpKX19LGNvbW1lbnQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHIpe3ZhciBpPXt0eXBlOjMsdGV4dDplLGlzQ29tbWVudDohMH07ci5jaGlsZHJlbi5wdXNoKGkpfX19KSxufShlLnRyaW0oKSx0KTshMSE9PXQub3B0aW1pemUmJmZ1bmN0aW9uKGUsdCl7ZSYmKGdhPSRhKHQuc3RhdGljS2V5c3x8XCJcIiksX2E9dC5pc1Jlc2VydmVkVGFnfHxqLGZ1bmN0aW9uIGUodCl7aWYodC5zdGF0aWM9ZnVuY3Rpb24oZSl7cmV0dXJuIDIhPT1lLnR5cGUmJigzPT09ZS50eXBlfHwhKCFlLnByZSYmKGUuaGFzQmluZGluZ3N8fGUuaWZ8fGUuZm9yfHxtKGUudGFnKXx8IV9hKGUudGFnKXx8ZnVuY3Rpb24oZSl7Zm9yKDtlLnBhcmVudDspe2lmKFwidGVtcGxhdGVcIiE9PShlPWUucGFyZW50KS50YWcpcmV0dXJuITE7aWYoZS5mb3IpcmV0dXJuITB9cmV0dXJuITF9KGUpfHwhT2JqZWN0LmtleXMoZSkuZXZlcnkoZ2EpKSkpfSh0KSwxPT09dC50eXBlKXtpZighX2EodC50YWcpJiZcInNsb3RcIiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwW1wiaW5saW5lLXRlbXBsYXRlXCJdKXJldHVybjtmb3IodmFyIG49MCxyPXQuY2hpbGRyZW4ubGVuZ3RoO248cjtuKyspe3ZhciBpPXQuY2hpbGRyZW5bbl07ZShpKSxpLnN0YXRpY3x8KHQuc3RhdGljPSExKX1pZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKXt2YXIgcz10LmlmQ29uZGl0aW9uc1tvXS5ibG9jaztlKHMpLHMuc3RhdGljfHwodC5zdGF0aWM9ITEpfX19KGUpLGZ1bmN0aW9uIGUodCxuKXtpZigxPT09dC50eXBlKXtpZigodC5zdGF0aWN8fHQub25jZSkmJih0LnN0YXRpY0luRm9yPW4pLHQuc3RhdGljJiZ0LmNoaWxkcmVuLmxlbmd0aCYmKDEhPT10LmNoaWxkcmVuLmxlbmd0aHx8MyE9PXQuY2hpbGRyZW5bMF0udHlwZSkpcmV0dXJuIHZvaWQodC5zdGF0aWNSb290PSEwKTtpZih0LnN0YXRpY1Jvb3Q9ITEsdC5jaGlsZHJlbilmb3IodmFyIHI9MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO3I8aTtyKyspZSh0LmNoaWxkcmVuW3JdLG58fCEhdC5mb3IpO2lmKHQuaWZDb25kaXRpb25zKWZvcih2YXIgbz0xLGE9dC5pZkNvbmRpdGlvbnMubGVuZ3RoO288YTtvKyspZSh0LmlmQ29uZGl0aW9uc1tvXS5ibG9jayxuKX19KGUsITEpKX0obix0KTt2YXIgcj1NYShuLHQpO3JldHVybnthc3Q6bixyZW5kZXI6ci5yZW5kZXIsc3RhdGljUmVuZGVyRm5zOnIuc3RhdGljUmVuZGVyRm5zfX0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPU9iamVjdC5jcmVhdGUoZSksaT1bXSxvPVtdO2lmKG4pZm9yKHZhciBhIGluIG4ubW9kdWxlcyYmKHIubW9kdWxlcz0oZS5tb2R1bGVzfHxbXSkuY29uY2F0KG4ubW9kdWxlcykpLG4uZGlyZWN0aXZlcyYmKHIuZGlyZWN0aXZlcz1UKE9iamVjdC5jcmVhdGUoZS5kaXJlY3RpdmVzfHxudWxsKSxuLmRpcmVjdGl2ZXMpKSxuKVwibW9kdWxlc1wiIT09YSYmXCJkaXJlY3RpdmVzXCIhPT1hJiYoclthXT1uW2FdKTtyLndhcm49ZnVuY3Rpb24oZSx0LG4peyhuP286aSkucHVzaChlKX07dmFyIHM9WGEodC50cmltKCkscik7cmV0dXJuIHMuZXJyb3JzPWkscy50aXBzPW8sc31yZXR1cm57Y29tcGlsZTp0LGNvbXBpbGVUb0Z1bmN0aW9uczpHYSh0KX19KSh3YSksZXM9KFFhLmNvbXBpbGUsUWEuY29tcGlsZVRvRnVuY3Rpb25zKTtmdW5jdGlvbiB0cyhlKXtyZXR1cm4oWWE9WWF8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1lPyc8YSBocmVmPVwiXFxuXCIvPic6JzxkaXYgYT1cIlxcblwiLz4nLFlhLmlubmVySFRNTC5pbmRleE9mKFwiJiMxMDtcIik+MH12YXIgbnM9ISFKJiZ0cyghMSkscnM9ISFKJiZ0cyghMCksaXM9dyhmdW5jdGlvbihlKXt2YXIgdD1ZbihlKTtyZXR1cm4gdCYmdC5pbm5lckhUTUx9KSxvcz1Dbi5wcm90b3R5cGUuJG1vdW50O0NuLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtpZigoZT1lJiZZbihlKSk9PT1kb2N1bWVudC5ib2R5fHxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXJldHVybiB0aGlzO3ZhciBuPXRoaXMuJG9wdGlvbnM7aWYoIW4ucmVuZGVyKXt2YXIgcj1uLnRlbXBsYXRlO2lmKHIpaWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpXCIjXCI9PT1yLmNoYXJBdCgwKSYmKHI9aXMocikpO2Vsc2V7aWYoIXIubm9kZVR5cGUpcmV0dXJuIHRoaXM7cj1yLmlubmVySFRNTH1lbHNlIGUmJihyPWZ1bmN0aW9uKGUpe2lmKGUub3V0ZXJIVE1MKXJldHVybiBlLm91dGVySFRNTDt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiB0LmFwcGVuZENoaWxkKGUuY2xvbmVOb2RlKCEwKSksdC5pbm5lckhUTUx9KGUpKTtpZihyKXt2YXIgaT1lcyhyLHtvdXRwdXRTb3VyY2VSYW5nZTohMSxzaG91bGREZWNvZGVOZXdsaW5lczpucyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6cnMsZGVsaW1pdGVyczpuLmRlbGltaXRlcnMsY29tbWVudHM6bi5jb21tZW50c30sdGhpcyksbz1pLnJlbmRlcixhPWkuc3RhdGljUmVuZGVyRm5zO24ucmVuZGVyPW8sbi5zdGF0aWNSZW5kZXJGbnM9YX19cmV0dXJuIG9zLmNhbGwodGhpcyxlLHQpfSxDbi5jb21waWxlPWVzLGUuZXhwb3J0cz1Dbn0pLmNhbGwodGhpcyxuKDEpLG4oNCkuc2V0SW1tZWRpYXRlKX0sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihlKXt2YXIgcj12b2lkIDAhPT1lJiZlfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZnx8d2luZG93LGk9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O2Z1bmN0aW9uIG8oZSx0KXt0aGlzLl9pZD1lLHRoaXMuX2NsZWFyRm49dH10LnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8oaS5jYWxsKHNldFRpbWVvdXQscixhcmd1bWVudHMpLGNsZWFyVGltZW91dCl9LHQuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8oaS5jYWxsKHNldEludGVydmFsLHIsYXJndW1lbnRzKSxjbGVhckludGVydmFsKX0sdC5jbGVhclRpbWVvdXQ9dC5jbGVhckludGVydmFsPWZ1bmN0aW9uKGUpe2UmJmUuY2xvc2UoKX0sby5wcm90b3R5cGUudW5yZWY9by5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKCl7fSxvLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2NsZWFyRm4uY2FsbChyLHRoaXMuX2lkKX0sdC5lbnJvbGw9ZnVuY3Rpb24oZSx0KXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCksZS5faWRsZVRpbWVvdXQ9dH0sdC51bmVucm9sbD1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCksZS5faWRsZVRpbWVvdXQ9LTF9LHQuX3VucmVmQWN0aXZlPXQuYWN0aXZlPWZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChlLl9pZGxlVGltZW91dElkKTt2YXIgdD1lLl9pZGxlVGltZW91dDt0Pj0wJiYoZS5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fb25UaW1lb3V0JiZlLl9vblRpbWVvdXQoKX0sdCkpfSxuKDUpLHQuc2V0SW1tZWRpYXRlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLnNldEltbWVkaWF0ZXx8dm9pZCAwIT09ZSYmZS5zZXRJbW1lZGlhdGV8fHRoaXMmJnRoaXMuc2V0SW1tZWRpYXRlLHQuY2xlYXJJbW1lZGlhdGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuY2xlYXJJbW1lZGlhdGV8fHZvaWQgMCE9PWUmJmUuY2xlYXJJbW1lZGlhdGV8fHRoaXMmJnRoaXMuY2xlYXJJbW1lZGlhdGV9KS5jYWxsKHRoaXMsbigxKSl9LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjtpZighZS5zZXRJbW1lZGlhdGUpe3ZhciByLGksbyxhLHMsYz0xLGw9e30sdT0hMSxmPWUuZG9jdW1lbnQsZD1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtkPWQmJmQuc2V0VGltZW91dD9kOmUsXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKGUucHJvY2Vzcyk/cj1mdW5jdGlvbihlKXt0Lm5leHRUaWNrKGZ1bmN0aW9uKCl7dihlKX0pfTohZnVuY3Rpb24oKXtpZihlLnBvc3RNZXNzYWdlJiYhZS5pbXBvcnRTY3JpcHRzKXt2YXIgdD0hMCxuPWUub25tZXNzYWdlO3JldHVybiBlLm9ubWVzc2FnZT1mdW5jdGlvbigpe3Q9ITF9LGUucG9zdE1lc3NhZ2UoXCJcIixcIipcIiksZS5vbm1lc3NhZ2U9bix0fX0oKT9lLk1lc3NhZ2VDaGFubmVsPygobz1uZXcgTWVzc2FnZUNoYW5uZWwpLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2KGUuZGF0YSl9LHI9ZnVuY3Rpb24oZSl7by5wb3J0Mi5wb3N0TWVzc2FnZShlKX0pOmYmJlwib25yZWFkeXN0YXRlY2hhbmdlXCJpbiBmLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik/KGk9Zi5kb2N1bWVudEVsZW1lbnQscj1mdW5jdGlvbihlKXt2YXIgdD1mLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7dC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt2KGUpLHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsaS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9LGkuYXBwZW5kQ2hpbGQodCl9KTpyPWZ1bmN0aW9uKGUpe3NldFRpbWVvdXQodiwwLGUpfTooYT1cInNldEltbWVkaWF0ZSRcIitNYXRoLnJhbmRvbSgpK1wiJFwiLHM9ZnVuY3Rpb24odCl7dC5zb3VyY2U9PT1lJiZcInN0cmluZ1wiPT10eXBlb2YgdC5kYXRhJiYwPT09dC5kYXRhLmluZGV4T2YoYSkmJnYoK3QuZGF0YS5zbGljZShhLmxlbmd0aCkpfSxlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHMsITEpOmUuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIixzKSxyPWZ1bmN0aW9uKHQpe2UucG9zdE1lc3NhZ2UoYSt0LFwiKlwiKX0pLGQuc2V0SW1tZWRpYXRlPWZ1bmN0aW9uKGUpe1wiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJihlPW5ldyBGdW5jdGlvbihcIlwiK2UpKTtmb3IodmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSksbj0wO248dC5sZW5ndGg7bisrKXRbbl09YXJndW1lbnRzW24rMV07dmFyIGk9e2NhbGxiYWNrOmUsYXJnczp0fTtyZXR1cm4gbFtjXT1pLHIoYyksYysrfSxkLmNsZWFySW1tZWRpYXRlPXB9ZnVuY3Rpb24gcChlKXtkZWxldGUgbFtlXX1mdW5jdGlvbiB2KGUpe2lmKHUpc2V0VGltZW91dCh2LDAsZSk7ZWxzZXt2YXIgdD1sW2VdO2lmKHQpe3U9ITA7dHJ5eyFmdW5jdGlvbihlKXt2YXIgdD1lLmNhbGxiYWNrLHI9ZS5hcmdzO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnQoKTticmVhaztjYXNlIDE6dChyWzBdKTticmVhaztjYXNlIDI6dChyWzBdLHJbMV0pO2JyZWFrO2Nhc2UgMzp0KHJbMF0sclsxXSxyWzJdKTticmVhaztkZWZhdWx0OnQuYXBwbHkobixyKX19KHQpfWZpbmFsbHl7cChlKSx1PSExfX19fX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGY/dm9pZCAwPT09ZT90aGlzOmU6c2VsZil9KS5jYWxsKHRoaXMsbigxKSxuKDYpKX0sZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGEoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gcyhlKXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gbihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gbi5jYWxsKHRoaXMsZSwwKX19fSFmdW5jdGlvbigpe3RyeXtuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKGUpe249b310cnl7cj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmF9Y2F0Y2goZSl7cj1hfX0oKTt2YXIgYyxsPVtdLHU9ITEsZj0tMTtmdW5jdGlvbiBkKCl7dSYmYyYmKHU9ITEsYy5sZW5ndGg/bD1jLmNvbmNhdChsKTpmPS0xLGwubGVuZ3RoJiZwKCkpfWZ1bmN0aW9uIHAoKXtpZighdSl7dmFyIGU9cyhkKTt1PSEwO2Zvcih2YXIgdD1sLmxlbmd0aDt0Oyl7Zm9yKGM9bCxsPVtdOysrZjx0OyljJiZjW2ZdLnJ1bigpO2Y9LTEsdD1sLmxlbmd0aH1jPW51bGwsdT0hMSxmdW5jdGlvbihlKXtpZihyPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKHI9PT1hfHwhcikmJmNsZWFyVGltZW91dClyZXR1cm4gcj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtyKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIHIuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiB2KGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gaCgpe31pLm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07bC5wdXNoKG5ldyB2KGUsdCkpLDEhPT1sLmxlbmd0aHx8dXx8cyhwKX0sdi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0saS50aXRsZT1cImJyb3dzZXJcIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj1cIlwiLGkudmVyc2lvbnM9e30saS5vbj1oLGkuYWRkTGlzdGVuZXI9aCxpLm9uY2U9aCxpLm9mZj1oLGkucmVtb3ZlTGlzdGVuZXI9aCxpLnJlbW92ZUFsbExpc3RlbmVycz1oLGkuZW1pdD1oLGkucHJlcGVuZExpc3RlbmVyPWgsaS5wcmVwZW5kT25jZUxpc3RlbmVyPWgsaS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LGkuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0saS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0saS5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGkudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtuLnIodCk7dmFyIHI9bigwKSxpPW4ubihyKTsvXjJcXC4vLnRlc3QoaS5hLnZlcnNpb24pfHxpLmEudXRpbC53YXJuKFwiVnVlQ2xpY2thd2F5IDIuMi4yIG9ubHkgc3VwcG9ydHMgVnVlIDIueCwgYW5kIGRvZXMgbm90IHN1cHBvcnQgVnVlIFwiK2kuYS52ZXJzaW9uKTt2YXIgbz1cIl92dWVfY2xpY2thd2F5X2hhbmRsZXJcIjtmdW5jdGlvbiBhKGUsdCxuKXtzKGUpO3ZhciByPW4uY29udGV4dCxpPXQudmFsdWU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaSl7dmFyIGE9ITE7c2V0VGltZW91dChmdW5jdGlvbigpe2E9ITB9LDApLGVbb109ZnVuY3Rpb24odCl7dmFyIG49dC5wYXRofHwodC5jb21wb3NlZFBhdGg/dC5jb21wb3NlZFBhdGgoKTp2b2lkIDApO2lmKGEmJihuP24uaW5kZXhPZihlKTwwOiFlLmNvbnRhaW5zKHQudGFyZ2V0KSkpcmV0dXJuIGkuY2FsbChyLHQpfSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZVtvXSwhMSl9fWZ1bmN0aW9uIHMoZSl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGVbb10sITEpLGRlbGV0ZSBlW29dfXZhciBjPXtiaW5kOmEsdXBkYXRlOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSE9PXQub2xkVmFsdWUmJmEoZSx0KX0sdW5iaW5kOnN9O0FycmF5LmZyb218fChBcnJheS5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybltdLnNsaWNlLmNhbGwoZSl9KSxBcnJheS5pc0FycmF5fHwoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9KTt2YXIgbD1BcnJheS5mcm9tLHU9QXJyYXkuaXNBcnJheSxmPTI3LGQ9MzgscD00MCx2PWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJmUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl9LGg9ZnVuY3Rpb24oZSl7aWYoIXYoZSl8fCh0PWRvY3VtZW50LmJvZHksbj1lLCF0fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmNvbnRhaW5zfHwhdC5jb250YWlucyhuKSkpcmV0dXJuITE7dmFyIHQsbjtpZihcIm5vbmVcIj09PWUuc3R5bGUuZGlzcGxheSlyZXR1cm4hMTt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4gdihlKT9lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9KGUpO3JldHVybiBCb29sZWFuKHImJnIuaGVpZ2h0PjAmJnIud2lkdGg+MCl9LG09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCgodih0KT90OmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKGUpKX0seT1mdW5jdGlvbihlLHQsbil7dCYmdihlKSYmZS5zZXRBdHRyaWJ1dGUodCxuKX0sZz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30scj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e30saT1uW2VdfHxyW2VdO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGk/aSh0KTppfSxfPXtkaXJlY3RpdmVzOntvbkNsaWNrYXdheTpjfSxwcm9wczp7Y2xvc2VPbkNsaWNrOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xvc2VPblNjcm9sbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGxhenk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxpdGVtU2VsZWN0b3I6e3R5cGU6W1N0cmluZyxBcnJheV0sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltcIi52LWNvbnRleHQtaXRlbVwiLFwiLnYtY29udGV4dCA+IGxpID4gYVwiXX19LHJvbGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJtZW51XCJ9LHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInVsXCJ9fSxjb21wdXRlZDp7c3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93P3t0b3A6XCJcIi5jb25jYXQodGhpcy50b3AsXCJweFwiKSxsZWZ0OlwiXCIuY29uY2F0KHRoaXMubGVmdCxcInB4XCIpfTpudWxsfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0b3A6bnVsbCxsZWZ0Om51bGwsc2hvdzohMSxkYXRhOm51bGwsbG9jYWxJdGVtU2VsZWN0b3I6XCJcIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxvY2FsSXRlbVNlbGVjdG9yPXRoaXMubWFwSXRlbVNlbGVjdG9yKHRoaXMuaXRlbVNlbGVjdG9yKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY2xvc2VPblNjcm9sbCYmdGhpcy5yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVyKCl9LG1ldGhvZHM6e2FkZFNjcm9sbEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oKXt2YXIgZSx0LG47ZT13aW5kb3csdD1cInNjcm9sbFwiLG49dGhpcy5jbG9zZSxlJiZlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4pfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuc2hvdyYmKHRoaXMucmVzZXREYXRhKCksdGhpcy5jbG9zZU9uU2Nyb2xsJiZ0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXIoKSx0aGlzLiRlbWl0KFwiY2xvc2VcIikpfSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZpbmQoZnVuY3Rpb24odCxuKXtyZXR1cm4gbj09PWV9KTtuJiZuLmZvY3VzJiZuLmZvY3VzKCl9LGZvY3VzTmV4dDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5zaG93JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt2YXIgcj1uLmdldEl0ZW1zKCk7aWYoIShyLmxlbmd0aDwxKSl7dmFyIGk9ci5pbmRleE9mKGUudGFyZ2V0KTt0JiZpPjA/aS0tOiF0JiZpPHIubGVuZ3RoLTEmJmkrKyxpPDAmJihpPTApLG4uZm9jdXNJdGVtKGkscil9fSkpfSxnZXRJdGVtczpmdW5jdGlvbigpe3JldHVybihtKHRoaXMubG9jYWxJdGVtU2VsZWN0b3IsdGhpcy4kZWwpfHxbXSkuZmlsdGVyKGgpfSxtYXBJdGVtU2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSkmJihlPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVyblwiXCIuY29uY2F0KGUsXCI6bm90KC5kaXNhYmxlZCk6bm90KFtkaXNhYmxlZF0pXCIpfSkuam9pbihcIiwgXCIpKSxlfSxvbkNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpfSxvbktleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlDb2RlO3Q9PT1mP3RoaXMuY2xvc2UoKTp0PT09cD90aGlzLmZvY3VzTmV4dChlLCExKTp0PT09ZCYmdGhpcy5mb2N1c05leHQoZSwhMCl9LG9wZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuZGF0YT10LHRoaXMuc2hvdz0hMCx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe24ucG9zaXRpb25NZW51KGUuY2xpZW50WSxlLmNsaWVudFgpLG4uJGVsLmZvY3VzKCksbi5zZXRJdGVtUm9sZXMoKSxuLmNsb3NlT25TY3JvbGwmJm4uYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcigpLG4uJGVtaXQoXCJvcGVuXCIsZSxuLmRhdGEsbi50b3Asbi5sZWZ0KX0pfSxwb3NpdGlvbk1lbnU6ZnVuY3Rpb24oZSx0KXt2YXIgbj13aW5kb3cuaW5uZXJIZWlnaHQtdGhpcy4kZWwub2Zmc2V0SGVpZ2h0LTI1LHI9d2luZG93LmlubmVyV2lkdGgtdGhpcy4kZWwub2Zmc2V0V2lkdGgtMjU7ZT5uJiYoZT1uKSx0PnImJih0PXIpLHRoaXMudG9wPWUsdGhpcy5sZWZ0PXR9LHJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oKXt2YXIgZSx0LG47ZT13aW5kb3csdD1cInNjcm9sbFwiLG49dGhpcy5jbG9zZSxlJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxyZXNldERhdGE6ZnVuY3Rpb24oKXt0aGlzLnRvcD1udWxsLHRoaXMubGVmdD1udWxsLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvdz0hMX0sc2V0SXRlbVJvbGVzOmZ1bmN0aW9uKCl7bSh0aGlzLmxvY2FsSXRlbVNlbGVjdG9yLHRoaXMuJGVsKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3koZSxcInJvbGVcIixcIm1lbnVpdGVtXCIpLHkoZSxcInRhYmluZGV4XCIsXCItMVwiKX0pfX0sd2F0Y2g6e2Nsb3NlT25TY3JvbGw6ZnVuY3Rpb24oZSx0KXtlIT09dCYmKGUmJnRoaXMuc2hvdz90aGlzLmFkZFNjcm9sbEV2ZW50TGlzdGVuZXIoKTp0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXIoKSl9LGl0ZW1TZWxlY3RvcjpmdW5jdGlvbihlLHQpe2UhPT10JiYodGhpcy5sb2NhbEl0ZW1TZWxlY3Rvcj10aGlzLm1hcEl0ZW1TZWxlY3RvcihlKSl9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5sYXp5JiYhdGhpcy5zaG93KXJldHVybiBlKCExKTt2YXIgdD17XCIhY29udGV4dG1lbnVcIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LGtleWRvd246dGhpcy5vbktleWRvd259O3RoaXMuY2xvc2VPbkNsaWNrJiYodC5jbGljaz10aGlzLm9uQ2xpY2spO3ZhciBuPVt7bmFtZTpcIm9uLWNsaWNrYXdheVwiLHZhbHVlOnRoaXMuY2xvc2UscmF3TmFtZTpcInYtb24tY2xpY2thd2F5XCJ9XTtyZXR1cm4gdGhpcy5sYXp5fHxuLnB1c2goe25hbWU6XCJzaG93XCIsdmFsdWU6dGhpcy5zaG93LHJhd05hbWU6XCJ2LXNob3dcIixleHByZXNzaW9uOlwic2hvd1wifSksZSh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJ2LWNvbnRleHRcIixzdHlsZTp0aGlzLnN0eWxlLGF0dHJzOnt0YWJpbmRleDpcIi0xXCIscm9sZTp0aGlzLnJvbGUsXCJhcmlhLWhpZGRlblwiOnRoaXMubGF6eT9udWxsOlN0cmluZyghdGhpcy5zaG93KX0sb246dCxkaXJlY3RpdmVzOm59LFtnKFwiZGVmYXVsdFwiLHtkYXRhOnRoaXMuZGF0YX0sdGhpcy4kc2NvcGVkU2xvdHMsdGhpcy4kc2xvdHMpXSl9fTtuLmQodCxcIlZ1ZUNvbnRleHRcIixmdW5jdGlvbigpe3JldHVybiBffSl9XSl9KTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./dist/js/vue-context.js\n");
/***/ }),
/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
!*** ./node_modules/process/browser.js ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2YyOGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n");
/***/ }),
/***/ "./node_modules/setimmediate/setImmediate.js":
/*!***************************************************!*\
!*** ./node_modules/setimmediate/setImmediate.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 68\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcz82MDE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/setimmediate/setImmediate.js\n");
/***/ }),
/***/ "./node_modules/timers-browserify/main.js":
/*!************************************************!*\
!*** ./node_modules/timers-browserify/main.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(/*! setimmediate */ \"./node_modules/setimmediate/setImmediate.js\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcz81MTE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLGlFQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/timers-browserify/main.js\n");
/***/ }),
/***/ "./node_modules/vue/dist/vue.common.dev.js":
/*!*************************************************!*\
!*** ./node_modules/vue/dist/vue.common.dev.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n\n\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys (modules) {\n return modules.reduce(function (keys, m) {\n return keys.concat(m.staticKeys || [])\n }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"development\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"development\" !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\n{\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (!config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (isUndef(target) || isPrimitive(target)\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (isUndef(target) || isPrimitive(target)\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\n{\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && \"development\" !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Techinically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\nvar mark;\nvar measure;\n\n{\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\n{\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n {\n defineReactive$$1(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n }\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject)\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // #6574 in case the inject object is observed...\n if (key === '__ob__') { continue }\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n if (!children || !children.length) {\n return {}\n }\n var slots = {};\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n (slots.default || (slots.default = [])).push(child);\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/* */\n\nfunction normalizeScopedSlots (\n slots,\n normalSlots,\n prevSlots\n) {\n var res;\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\n var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n var key = slots && slots.$key;\n if (!slots) {\n res = {};\n } else if (slots._normalized) {\n // fast path 1: child component re-render only, parent did not change\n return slots._normalized\n } else if (\n isStable &&\n prevSlots &&\n prevSlots !== emptyObject &&\n key === prevSlots.$key &&\n !hasNormalSlots &&\n !prevSlots.$hasNormal\n ) {\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\n // only need to normalize once\n return prevSlots\n } else {\n res = {};\n for (var key$1 in slots) {\n if (slots[key$1] && key$1[0] !== '$') {\n res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n }\n }\n }\n // expose normal slots on scopedSlots\n for (var key$2 in normalSlots) {\n if (!(key$2 in res)) {\n res[key$2] = proxyNormalSlot(normalSlots, key$2);\n }\n }\n // avoriaz seems to mock a non-extensible $scopedSlots object\n // and when that is passed down this would cause an error\n if (slots && Object.isExtensible(slots)) {\n (slots)._normalized = res;\n }\n def(res, '$stable', isStable);\n def(res, '$key', key);\n def(res, '$hasNormal', hasNormalSlots);\n return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n var normalized = function () {\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\n res = res && typeof res === 'object' && !Array.isArray(res)\n ? [res] // single vnode\n : normalizeChildren(res);\n return res && (\n res.length === 0 ||\n (res.length === 1 && res[0].isComment) // #9658\n ) ? undefined\n : res\n };\n // this is a slot using the new v-slot syntax without scope. although it is\n // compiled as a scoped slot, render fn users would expect it to be present\n // on this.$slots because the usage is semantically a normal slot.\n if (fn.proxy) {\n Object.defineProperty(normalSlots, key, {\n get: normalized,\n enumerable: true,\n configurable: true\n });\n }\n return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n return function () { return slots[key]; }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n if (hasSymbol && val[Symbol.iterator]) {\n ret = [];\n var iterator = val[Symbol.iterator]();\n var result = iterator.next();\n while (!result.done) {\n ret.push(render(result.value, ret.length));\n result = iterator.next();\n }\n } else {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n }\n if (!isDef(ret)) {\n ret = [];\n }\n (ret)._isVList = true;\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if (!isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || fallback;\n } else {\n nodes = this.$slots[name] || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n var camelizedKey = camelize(key);\n var hyphenatedKey = hyphenate(key);\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res,\n // the following are added in 2.6\n hasDynamicKeys,\n contentHashKey\n) {\n res = res || { $stable: !hasDynamicKeys };\n for (var i = 0; i < fns.length; i++) {\n var slot = fns[i];\n if (Array.isArray(slot)) {\n resolveScopedSlots(slot, res, hasDynamicKeys);\n } else if (slot) {\n // marker for reverse proxying v-slot without scope on this.$slots\n if (slot.proxy) {\n slot.fn.proxy = true;\n }\n res[slot.key] = slot.fn;\n }\n }\n if (contentHashKey) {\n (res).$key = contentHashKey;\n }\n return res\n}\n\n/* */\n\nfunction bindDynamicKeys (baseObj, values) {\n for (var i = 0; i < values.length; i += 2) {\n var key = values[i];\n if (typeof key === 'string' && key) {\n baseObj[values[i]] = values[i + 1];\n } else if (key !== '' && key !== null) {\n // null is a speical value for explicitly removing a binding\n warn(\n (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n this\n );\n }\n }\n return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n return typeof value === 'string' ? symbol + value : value\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n target._d = bindDynamicKeys;\n target._p = prependModifier;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var this$1 = this;\n\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () {\n if (!this$1.$slots) {\n normalizeScopedSlots(\n data.scopedSlots,\n this$1.$slots = resolveSlots(children, parent)\n );\n }\n return this$1.$slots\n };\n\n Object.defineProperty(this, 'scopedSlots', ({\n enumerable: true,\n get: function get () {\n return normalizeScopedSlots(data.scopedSlots, this.slots())\n }\n }));\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n {\n (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n }\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n/* */\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (vnode, hydrating) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent // activeInstance in lifecycle state\n) {\n var options = {\n _isComponent: true,\n _parentVnode: vnode,\n parent: parent\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var existing = hooks[key];\n var toMerge = componentVNodeHooks[key];\n if (existing !== toMerge && !(existing && existing._merged)) {\n hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n }\n }\n}\n\nfunction mergeHook$1 (f1, f2) {\n var merged = function (a, b) {\n // flow complains about extra args which is why we use any\n f1(a, b);\n f2(a, b);\n };\n merged._merged = true;\n return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input'\n ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n var existing = on[event];\n var callback = data.model.callback;\n if (isDef(existing)) {\n if (\n Array.isArray(existing)\n ? existing.indexOf(callback) === -1\n : existing !== callback\n ) {\n on[event] = [callback].concat(existing);\n }\n } else {\n on[event] = callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n {\n defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n }\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n if (_parentVnode) {\n vm.$scopedSlots = normalizeScopedSlots(\n _parentVnode.data.scopedSlots,\n vm.$slots,\n vm.$scopedSlots\n );\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n // There's no need to maintain a stack becaues all render fns are called\n // separately from one another. Nested component's render fns are called\n // when parent component is patched.\n currentRenderingInstance = vm;\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } finally {\n currentRenderingInstance = null;\n }\n // if the returned array contains only a single node, allow it\n if (Array.isArray(vnode) && vnode.length === 1) {\n vnode = vnode[0];\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n var owner = currentRenderingInstance;\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n // already pending\n factory.owners.push(owner);\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (owner && !isDef(factory.owners)) {\n var owners = factory.owners = [owner];\n var sync = true;\n var timerLoading = null;\n var timerTimeout = null\n\n ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n var forceRender = function (renderCompleted) {\n for (var i = 0, l = owners.length; i < l; i++) {\n (owners[i]).$forceUpdate();\n }\n\n if (renderCompleted) {\n owners.length = 0;\n if (timerLoading !== null) {\n clearTimeout(timerLoading);\n timerLoading = null;\n }\n if (timerTimeout !== null) {\n clearTimeout(timerTimeout);\n timerTimeout = null;\n }\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender(true);\n } else {\n owners.length = 0;\n }\n });\n\n var reject = once(function (reason) {\n warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender(true);\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (isPromise(res)) {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isPromise(res.component)) {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n timerLoading = setTimeout(function () {\n timerLoading = null;\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender(false);\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n timerTimeout = setTimeout(function () {\n timerTimeout = null;\n if (isUndef(factory.resolved)) {\n reject(\n \"timeout (\" + (res.timeout) + \"ms)\"\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn) {\n target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n var _target = target;\n return function onceHandler () {\n var res = fn.apply(null, arguments);\n if (res !== null) {\n _target.$off(event, onceHandler);\n }\n }\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n vm.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n vm.$off(event[i$1], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n // specific handler\n var cb;\n var i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n var info = \"event handler for \\\"\" + event + \"\\\"\";\n for (var i = 0, l = cbs.length; i < l; i++) {\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n }\n }\n return vm\n };\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n return function () {\n activeInstance = prevActiveInstance;\n }\n}\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var restoreActiveInstance = setActiveInstance(vm);\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n restoreActiveInstance();\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction mountComponent (\n vm,\n el,\n hydrating\n) {\n vm.$el = el;\n if (!vm.$options.render) {\n vm.$options.render = createEmptyVNode;\n {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n callHook(vm, 'beforeMount');\n\n var updateComponent;\n /* istanbul ignore if */\n if (config.performance && mark) {\n updateComponent = function () {\n var name = vm._name;\n var id = vm._uid;\n var startTag = \"vue-perf-start:\" + id;\n var endTag = \"vue-perf-end:\" + id;\n\n mark(startTag);\n var vnode = vm._render();\n mark(endTag);\n measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n mark(startTag);\n vm._update(vnode, hydrating);\n mark(endTag);\n measure((\"vue \" + name + \" patch\"), startTag, endTag);\n };\n } else {\n updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n }\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, {\n before: function before () {\n if (vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'beforeUpdate');\n }\n }\n }, true /* isRenderWatcher */);\n hydrating = false;\n\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook(vm, 'mounted');\n }\n return vm\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren.\n\n // check if there are dynamic scopedSlots (hand-written or compiled but with\n // dynamic slot names). Static scoped slots compiled from template has the\n // \"$stable\" marker.\n var newScopedSlots = parentVnode.data.scopedSlots;\n var oldScopedSlots = vm.$scopedSlots;\n var hasDynamicScopedSlot = !!(\n (newScopedSlots && !newScopedSlots.$stable) ||\n (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n );\n\n // Any static slot children from the parent may have changed during parent's\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\n // update is necessary to ensure correctness.\n var needsForceUpdate = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n hasDynamicScopedSlot\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (needsForceUpdate) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n var info = hook + \" hook\";\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n var performance = window.performance;\n if (\n performance &&\n typeof performance.now === 'function' &&\n getNow() > document.createEvent('Event').timeStamp\n ) {\n // if the event timestamp, although evaluated AFTER the Date.now(), is\n // smaller than it, it means the event is using a hi-res timestamp,\n // and we need to use the hi-res version for event listener timestamps as\n // well.\n getNow = function () { return performance.now(); };\n }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n currentFlushTimestamp = getNow();\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n if (watcher.before) {\n watcher.before();\n }\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n\n if (!config.async) {\n flushSchedulerQueue();\n return\n }\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n this.before = options.before;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$2; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = expOrFn.toString();\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = noop;\n warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive$$1(props, key, value, function () {\n if (!isRoot && !isUpdatingChildComponent) {\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if (getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : createGetterInvoker(userDef);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : createGetterInvoker(userDef.get)\n : noop;\n sharedPropertyDefinition.set = userDef.set || noop;\n }\n if (sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction createGetterInvoker(fn) {\n return function computedGetter () {\n return fn.call(this, this)\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n {\n if (typeof methods[key] !== 'function') {\n warn(\n \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n {\n dataDef.set = function () {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n try {\n cb.call(vm, watcher.value);\n } catch (error) {\n handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n }\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if (config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n {\n initProxy(vm);\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook(vm, 'created');\n\n /* istanbul ignore if */\n if (config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = latest[key];\n }\n }\n return modified\n}\n\nfunction Vue (options) {\n if (!(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if (name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if (type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\n\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n for (var key in this.cache) {\n pruneCacheEntry(this.cache, key, this.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n};\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive$$1\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n // 2.6 explicit observable API\n Vue.observable = function (obj) {\n observe(obj);\n return obj\n };\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/* */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n return (\n (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n (attr === 'selected' && tag === 'option') ||\n (attr === 'checked' && tag === 'input') ||\n (attr === 'muted' && tag === 'video')\n )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n return isFalsyAttrValue(value) || value === 'false'\n ? 'false'\n // allow arbitrary string value for contenteditable\n : key === 'contenteditable' && isValidContentEditableValue(value)\n ? value\n : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n 'required,reversed,scoped,seamless,selected,sortable,translate,' +\n 'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n return val == null || val === false\n};\n\n/* */\n\nfunction genClassForVnode (vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode && parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class)\n ? [child.class, parent.class]\n : parent.class\n }\n}\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n 'html,body,base,head,link,meta,style,title,' +\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n 'output,progress,select,textarea,' +\n 'details,dialog,menu,menuitem,summary,' +\n 'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n if (isSVG(tag)) {\n return 'svg'\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math'\n }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true\n }\n if (isReservedTag(tag)) {\n return false\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag]\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // http://stackoverflow.com/a/28210364/1070244\n return (unknownElementCache[tag] = (\n el.constructor === window.HTMLUnknownElement ||\n el.constructor === window.HTMLElement\n ))\n } else {\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/* */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n warn(\n 'Cannot find element: ' + el\n );\n return document.createElement('div')\n }\n return selected\n } else {\n return el\n }\n}\n\n/* */\n\nfunction createElement$1 (tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n node.appendChild(child);\n}\n\nfunction parentNode (node) {\n return node.parentNode\n}\n\nfunction nextSibling (node) {\n return node.nextSibling\n}\n\nfunction tagName (node) {\n return node.tagName\n}\n\nfunction setTextContent (node, text) {\n node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n createElement: createElement$1,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n setStyleScope: setStyleScope\n});\n\n/* */\n\nvar ref = {\n create: function create (_, vnode) {\n registerRef(vnode);\n },\n update: function update (oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy (vnode) {\n registerRef(vnode, true);\n }\n};\n\nfunction registerRef (vnode, isRemoval) {\n var key = vnode.data.ref;\n if (!isDef(key)) { return }\n\n var vm = vnode.context;\n var ref = vnode.componentInstance || vnode.elm;\n var refs = vm.$refs;\n if (isRemoval) {\n if (Array.isArray(refs[key])) {\n remove(refs[key], ref);\n } else if (refs[key] === ref) {\n refs[key] = undefined;\n }\n } else {\n if (vnode.data.refInFor) {\n if (!Array.isArray(refs[key])) {\n refs[key] = [ref];\n } else if (refs[key].indexOf(ref) < 0) {\n // $flow-disable-line\n refs[key].push(ref);\n }\n } else {\n refs[key] = ref;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n return (\n a.key === b.key && (\n (\n a.tag === b.tag &&\n a.isComment === b.isComment &&\n isDef(a.data) === isDef(b.data) &&\n sameInputType(a, b)\n ) || (\n isTrue(a.isAsyncPlaceholder) &&\n a.asyncFactory === b.asyncFactory &&\n isUndef(b.asyncFactory.error)\n )\n )\n )\n}\n\nfunction sameInputType (a, b) {\n if (a.tag !== 'input') { return true }\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) { map[key] = i; }\n }\n return map\n}\n\nfunction createPatchFunction (backend) {\n var i, j;\n var cbs = {};\n\n var modules = backend.modules;\n var nodeOps = backend.nodeOps;\n\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n\n function emptyNodeAt (elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n }\n\n function createRmCb (childElm, listeners) {\n function remove$$1 () {\n if (--remove$$1.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove$$1.listeners = listeners;\n return remove$$1\n }\n\n function removeNode (el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n\n function isUnknownElement$$1 (vnode, inVPre) {\n return (\n !inVPre &&\n !vnode.ns &&\n !(\n config.ignoredElements.length &&\n config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore)\n ? ignore.test(vnode.tag)\n : ignore === vnode.tag\n })\n ) &&\n config.isUnknownElement(vnode.tag)\n )\n }\n\n var creatingElmInVPre = 0;\n\n function createElm (\n vnode,\n insertedVnodeQueue,\n parentElm,\n refElm,\n nested,\n ownerArray,\n index\n ) {\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // This vnode was used in a previous render!\n // now it's used as a new node, overwriting its elm would cause\n // potential patch errors down the road when it's used as an insertion\n // reference node. Instead, we clone the node on-demand before creating\n // associated DOM element for it.\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return\n }\n\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n {\n if (data && data.pre) {\n creatingElmInVPre++;\n }\n if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n warn(\n 'Unknown custom element: <' + tag + '> - did you ' +\n 'register the component correctly? For recursive components, ' +\n 'make sure to provide the \"name\" option.',\n vnode.context\n );\n }\n }\n\n vnode.elm = vnode.ns\n ? nodeOps.createElementNS(vnode.ns, tag)\n : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n\n /* istanbul ignore if */\n {\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n }\n\n if (data && data.pre) {\n creatingElmInVPre--;\n }\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n\n function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n insert(parentElm, vnode.elm, refElm);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true\n }\n }\n }\n\n function initComponent (vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n\n function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n\n function insert (parent, elm, ref$$1) {\n if (isDef(parent)) {\n if (isDef(ref$$1)) {\n if (nodeOps.parentNode(ref$$1) === parent) {\n nodeOps.insertBefore(parent, elm, ref$$1);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n\n function createChildren (vnode, children, insertedVnodeQueue) {\n if (Array.isArray(children)) {\n {\n checkDuplicateKeys(children);\n }\n for (var i = 0; i < children.length; ++i) {\n createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n }\n }\n\n function isPatchable (vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag)\n }\n\n function invokeCreateHooks (vnode, insertedVnodeQueue) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) { i.create(emptyNode, vnode); }\n if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n }\n }\n\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope (vnode) {\n var i;\n if (isDef(i = vnode.fnScopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) &&\n i !== vnode.context &&\n i !== vnode.fnContext &&\n isDef(i = i.$options._scopeId)\n ) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n }\n\n function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n }\n }\n\n function invokeDestroyHook (vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n\n function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else { // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n\n function removeAndInvokeRemoveHook (vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n removeAndInvokeRemoveHook(i, rm);\n }\n for (i = 0; i < cbs.remove.length; ++i) {\n cbs.remove[i](vnode, rm);\n }\n if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n i(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n\n function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n\n {\n checkDuplicateKeys(newCh);\n }\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n idxInOld = isDef(newStartVnode.key)\n ? oldKeyToIdx[newStartVnode.key]\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) { // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n } else {\n vnodeToMove = oldCh[idxInOld];\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n\n function checkDuplicateKeys (children) {\n var seenKeys = {};\n for (var i = 0; i < children.length; i++) {\n var vnode = children[i];\n var key = vnode.key;\n if (isDef(key)) {\n if (seenKeys[key]) {\n warn(\n (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n vnode.context\n );\n } else {\n seenKeys[key] = true;\n }\n }\n }\n }\n\n function findIdxInOld (node, oldCh, start, end) {\n for (var i = start; i < end; i++) {\n var c = oldCh[i];\n if (isDef(c) && sameVnode(node, c)) { return i }\n }\n }\n\n function patchVnode (\n oldVnode,\n vnode,\n insertedVnodeQueue,\n ownerArray,\n index,\n removeOnly\n ) {\n if (oldVnode === vnode) {\n return\n }\n\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // clone reused vnode\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n var elm = vnode.elm = oldVnode.elm;\n\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return\n }\n\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) &&\n isTrue(oldVnode.isStatic) &&\n vnode.key === oldVnode.key &&\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n ) {\n vnode.componentInstance = oldVnode.componentInstance;\n return\n }\n\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n } else if (isDef(ch)) {\n {\n checkDuplicateKeys(ch);\n }\n if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n }\n }\n\n function invokeInsertHook (vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i = 0; i < queue.length; ++i) {\n queue[i].data.hook.insert(queue[i]);\n }\n }\n }\n\n var hydrationBailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n // Note: style is excluded because it relies on initial clone for future\n // deep updates (#7063).\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n var i;\n var tag = vnode.tag;\n var data = vnode.data;\n var children = vnode.children;\n inVPre = inVPre || (data && data.pre);\n vnode.elm = elm;\n\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.isAsyncPlaceholder = true;\n return true\n }\n // assert node match\n {\n if (!assertNodeMatch(elm, vnode, inVPre)) {\n return false\n }\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if (typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('server innerHTML: ', i);\n console.warn('client innerHTML: ', elm.innerHTML);\n }\n return false\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i$1 = 0; i$1 < children.length; i$1++) {\n if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n childrenMatch = false;\n break\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if (typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n }\n return false\n }\n }\n }\n }\n if (isDef(data)) {\n var fullInvoke = false;\n for (var key in data) {\n if (!isRenderedModule(key)) {\n fullInvoke = true;\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break\n }\n }\n if (!fullInvoke && data['class']) {\n // ensure collecting deps for deep class bindings for future updates\n traverse(data['class']);\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true\n }\n\n function assertNodeMatch (node, vnode, inVPre) {\n if (isDef(vnode.tag)) {\n return vnode.tag.indexOf('vue-component') === 0 || (\n !isUnknownElement$$1(vnode, inVPre) &&\n vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n )\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3)\n }\n }\n\n return function patch (oldVnode, vnode, hydrating, removeOnly) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n return\n }\n\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode\n } else {\n warn(\n 'The client-side rendered virtual DOM tree is not matching ' +\n 'server-rendered content. This is likely caused by incorrect ' +\n 'HTML markup, for example nesting block-level elements inside ' +\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm)) {\n removeVnodes(parentElm, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n dir.oldArg = oldDir.arg;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n];\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n ? 'true'\n : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, convertEnumeratedValue(key, value));\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n baseSetAttr(el, key, value);\n }\n}\n\nfunction baseSetAttr (el, key, value) {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // #7138: IE10 & 11 fires input event when setting placeholder on\n // <textarea>... block the first input event and remove the blocker\n // immediately.\n /* istanbul ignore if */\n if (\n isIE && !isIE9 &&\n el.tagName === 'TEXTAREA' &&\n key === 'placeholder' && value !== '' && !el.__ieph\n ) {\n var blocker = function (e) {\n e.stopImmediatePropagation();\n el.removeEventListener('input', blocker);\n };\n el.addEventListener('input', blocker);\n // $flow-disable-line\n el.__ieph = true; /* IE placeholder patched */\n }\n el.setAttribute(key, value);\n }\n}\n\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n};\n\n/* */\n\nfunction updateClass (oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (\n isUndef(data.staticClass) &&\n isUndef(data.class) && (\n isUndef(oldData) || (\n isUndef(oldData.staticClass) &&\n isUndef(oldData.class)\n )\n )\n ) {\n return\n }\n\n var cls = genClassForVnode(vnode);\n\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\n\nvar klass = {\n create: updateClass,\n update: updateClass\n};\n\n/* */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n var inSingle = false;\n var inDouble = false;\n var inTemplateString = false;\n var inRegex = false;\n var curly = 0;\n var square = 0;\n var paren = 0;\n var lastFilterIndex = 0;\n var c, prev, i, expression, filters;\n\n for (i = 0; i < exp.length; i++) {\n prev = c;\n c = exp.charCodeAt(i);\n if (inSingle) {\n if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n } else if (inDouble) {\n if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n } else if (inTemplateString) {\n if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n } else if (inRegex) {\n if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n } else if (\n c === 0x7C && // pipe\n exp.charCodeAt(i + 1) !== 0x7C &&\n exp.charCodeAt(i - 1) !== 0x7C &&\n !curly && !square && !paren\n ) {\n if (expression === undefined) {\n // first filter, end of expression\n lastFilterIndex = i + 1;\n expression = exp.slice(0, i).trim();\n } else {\n pushFilter();\n }\n } else {\n switch (c) {\n case 0x22: inDouble = true; break // \"\n case 0x27: inSingle = true; break // '\n case 0x60: inTemplateString = true; break // `\n case 0x28: paren++; break // (\n case 0x29: paren--; break // )\n case 0x5B: square++; break // [\n case 0x5D: square--; break // ]\n case 0x7B: curly++; break // {\n case 0x7D: curly--; break // }\n }\n if (c === 0x2f) { // /\n var j = i - 1;\n var p = (void 0);\n // find first non-whitespace prev char\n for (; j >= 0; j--) {\n p = exp.charAt(j);\n if (p !== ' ') { break }\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true;\n }\n }\n }\n }\n\n if (expression === undefined) {\n expression = exp.slice(0, i).trim();\n } else if (lastFilterIndex !== 0) {\n pushFilter();\n }\n\n function pushFilter () {\n (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n lastFilterIndex = i + 1;\n }\n\n if (filters) {\n for (i = 0; i < filters.length; i++) {\n expression = wrapFilter(expression, filters[i]);\n }\n }\n\n return expression\n}\n\nfunction wrapFilter (exp, filter) {\n var i = filter.indexOf('(');\n if (i < 0) {\n // _f: resolveFilter\n return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n } else {\n var name = filter.slice(0, i);\n var args = filter.slice(i + 1);\n return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n }\n}\n\n/* */\n\n\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn (msg, range) {\n console.error((\"[Vue compiler]: \" + msg));\n}\n/* eslint-enable no-unused-vars */\n\nfunction pluckModuleFunction (\n modules,\n key\n) {\n return modules\n ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n : []\n}\n\nfunction addProp (el, name, value, range, dynamic) {\n (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n el.plain = false;\n}\n\nfunction addAttr (el, name, value, range, dynamic) {\n var attrs = dynamic\n ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n : (el.attrs || (el.attrs = []));\n attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value, range) {\n el.attrsMap[name] = value;\n el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\n\nfunction addDirective (\n el,\n name,\n rawName,\n value,\n arg,\n isDynamicArg,\n modifiers,\n range\n) {\n (el.directives || (el.directives = [])).push(rangeSetItem({\n name: name,\n rawName: rawName,\n value: value,\n arg: arg,\n isDynamicArg: isDynamicArg,\n modifiers: modifiers\n }, range));\n el.plain = false;\n}\n\nfunction prependModifierMarker (symbol, name, dynamic) {\n return dynamic\n ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n : symbol + name // mark the event as captured\n}\n\nfunction addHandler (\n el,\n name,\n value,\n modifiers,\n important,\n warn,\n range,\n dynamic\n) {\n modifiers = modifiers || emptyObject;\n // warn prevent and passive modifier\n /* istanbul ignore if */\n if (\n warn &&\n modifiers.prevent && modifiers.passive\n ) {\n warn(\n 'passive and prevent can\\'t be used together. ' +\n 'Passive handler can\\'t prevent default event.',\n range\n );\n }\n\n // normalize click.right and click.middle since they don't actually fire\n // this is technically browser-specific, but at least for now browsers are\n // the only target envs that have right/middle clicks.\n if (modifiers.right) {\n if (dynamic) {\n name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n } else if (name === 'click') {\n name = 'contextmenu';\n delete modifiers.right;\n }\n } else if (modifiers.middle) {\n if (dynamic) {\n name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n } else if (name === 'click') {\n name = 'mouseup';\n }\n }\n\n // check capture modifier\n if (modifiers.capture) {\n delete modifiers.capture;\n name = prependModifierMarker('!', name, dynamic);\n }\n if (modifiers.once) {\n delete modifiers.once;\n name = prependModifierMarker('~', name, dynamic);\n }\n /* istanbul ignore if */\n if (modifiers.passive) {\n delete modifiers.passive;\n name = prependModifierMarker('&', name, dynamic);\n }\n\n var events;\n if (modifiers.native) {\n delete modifiers.native;\n events = el.nativeEvents || (el.nativeEvents = {});\n } else {\n events = el.events || (el.events = {});\n }\n\n var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n if (modifiers !== emptyObject) {\n newHandler.modifiers = modifiers;\n }\n\n var handlers = events[name];\n /* istanbul ignore if */\n if (Array.isArray(handlers)) {\n important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n } else if (handlers) {\n events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n } else {\n events[name] = newHandler;\n }\n\n el.plain = false;\n}\n\nfunction getRawBindingAttr (\n el,\n name\n) {\n return el.rawAttrsMap[':' + name] ||\n el.rawAttrsMap['v-bind:' + name] ||\n el.rawAttrsMap[name]\n}\n\nfunction getBindingAttr (\n el,\n name,\n getStatic\n) {\n var dynamicValue =\n getAndRemoveAttr(el, ':' + name) ||\n getAndRemoveAttr(el, 'v-bind:' + name);\n if (dynamicValue != null) {\n return parseFilters(dynamicValue)\n } else if (getStatic !== false) {\n var staticValue = getAndRemoveAttr(el, name);\n if (staticValue != null) {\n return JSON.stringify(staticValue)\n }\n }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n el,\n name,\n removeFromMap\n) {\n var val;\n if ((val = el.attrsMap[name]) != null) {\n var list = el.attrsList;\n for (var i = 0, l = list.length; i < l; i++) {\n if (list[i].name === name) {\n list.splice(i, 1);\n break\n }\n }\n }\n if (removeFromMap) {\n delete el.attrsMap[name];\n }\n return val\n}\n\nfunction getAndRemoveAttrByRegex (\n el,\n name\n) {\n var list = el.attrsList;\n for (var i = 0, l = list.length; i < l; i++) {\n var attr = list[i];\n if (name.test(attr.name)) {\n list.splice(i, 1);\n return attr\n }\n }\n}\n\nfunction rangeSetItem (\n item,\n range\n) {\n if (range) {\n if (range.start != null) {\n item.start = range.start;\n }\n if (range.end != null) {\n item.end = range.end;\n }\n }\n return item\n}\n\n/* */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n el,\n value,\n modifiers\n) {\n var ref = modifiers || {};\n var number = ref.number;\n var trim = ref.trim;\n\n var baseValueExpression = '$$v';\n var valueExpression = baseValueExpression;\n if (trim) {\n valueExpression =\n \"(typeof \" + baseValueExpression + \" === 'string'\" +\n \"? \" + baseValueExpression + \".trim()\" +\n \": \" + baseValueExpression + \")\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n var assignment = genAssignmentCode(value, valueExpression);\n\n el.model = {\n value: (\"(\" + value + \")\"),\n expression: JSON.stringify(value),\n callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n value,\n assignment\n) {\n var res = parseModel(value);\n if (res.key === null) {\n return (value + \"=\" + assignment)\n } else {\n return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len, str, chr, index$1, expressionPos, expressionEndPos;\n\n\n\nfunction parseModel (val) {\n // Fix https://github.com/vuejs/vue/pull/7730\n // allow v-model=\"obj.val \" (trailing whitespace)\n val = val.trim();\n len = val.length;\n\n if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n index$1 = val.lastIndexOf('.');\n if (index$1 > -1) {\n return {\n exp: val.slice(0, index$1),\n key: '\"' + val.slice(index$1 + 1) + '\"'\n }\n } else {\n return {\n exp: val,\n key: null\n }\n }\n }\n\n str = val;\n index$1 = expressionPos = expressionEndPos = 0;\n\n while (!eof()) {\n chr = next();\n /* istanbul ignore if */\n if (isStringStart(chr)) {\n parseString(chr);\n } else if (chr === 0x5B) {\n parseBracket(chr);\n }\n }\n\n return {\n exp: val.slice(0, expressionPos),\n key: val.slice(expressionPos + 1, expressionEndPos)\n }\n}\n\nfunction next () {\n return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n var inBracket = 1;\n expressionPos = index$1;\n while (!eof()) {\n chr = next();\n if (isStringStart(chr)) {\n parseString(chr);\n continue\n }\n if (chr === 0x5B) { inBracket++; }\n if (chr === 0x5D) { inBracket--; }\n if (inBracket === 0) {\n expressionEndPos = index$1;\n break\n }\n }\n}\n\nfunction parseString (chr) {\n var stringQuote = chr;\n while (!eof()) {\n chr = next();\n if (chr === stringQuote) {\n break\n }\n }\n}\n\n/* */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n el,\n dir,\n _warn\n) {\n warn$1 = _warn;\n var value = dir.value;\n var modifiers = dir.modifiers;\n var tag = el.tag;\n var type = el.attrsMap.type;\n\n {\n // inputs with type=\"file\" are read only and setting the input's\n // value will throw an error.\n if (tag === 'input' && type === 'file') {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n \"File inputs are read only. Use a v-on:change listener instead.\",\n el.rawAttrsMap['v-model']\n );\n }\n }\n\n if (el.component) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else if (tag === 'select') {\n genSelect(el, value, modifiers);\n } else if (tag === 'input' && type === 'checkbox') {\n genCheckboxModel(el, value, modifiers);\n } else if (tag === 'input' && type === 'radio') {\n genRadioModel(el, value, modifiers);\n } else if (tag === 'input' || tag === 'textarea') {\n genDefaultModel(el, value, modifiers);\n } else if (!config.isReservedTag(tag)) {\n genComponentModel(el, value, modifiers);\n // component v-model doesn't need extra runtime\n return false\n } else {\n warn$1(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"v-model is not supported on this element type. \" +\n 'If you are working with contenteditable, it\\'s recommended to ' +\n 'wrap a library dedicated for that purpose inside a custom component.',\n el.rawAttrsMap['v-model']\n );\n }\n\n // ensure runtime directive metadata\n return true\n}\n\nfunction genCheckboxModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n addProp(el, 'checked',\n \"Array.isArray(\" + value + \")\" +\n \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n trueValueBinding === 'true'\n ? (\":(\" + value + \")\")\n : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n )\n );\n addHandler(el, 'change',\n \"var $$a=\" + value + \",\" +\n '$$el=$event.target,' +\n \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n 'if(Array.isArray($$a)){' +\n \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n '$$i=_i($$a,$$v);' +\n \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n null, true\n );\n}\n\nfunction genRadioModel (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var valueBinding = getBindingAttr(el, 'value') || 'null';\n valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n el,\n value,\n modifiers\n) {\n var number = modifiers && modifiers.number;\n var selectedVal = \"Array.prototype.filter\" +\n \".call($event.target.options,function(o){return o.selected})\" +\n \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n var code = \"var $$selectedVal = \" + selectedVal + \";\";\n code = code + \" \" + (genAssignmentCode(value, assignment));\n addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n el,\n value,\n modifiers\n) {\n var type = el.attrsMap.type;\n\n // warn if v-bind:value conflicts with v-model\n // except for inputs with v-bind:type\n {\n var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n if (value$1 && !typeBinding) {\n var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n warn$1(\n binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n 'because the latter already expands to a value binding internally',\n el.rawAttrsMap[binding]\n );\n }\n }\n\n var ref = modifiers || {};\n var lazy = ref.lazy;\n var number = ref.number;\n var trim = ref.trim;\n var needCompositionGuard = !lazy && type !== 'range';\n var event = lazy\n ? 'change'\n : type === 'range'\n ? RANGE_TOKEN\n : 'input';\n\n var valueExpression = '$event.target.value';\n if (trim) {\n valueExpression = \"$event.target.value.trim()\";\n }\n if (number) {\n valueExpression = \"_n(\" + valueExpression + \")\";\n }\n\n var code = genAssignmentCode(value, valueExpression);\n if (needCompositionGuard) {\n code = \"if($event.target.composing)return;\" + code;\n }\n\n addProp(el, 'value', (\"(\" + value + \")\"));\n addHandler(el, event, code, null, true);\n if (trim || number) {\n addHandler(el, 'blur', '$forceUpdate()');\n }\n}\n\n/* */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event = isIE ? 'change' : 'input';\n on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n var _target = target$1; // save current target element in closure\n return function onceHandler () {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove$2(event, onceHandler, capture, _target);\n }\n }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n name,\n handler,\n capture,\n passive\n) {\n // async edge case #6566: inner click event triggers patch, event handler\n // attached to outer element during patch, and triggered again. This\n // happens because browsers fire microtask ticks between event propagation.\n // the solution is simple: we save the timestamp when a handler is attached,\n // and the handler would only fire if the event passed to it was fired\n // AFTER it was attached.\n if (useMicrotaskFix) {\n var attachedTimestamp = currentFlushTimestamp;\n var original = handler;\n handler = original._wrapper = function (e) {\n if (\n // no bubbling, should always fire.\n // this is just a safety net in case event.timeStamp is unreliable in\n // certain weird environments...\n e.target === e.currentTarget ||\n // event is fired after handler attachment\n e.timeStamp >= attachedTimestamp ||\n // bail for environments that have buggy event.timeStamp implementations\n // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n // #9681 QtWebEngine event.timeStamp is negative value\n e.timeStamp <= 0 ||\n // #9448 bail if event is fired in another document in a multi-page\n // electron/nw.js app, since event.timeStamp will be using a different\n // starting reference\n e.target.ownerDocument !== document\n ) {\n return original.apply(this, arguments)\n }\n };\n }\n target$1.addEventListener(\n name,\n handler,\n supportsPassive\n ? { capture: capture, passive: passive }\n : capture\n );\n}\n\nfunction remove$2 (\n name,\n handler,\n capture,\n _target\n) {\n (_target || target$1).removeEventListener(\n name,\n handler._wrapper || handler,\n capture\n );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n target$1 = vnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n target$1 = undefined;\n}\n\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners\n};\n\n/* */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__)) {\n props = vnode.data.domProps = extend({}, props);\n }\n\n for (key in oldProps) {\n if (!(key in props)) {\n elm[key] = '';\n }\n }\n\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) { vnode.children.length = 0; }\n if (cur === oldProps[key]) { continue }\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n\n if (key === 'value' && elm.tagName !== 'PROGRESS') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n // IE doesn't support innerHTML for SVG elements\n svgContainer = svgContainer || document.createElement('div');\n svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n var svg = svgContainer.firstChild;\n while (elm.firstChild) {\n elm.removeChild(elm.firstChild);\n }\n while (svg.firstChild) {\n elm.appendChild(svg.firstChild);\n }\n } else if (\n // skip the update if old and new VDOM state is the same.\n // `value` is handled separately because the DOM value may be temporarily\n // out of sync with VDOM state due to focus, composition and modifiers.\n // This #4521 by skipping the unnecesarry `checked` update.\n cur !== oldProps[key]\n ) {\n // some property updates can throw\n // e.g. `value` on <progress> w/ non-finite value\n try {\n elm[key] = cur;\n } catch (e) {}\n }\n }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n return (!elm.composing && (\n elm.tagName === 'OPTION' ||\n isNotInFocusAndDirty(elm, checkVal) ||\n isDirtyWithModifiers(elm, checkVal)\n ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try { notInFocus = document.activeElement !== elm; } catch (e) {}\n return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers)) {\n if (modifiers.number) {\n return toNumber(value) !== toNumber(newVal)\n }\n if (modifiers.trim) {\n return value.trim() !== newVal.trim()\n }\n }\n return value !== newVal\n}\n\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n};\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle\n ? extend(data.staticStyle, style)\n : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n var res = {};\n var styleData;\n\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (\n childNode && childNode.data &&\n (styleData = normalizeStyleData(childNode.data))\n ) {\n extend(res, styleData);\n }\n }\n }\n\n if ((styleData = normalizeStyleData(vnode.data))) {\n extend(res, styleData);\n }\n\n var parentNode = vnode;\n while ((parentNode = parentNode.parent)) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res\n}\n\n/* */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && (prop in emptyStyle)) {\n return prop\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name = vendorNames[i] + capName;\n if (name in emptyStyle) {\n return name\n }\n }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n\n if (isUndef(data.staticStyle) && isUndef(data.style) &&\n isUndef(oldData.staticStyle) && isUndef(oldData.style)\n ) {\n return\n }\n\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n\n var style = normalizeStyleBinding(vnode.data.style) || {};\n\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__)\n ? extend({}, style)\n : style;\n\n var newStyle = getStyle(vnode, true);\n\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n if (cur !== oldStyle[name]) {\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n }\n}\n\nvar style = {\n create: updateStyle,\n update: updateStyle\n};\n\n/* */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\n\n/* */\n\nfunction resolveTransition (def$$1) {\n if (!def$$1) {\n return\n }\n /* istanbul ignore else */\n if (typeof def$$1 === 'object') {\n var res = {};\n if (def$$1.css !== false) {\n extend(res, autoCssTransition(def$$1.name || 'v'));\n }\n extend(res, def$$1);\n return res\n } else if (typeof def$$1 === 'string') {\n return autoCssTransition(def$$1)\n }\n}\n\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: (name + \"-enter\"),\n enterToClass: (name + \"-enter-to\"),\n enterActiveClass: (name + \"-enter-active\"),\n leaveClass: (name + \"-leave\"),\n leaveToClass: (name + \"-leave-to\"),\n leaveActiveClass: (name + \"-leave-active\")\n }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined &&\n window.onwebkittransitionend !== undefined\n ) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined &&\n window.onwebkitanimationend !== undefined\n ) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n ? window.requestAnimationFrame\n ? window.requestAnimationFrame.bind(window)\n : setTimeout\n : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n raf(function () {\n raf(fn);\n });\n}\n\nfunction addTransitionClass (el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\n\nfunction removeTransitionClass (el, cls) {\n if (el._transitionClasses) {\n remove(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n el,\n expectedType,\n cb\n) {\n var ref = getTransitionInfo(el, expectedType);\n var type = ref.type;\n var timeout = ref.timeout;\n var propCount = ref.propCount;\n if (!type) { return cb() }\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function () {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n var styles = window.getComputedStyle(el);\n // JSDOM may return undefined for transition properties\n var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n var hasTransform =\n type === TRANSITION &&\n transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n }\n}\n\nfunction getTimeout (delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/* */\n\nfunction enter (vnode, toggleDisplay) {\n var el = vnode.elm;\n\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return\n }\n\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var enterClass = data.enterClass;\n var enterToClass = data.enterToClass;\n var enterActiveClass = data.enterActiveClass;\n var appearClass = data.appearClass;\n var appearToClass = data.appearToClass;\n var appearActiveClass = data.appearActiveClass;\n var beforeEnter = data.beforeEnter;\n var enter = data.enter;\n var afterEnter = data.afterEnter;\n var enterCancelled = data.enterCancelled;\n var beforeAppear = data.beforeAppear;\n var appear = data.appear;\n var afterAppear = data.afterAppear;\n var appearCancelled = data.appearCancelled;\n var duration = data.duration;\n\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n context = transitionNode.context;\n transitionNode = transitionNode.parent;\n }\n\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n if (isAppear && !appear && appear !== '') {\n return\n }\n\n var startClass = isAppear && appearClass\n ? appearClass\n : enterClass;\n var activeClass = isAppear && appearActiveClass\n ? appearActiveClass\n : enterActiveClass;\n var toClass = isAppear && appearToClass\n ? appearToClass\n : enterToClass;\n\n var beforeEnterHook = isAppear\n ? (beforeAppear || beforeEnter)\n : beforeEnter;\n var enterHook = isAppear\n ? (typeof appear === 'function' ? appear : enter)\n : enter;\n var afterEnterHook = isAppear\n ? (afterAppear || afterEnter)\n : afterEnter;\n var enterCancelledHook = isAppear\n ? (appearCancelled || enterCancelled)\n : enterCancelled;\n\n var explicitEnterDuration = toNumber(\n isObject(duration)\n ? duration.enter\n : duration\n );\n\n if (explicitEnterDuration != null) {\n checkDuration(explicitEnterDuration, 'enter', vnode);\n }\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode, 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode &&\n pendingNode.tag === vnode.tag &&\n pendingNode.elm._leaveCb\n ) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n removeTransitionClass(el, startClass);\n if (!cb.cancelled) {\n addTransitionClass(el, toClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\n\nfunction leave (vnode, rm) {\n var el = vnode.elm;\n\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data) || el.nodeType !== 1) {\n return rm()\n }\n\n /* istanbul ignore if */\n if (isDef(el._leaveCb)) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var leaveClass = data.leaveClass;\n var leaveToClass = data.leaveToClass;\n var leaveActiveClass = data.leaveActiveClass;\n var beforeLeave = data.beforeLeave;\n var leave = data.leave;\n var afterLeave = data.afterLeave;\n var leaveCancelled = data.leaveCancelled;\n var delayLeave = data.delayLeave;\n var duration = data.duration;\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n\n var explicitLeaveDuration = toNumber(\n isObject(duration)\n ? duration.leave\n : duration\n );\n\n if (isDef(explicitLeaveDuration)) {\n checkDuration(explicitLeaveDuration, 'leave', vnode);\n }\n\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n\n function performLeave () {\n // the delayed leave may have already been cancelled\n if (cb.cancelled) {\n return\n }\n // record leaving element\n if (!vnode.data.show && el.parentNode) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n removeTransitionClass(el, leaveClass);\n if (!cb.cancelled) {\n addTransitionClass(el, leaveToClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\n \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n \"got \" + (JSON.stringify(val)) + \".\",\n vnode.context\n );\n } else if (isNaN(val)) {\n warn(\n \"<transition> explicit \" + name + \" duration is NaN - \" +\n 'the duration expression might be incorrect.',\n vnode.context\n );\n }\n}\n\nfunction isValidDuration (val) {\n return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n if (isUndef(fn)) {\n return false\n }\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(\n Array.isArray(invokerFns)\n ? invokerFns[0]\n : invokerFns\n )\n } else {\n return (fn._length || fn.length) > 1\n }\n}\n\nfunction _enter (_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\n\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove$$1 (vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {};\n\nvar platformModules = [\n attrs,\n klass,\n events,\n domProps,\n style,\n transition\n];\n\n/* */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\n\nvar directive = {\n inserted: function inserted (el, binding, vnode, oldVnode) {\n if (vnode.tag === 'select') {\n // #6903\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n directive.componentUpdated(el, binding, vnode);\n });\n } else {\n setSelected(el, binding, vnode.context);\n }\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n\n componentUpdated: function componentUpdated (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions = el._vOptions;\n var curOptions = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\n\nfunction setSelected (el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n warn(\n \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n vm\n );\n return\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\n\nfunction hasNoMatchingOption (value, options) {\n return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n return '_value' in option\n ? option._value\n : option.value\n}\n\nfunction onCompositionStart (e) {\n e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) { return }\n e.target.composing = false;\n trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n/* */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n ? locateNode(vnode.componentInstance._vnode)\n : vnode\n}\n\nvar show = {\n bind: function bind (el, ref, vnode) {\n var value = ref.value;\n\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay =\n el.style.display === 'none' ? '' : el.style.display;\n if (value && transition$$1) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n\n update: function update (el, ref, vnode) {\n var value = ref.value;\n var oldValue = ref.oldValue;\n\n /* istanbul ignore if */\n if (!value === !oldValue) { return }\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n if (transition$$1) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n\n unbind: function unbind (\n el,\n binding,\n vnode,\n oldVnode,\n isDestroy\n ) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n};\n\nvar platformDirectives = {\n model: directive,\n show: show\n};\n\n/* */\n\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children))\n } else {\n return vnode\n }\n}\n\nfunction extractTransitionData (comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key$1 in listeners) {\n data[camelize(key$1)] = listeners[key$1];\n }\n return data\n}\n\nfunction placeholder (h, rawChild) {\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n })\n }\n}\n\nfunction hasParentTransition (vnode) {\n while ((vnode = vnode.parent)) {\n if (vnode.data.transition) {\n return true\n }\n }\n}\n\nfunction isSameChild (child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n\n render: function render (h) {\n var this$1 = this;\n\n var children = this.$slots.default;\n if (!children) {\n return\n }\n\n // filter out text nodes (possible whitespaces)\n children = children.filter(isNotTextNode);\n /* istanbul ignore if */\n if (!children.length) {\n return\n }\n\n // warn multiple elements\n if (children.length > 1) {\n warn(\n '<transition> can only be used on a single element. Use ' +\n '<transition-group> for lists.',\n this.$parent\n );\n }\n\n var mode = this.mode;\n\n // warn invalid mode\n if (mode && mode !== 'in-out' && mode !== 'out-in'\n ) {\n warn(\n 'invalid <transition> mode: ' + mode,\n this.$parent\n );\n }\n\n var rawChild = children[0];\n\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild\n }\n\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild\n }\n\n if (this._leaving) {\n return placeholder(h, rawChild)\n }\n\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\" + (this._uid) + \"-\";\n child.key = child.key == null\n ? child.isComment\n ? id + 'comment'\n : id + child.tag\n : isPrimitive(child.key)\n ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n : child.key;\n\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n child.data.show = true;\n }\n\n if (\n oldChild &&\n oldChild.data &&\n !isSameChild(child, oldChild) &&\n !isAsyncPlaceholder(oldChild) &&\n // #6687 component root is a comment node\n !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n ) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n this$1._leaving = false;\n this$1.$forceUpdate();\n });\n return placeholder(h, rawChild)\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild\n }\n var delayedLeave;\n var performLeave = function () { delayedLeave(); };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n }\n }\n\n return rawChild\n }\n};\n\n/* */\n\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n props: props,\n\n beforeMount: function beforeMount () {\n var this$1 = this;\n\n var update = this._update;\n this._update = function (vnode, hydrating) {\n var restoreActiveInstance = setActiveInstance(this$1);\n // force removing pass\n this$1.__patch__(\n this$1._vnode,\n this$1.kept,\n false, // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n this$1._vnode = this$1.kept;\n restoreActiveInstance();\n update.call(this$1, vnode, hydrating);\n };\n },\n\n render: function render (h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c\n ;(c.data || (c.data = {})).transition = transitionData;\n } else {\n var opts = c.componentOptions;\n var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n }\n }\n }\n\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n var c$1 = prevChildren[i$1];\n c$1.data.transition = transitionData;\n c$1.data.pos = c$1.elm.getBoundingClientRect();\n if (map[c$1.key]) {\n kept.push(c$1);\n } else {\n removed.push(c$1);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n\n return h(tag, null, children)\n },\n\n updated: function updated () {\n var children = this.prevChildren;\n var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return\n }\n\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n\n children.forEach(function (c) {\n if (c.data.moved) {\n var el = c.elm;\n var s = el.style;\n addTransitionClass(el, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n if (e && e.target !== el) {\n return\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(transitionEndEvent, cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n }\n });\n },\n\n methods: {\n hasMove: function hasMove (el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return (this._hasMove = info.hasTransform)\n }\n }\n};\n\nfunction callPendingCbs (c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\n\nfunction recordPosition (c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n s.transitionDuration = '0s';\n }\n}\n\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n};\n\n/* */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n setTimeout(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue);\n } else {\n console[console.info ? 'info' : 'log'](\n 'Download the Vue Devtools extension for a better development experience:\\n' +\n 'https://github.com/vuejs/vue-devtools'\n );\n }\n }\n if (config.productionTip !== false &&\n typeof console !== 'undefined'\n ) {\n console[console.info ? 'info' : 'log'](\n \"You are running Vue in development mode.\\n\" +\n \"Make sure to turn on production mode when deploying for production.\\n\" +\n \"See more tips at https://vuejs.org/guide/deployment.html\"\n );\n }\n }, 0);\n}\n\n/* */\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n text,\n delimiters\n) {\n var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n if (!tagRE.test(text)) {\n return\n }\n var tokens = [];\n var rawTokens = [];\n var lastIndex = tagRE.lastIndex = 0;\n var match, index, tokenValue;\n while ((match = tagRE.exec(text))) {\n index = match.index;\n // push text token\n if (index > lastIndex) {\n rawTokens.push(tokenValue = text.slice(lastIndex, index));\n tokens.push(JSON.stringify(tokenValue));\n }\n // tag token\n var exp = parseFilters(match[1].trim());\n tokens.push((\"_s(\" + exp + \")\"));\n rawTokens.push({ '@binding': exp });\n lastIndex = index + match[0].length;\n }\n if (lastIndex < text.length) {\n rawTokens.push(tokenValue = text.slice(lastIndex));\n tokens.push(JSON.stringify(tokenValue));\n }\n return {\n expression: tokens.join('+'),\n tokens: rawTokens\n }\n}\n\n/* */\n\nfunction transformNode (el, options) {\n var warn = options.warn || baseWarn;\n var staticClass = getAndRemoveAttr(el, 'class');\n if (staticClass) {\n var res = parseText(staticClass, options.delimiters);\n if (res) {\n warn(\n \"class=\\\"\" + staticClass + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.',\n el.rawAttrsMap['class']\n );\n }\n }\n if (staticClass) {\n el.staticClass = JSON.stringify(staticClass);\n }\n var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n if (classBinding) {\n el.classBinding = classBinding;\n }\n}\n\nfunction genData (el) {\n var data = '';\n if (el.staticClass) {\n data += \"staticClass:\" + (el.staticClass) + \",\";\n }\n if (el.classBinding) {\n data += \"class:\" + (el.classBinding) + \",\";\n }\n return data\n}\n\nvar klass$1 = {\n staticKeys: ['staticClass'],\n transformNode: transformNode,\n genData: genData\n};\n\n/* */\n\nfunction transformNode$1 (el, options) {\n var warn = options.warn || baseWarn;\n var staticStyle = getAndRemoveAttr(el, 'style');\n if (staticStyle) {\n /* istanbul ignore if */\n {\n var res = parseText(staticStyle, options.delimiters);\n if (res) {\n warn(\n \"style=\\\"\" + staticStyle + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.',\n el.rawAttrsMap['style']\n );\n }\n }\n el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n }\n\n var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n if (styleBinding) {\n el.styleBinding = styleBinding;\n }\n}\n\nfunction genData$1 (el) {\n var data = '';\n if (el.staticStyle) {\n data += \"staticStyle:\" + (el.staticStyle) + \",\";\n }\n if (el.styleBinding) {\n data += \"style:(\" + (el.styleBinding) + \"),\";\n }\n return data\n}\n\nvar style$1 = {\n staticKeys: ['staticStyle'],\n transformNode: transformNode$1,\n genData: genData$1\n};\n\n/* */\n\nvar decoder;\n\nvar he = {\n decode: function decode (html) {\n decoder = decoder || document.createElement('div');\n decoder.innerHTML = html;\n return decoder.textContent\n }\n};\n\n/* */\n\nvar isUnaryTag = makeMap(\n 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n 'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n 'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being pased as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&amp;': '&',\n '&#10;': '\\n',\n '&#9;': '\\t',\n '&#39;': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n var stack = [];\n var expectHTML = options.expectHTML;\n var isUnaryTag$$1 = options.isUnaryTag || no;\n var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n var index = 0;\n var last, lastTag;\n while (html) {\n last = html;\n // Make sure we're not in a plaintext content element like script/style\n if (!lastTag || !isPlainTextElement(lastTag)) {\n var textEnd = html.indexOf('<');\n if (textEnd === 0) {\n // Comment:\n if (comment.test(html)) {\n var commentEnd = html.indexOf('-->');\n\n if (commentEnd >= 0) {\n if (options.shouldKeepComment) {\n options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n }\n advance(commentEnd + 3);\n continue\n }\n }\n\n // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n if (conditionalComment.test(html)) {\n var conditionalEnd = html.indexOf(']>');\n\n if (conditionalEnd >= 0) {\n advance(conditionalEnd + 2);\n continue\n }\n }\n\n // Doctype:\n var doctypeMatch = html.match(doctype);\n if (doctypeMatch) {\n advance(doctypeMatch[0].length);\n continue\n }\n\n // End tag:\n var endTagMatch = html.match(endTag);\n if (endTagMatch) {\n var curIndex = index;\n advance(endTagMatch[0].length);\n parseEndTag(endTagMatch[1], curIndex, index);\n continue\n }\n\n // Start tag:\n var startTagMatch = parseStartTag();\n if (startTagMatch) {\n handleStartTag(startTagMatch);\n if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n advance(1);\n }\n continue\n }\n }\n\n var text = (void 0), rest = (void 0), next = (void 0);\n if (textEnd >= 0) {\n rest = html.slice(textEnd);\n while (\n !endTag.test(rest) &&\n !startTagOpen.test(rest) &&\n !comment.test(rest) &&\n !conditionalComment.test(rest)\n ) {\n // < in plain text, be forgiving and treat it as text\n next = rest.indexOf('<', 1);\n if (next < 0) { break }\n textEnd += next;\n rest = html.slice(textEnd);\n }\n text = html.substring(0, textEnd);\n }\n\n if (textEnd < 0) {\n text = html;\n }\n\n if (text) {\n advance(text.length);\n }\n\n if (options.chars && text) {\n options.chars(text, index - text.length, index);\n }\n } else {\n var endTagLength = 0;\n var stackedTag = lastTag.toLowerCase();\n var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n endTagLength = endTag.length;\n if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n text = text\n .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n }\n if (shouldIgnoreFirstNewline(stackedTag, text)) {\n text = text.slice(1);\n }\n if (options.chars) {\n options.chars(text);\n }\n return ''\n });\n index += html.length - rest$1.length;\n html = rest$1;\n parseEndTag(stackedTag, index - endTagLength, index);\n }\n\n if (html === last) {\n options.chars && options.chars(html);\n if (!stack.length && options.warn) {\n options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n }\n break\n }\n }\n\n // Clean up any remaining tags\n parseEndTag();\n\n function advance (n) {\n index += n;\n html = html.substring(n);\n }\n\n function parseStartTag () {\n var start = html.match(startTagOpen);\n if (start) {\n var match = {\n tagName: start[1],\n attrs: [],\n start: index\n };\n advance(start[0].length);\n var end, attr;\n while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n attr.start = index;\n advance(attr[0].length);\n attr.end = index;\n match.attrs.push(attr);\n }\n if (end) {\n match.unarySlash = end[1];\n advance(end[0].length);\n match.end = index;\n return match\n }\n }\n }\n\n function handleStartTag (match) {\n var tagName = match.tagName;\n var unarySlash = match.unarySlash;\n\n if (expectHTML) {\n if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n parseEndTag(lastTag);\n }\n if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n parseEndTag(tagName);\n }\n }\n\n var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n var l = match.attrs.length;\n var attrs = new Array(l);\n for (var i = 0; i < l; i++) {\n var args = match.attrs[i];\n var value = args[3] || args[4] || args[5] || '';\n var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n ? options.shouldDecodeNewlinesForHref\n : options.shouldDecodeNewlines;\n attrs[i] = {\n name: args[1],\n value: decodeAttr(value, shouldDecodeNewlines)\n };\n if (options.outputSourceRange) {\n attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n attrs[i].end = args.end;\n }\n }\n\n if (!unary) {\n stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n lastTag = tagName;\n }\n\n if (options.start) {\n options.start(tagName, attrs, unary, match.start, match.end);\n }\n }\n\n function parseEndTag (tagName, start, end) {\n var pos, lowerCasedTagName;\n if (start == null) { start = index; }\n if (end == null) { end = index; }\n\n // Find the closest opened tag of the same type\n if (tagName) {\n lowerCasedTagName = tagName.toLowerCase();\n for (pos = stack.length - 1; pos >= 0; pos--) {\n if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n break\n }\n }\n } else {\n // If no tag name is provided, clean shop\n pos = 0;\n }\n\n if (pos >= 0) {\n // Close all the open elements, up the stack\n for (var i = stack.length - 1; i >= pos; i--) {\n if (i > pos || !tagName &&\n options.warn\n ) {\n options.warn(\n (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\"),\n { start: stack[i].start, end: stack[i].end }\n );\n }\n if (options.end) {\n options.end(stack[i].tag, start, end);\n }\n }\n\n // Remove the open elements from the stack\n stack.length = pos;\n lastTag = pos && stack[pos - 1].tag;\n } else if (lowerCasedTagName === 'br') {\n if (options.start) {\n options.start(tagName, [], true, start, end);\n }\n } else if (lowerCasedTagName === 'p') {\n if (options.start) {\n options.start(tagName, [], false, start, end);\n }\n if (options.end) {\n options.end(tagName, start, end);\n }\n }\n }\n}\n\n/* */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\n\nvar slotRE = /^v-slot(:|$)|^#/;\n\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE$1 = /\\s+/g;\n\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\n\nvar decodeHTMLCached = cached(he.decode);\n\nvar emptySlotScopeToken = \"_empty_\";\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\n\nfunction createASTElement (\n tag,\n attrs,\n parent\n) {\n return {\n type: 1,\n tag: tag,\n attrsList: attrs,\n attrsMap: makeAttrsMap(attrs),\n rawAttrsMap: {},\n parent: parent,\n children: []\n }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n template,\n options\n) {\n warn$2 = options.warn || baseWarn;\n\n platformIsPreTag = options.isPreTag || no;\n platformMustUseProp = options.mustUseProp || no;\n platformGetTagNamespace = options.getTagNamespace || no;\n var isReservedTag = options.isReservedTag || no;\n maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n\n transforms = pluckModuleFunction(options.modules, 'transformNode');\n preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n delimiters = options.delimiters;\n\n var stack = [];\n var preserveWhitespace = options.preserveWhitespace !== false;\n var whitespaceOption = options.whitespace;\n var root;\n var currentParent;\n var inVPre = false;\n var inPre = false;\n var warned = false;\n\n function warnOnce (msg, range) {\n if (!warned) {\n warned = true;\n warn$2(msg, range);\n }\n }\n\n function closeElement (element) {\n trimEndingWhitespace(element);\n if (!inVPre && !element.processed) {\n element = processElement(element, options);\n }\n // tree management\n if (!stack.length && element !== root) {\n // allow root elements with v-if, v-else-if and v-else\n if (root.if && (element.elseif || element.else)) {\n {\n checkRootConstraints(element);\n }\n addIfCondition(root, {\n exp: element.elseif,\n block: element\n });\n } else {\n warnOnce(\n \"Component template should contain exactly one root element. \" +\n \"If you are using v-if on multiple elements, \" +\n \"use v-else-if to chain them instead.\",\n { start: element.start }\n );\n }\n }\n if (currentParent && !element.forbidden) {\n if (element.elseif || element.else) {\n processIfConditions(element, currentParent);\n } else {\n if (element.slotScope) {\n // scoped slot\n // keep it in the children list so that v-else(-if) conditions can\n // find it as the prev node.\n var name = element.slotTarget || '\"default\"'\n ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n }\n currentParent.children.push(element);\n element.parent = currentParent;\n }\n }\n\n // final children cleanup\n // filter out scoped slots\n element.children = element.children.filter(function (c) { return !(c).slotScope; });\n // remove trailing whitespace node again\n trimEndingWhitespace(element);\n\n // check pre state\n if (element.pre) {\n inVPre = false;\n }\n if (platformIsPreTag(element.tag)) {\n inPre = false;\n }\n // apply post-transforms\n for (var i = 0; i < postTransforms.length; i++) {\n postTransforms[i](element, options);\n }\n }\n\n function trimEndingWhitespace (el) {\n // remove trailing whitespace node\n if (!inPre) {\n var lastNode;\n while (\n (lastNode = el.children[el.children.length - 1]) &&\n lastNode.type === 3 &&\n lastNode.text === ' '\n ) {\n el.children.pop();\n }\n }\n }\n\n function checkRootConstraints (el) {\n if (el.tag === 'slot' || el.tag === 'template') {\n warnOnce(\n \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n 'contain multiple nodes.',\n { start: el.start }\n );\n }\n if (el.attrsMap.hasOwnProperty('v-for')) {\n warnOnce(\n 'Cannot use v-for on stateful component root element because ' +\n 'it renders multiple elements.',\n el.rawAttrsMap['v-for']\n );\n }\n }\n\n parseHTML(template, {\n warn: warn$2,\n expectHTML: options.expectHTML,\n isUnaryTag: options.isUnaryTag,\n canBeLeftOpenTag: options.canBeLeftOpenTag,\n shouldDecodeNewlines: options.shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n shouldKeepComment: options.comments,\n outputSourceRange: options.outputSourceRange,\n start: function start (tag, attrs, unary, start$1, end) {\n // check namespace.\n // inherit parent ns if there is one\n var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n // handle IE svg bug\n /* istanbul ignore if */\n if (isIE && ns === 'svg') {\n attrs = guardIESVGBug(attrs);\n }\n\n var element = createASTElement(tag, attrs, currentParent);\n if (ns) {\n element.ns = ns;\n }\n\n {\n if (options.outputSourceRange) {\n element.start = start$1;\n element.end = end;\n element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n cumulated[attr.name] = attr;\n return cumulated\n }, {});\n }\n attrs.forEach(function (attr) {\n if (invalidAttributeRE.test(attr.name)) {\n warn$2(\n \"Invalid dynamic argument expression: attribute names cannot contain \" +\n \"spaces, quotes, <, >, / or =.\",\n {\n start: attr.start + attr.name.indexOf(\"[\"),\n end: attr.start + attr.name.length\n }\n );\n }\n });\n }\n\n if (isForbiddenTag(element) && !isServerRendering()) {\n element.forbidden = true;\n warn$2(\n 'Templates should only be responsible for mapping the state to the ' +\n 'UI. Avoid placing tags with side-effects in your templates, such as ' +\n \"<\" + tag + \">\" + ', as they will not be parsed.',\n { start: element.start }\n );\n }\n\n // apply pre-transforms\n for (var i = 0; i < preTransforms.length; i++) {\n element = preTransforms[i](element, options) || element;\n }\n\n if (!inVPre) {\n processPre(element);\n if (element.pre) {\n inVPre = true;\n }\n }\n if (platformIsPreTag(element.tag)) {\n inPre = true;\n }\n if (inVPre) {\n processRawAttrs(element);\n } else if (!element.processed) {\n // structural directives\n processFor(element);\n processIf(element);\n processOnce(element);\n }\n\n if (!root) {\n root = element;\n {\n checkRootConstraints(root);\n }\n }\n\n if (!unary) {\n currentParent = element;\n stack.push(element);\n } else {\n closeElement(element);\n }\n },\n\n end: function end (tag, start, end$1) {\n var element = stack[stack.length - 1];\n // pop stack\n stack.length -= 1;\n currentParent = stack[stack.length - 1];\n if (options.outputSourceRange) {\n element.end = end$1;\n }\n closeElement(element);\n },\n\n chars: function chars (text, start, end) {\n if (!currentParent) {\n {\n if (text === template) {\n warnOnce(\n 'Component template requires a root element, rather than just text.',\n { start: start }\n );\n } else if ((text = text.trim())) {\n warnOnce(\n (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n { start: start }\n );\n }\n }\n return\n }\n // IE textarea placeholder bug\n /* istanbul ignore if */\n if (isIE &&\n currentParent.tag === 'textarea' &&\n currentParent.attrsMap.placeholder === text\n ) {\n return\n }\n var children = currentParent.children;\n if (inPre || text.trim()) {\n text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n } else if (!children.length) {\n // remove the whitespace-only node right after an opening tag\n text = '';\n } else if (whitespaceOption) {\n if (whitespaceOption === 'condense') {\n // in condense mode, remove the whitespace node if it contains\n // line break, otherwise condense to a single space\n text = lineBreakRE.test(text) ? '' : ' ';\n } else {\n text = ' ';\n }\n } else {\n text = preserveWhitespace ? ' ' : '';\n }\n if (text) {\n if (!inPre && whitespaceOption === 'condense') {\n // condense consecutive whitespaces into single space\n text = text.replace(whitespaceRE$1, ' ');\n }\n var res;\n var child;\n if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n child = {\n type: 2,\n expression: res.expression,\n tokens: res.tokens,\n text: text\n };\n } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n child = {\n type: 3,\n text: text\n };\n }\n if (child) {\n if (options.outputSourceRange) {\n child.start = start;\n child.end = end;\n }\n children.push(child);\n }\n }\n },\n comment: function comment (text, start, end) {\n // adding anyting as a sibling to the root node is forbidden\n // comments should still be allowed, but ignored\n if (currentParent) {\n var child = {\n type: 3,\n text: text,\n isComment: true\n };\n if (options.outputSourceRange) {\n child.start = start;\n child.end = end;\n }\n currentParent.children.push(child);\n }\n }\n });\n return root\n}\n\nfunction processPre (el) {\n if (getAndRemoveAttr(el, 'v-pre') != null) {\n el.pre = true;\n }\n}\n\nfunction processRawAttrs (el) {\n var list = el.attrsList;\n var len = list.length;\n if (len) {\n var attrs = el.attrs = new Array(len);\n for (var i = 0; i < len; i++) {\n attrs[i] = {\n name: list[i].name,\n value: JSON.stringify(list[i].value)\n };\n if (list[i].start != null) {\n attrs[i].start = list[i].start;\n attrs[i].end = list[i].end;\n }\n }\n } else if (!el.pre) {\n // non root node in pre blocks with no attributes\n el.plain = true;\n }\n}\n\nfunction processElement (\n element,\n options\n) {\n processKey(element);\n\n // determine whether this is a plain element after\n // removing structural attributes\n element.plain = (\n !element.key &&\n !element.scopedSlots &&\n !element.attrsList.length\n );\n\n processRef(element);\n processSlotContent(element);\n processSlotOutlet(element);\n processComponent(element);\n for (var i = 0; i < transforms.length; i++) {\n element = transforms[i](element, options) || element;\n }\n processAttrs(element);\n return element\n}\n\nfunction processKey (el) {\n var exp = getBindingAttr(el, 'key');\n if (exp) {\n {\n if (el.tag === 'template') {\n warn$2(\n \"<template> cannot be keyed. Place the key on real elements instead.\",\n getRawBindingAttr(el, 'key')\n );\n }\n if (el.for) {\n var iterator = el.iterator2 || el.iterator1;\n var parent = el.parent;\n if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n warn$2(\n \"Do not use v-for index as key on <transition-group> children, \" +\n \"this is the same as not using keys.\",\n getRawBindingAttr(el, 'key'),\n true /* tip */\n );\n }\n }\n }\n el.key = exp;\n }\n}\n\nfunction processRef (el) {\n var ref = getBindingAttr(el, 'ref');\n if (ref) {\n el.ref = ref;\n el.refInFor = checkInFor(el);\n }\n}\n\nfunction processFor (el) {\n var exp;\n if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n var res = parseFor(exp);\n if (res) {\n extend(el, res);\n } else {\n warn$2(\n (\"Invalid v-for expression: \" + exp),\n el.rawAttrsMap['v-for']\n );\n }\n }\n}\n\n\n\nfunction parseFor (exp) {\n var inMatch = exp.match(forAliasRE);\n if (!inMatch) { return }\n var res = {};\n res.for = inMatch[2].trim();\n var alias = inMatch[1].trim().replace(stripParensRE, '');\n var iteratorMatch = alias.match(forIteratorRE);\n if (iteratorMatch) {\n res.alias = alias.replace(forIteratorRE, '').trim();\n res.iterator1 = iteratorMatch[1].trim();\n if (iteratorMatch[2]) {\n res.iterator2 = iteratorMatch[2].trim();\n }\n } else {\n res.alias = alias;\n }\n return res\n}\n\nfunction processIf (el) {\n var exp = getAndRemoveAttr(el, 'v-if');\n if (exp) {\n el.if = exp;\n addIfCondition(el, {\n exp: exp,\n block: el\n });\n } else {\n if (getAndRemoveAttr(el, 'v-else') != null) {\n el.else = true;\n }\n var elseif = getAndRemoveAttr(el, 'v-else-if');\n if (elseif) {\n el.elseif = elseif;\n }\n }\n}\n\nfunction processIfConditions (el, parent) {\n var prev = findPrevElement(parent.children);\n if (prev && prev.if) {\n addIfCondition(prev, {\n exp: el.elseif,\n block: el\n });\n } else {\n warn$2(\n \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n \"used on element <\" + (el.tag) + \"> without corresponding v-if.\",\n el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n );\n }\n}\n\nfunction findPrevElement (children) {\n var i = children.length;\n while (i--) {\n if (children[i].type === 1) {\n return children[i]\n } else {\n if (children[i].text !== ' ') {\n warn$2(\n \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n \"will be ignored.\",\n children[i]\n );\n }\n children.pop();\n }\n }\n}\n\nfunction addIfCondition (el, condition) {\n if (!el.ifConditions) {\n el.ifConditions = [];\n }\n el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n var once$$1 = getAndRemoveAttr(el, 'v-once');\n if (once$$1 != null) {\n el.once = true;\n }\n}\n\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent (el) {\n var slotScope;\n if (el.tag === 'template') {\n slotScope = getAndRemoveAttr(el, 'scope');\n /* istanbul ignore if */\n if (slotScope) {\n warn$2(\n \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n \"can also be used on plain elements in addition to <template> to \" +\n \"denote scoped slots.\",\n el.rawAttrsMap['scope'],\n true\n );\n }\n el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n /* istanbul ignore if */\n if (el.attrsMap['v-for']) {\n warn$2(\n \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n \"scoped slot to make it clearer.\",\n el.rawAttrsMap['slot-scope'],\n true\n );\n }\n el.slotScope = slotScope;\n }\n\n // slot=\"xxx\"\n var slotTarget = getBindingAttr(el, 'slot');\n if (slotTarget) {\n el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n // preserve slot as an attribute for native shadow DOM compat\n // only for non-scoped slots.\n if (el.tag !== 'template' && !el.slotScope) {\n addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n }\n }\n\n // 2.6 v-slot syntax\n {\n if (el.tag === 'template') {\n // v-slot on <template>\n var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n if (slotBinding) {\n {\n if (el.slotTarget || el.slotScope) {\n warn$2(\n \"Unexpected mixed usage of different slot syntaxes.\",\n el\n );\n }\n if (el.parent && !maybeComponent(el.parent)) {\n warn$2(\n \"<template v-slot> can only appear at the root level inside \" +\n \"the receiving the component\",\n el\n );\n }\n }\n var ref = getSlotName(slotBinding);\n var name = ref.name;\n var dynamic = ref.dynamic;\n el.slotTarget = name;\n el.slotTargetDynamic = dynamic;\n el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n }\n } else {\n // v-slot on component, denotes default slot\n var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n if (slotBinding$1) {\n {\n if (!maybeComponent(el)) {\n warn$2(\n \"v-slot can only be used on components or <template>.\",\n slotBinding$1\n );\n }\n if (el.slotScope || el.slotTarget) {\n warn$2(\n \"Unexpected mixed usage of different slot syntaxes.\",\n el\n );\n }\n if (el.scopedSlots) {\n warn$2(\n \"To avoid scope ambiguity, the default slot should also use \" +\n \"<template> syntax when there are other named slots.\",\n slotBinding$1\n );\n }\n }\n // add the component's children to its default slot\n var slots = el.scopedSlots || (el.scopedSlots = {});\n var ref$1 = getSlotName(slotBinding$1);\n var name$1 = ref$1.name;\n var dynamic$1 = ref$1.dynamic;\n var slotContainer = slots[name$1] = createASTElement('template', [], el);\n slotContainer.slotTarget = name$1;\n slotContainer.slotTargetDynamic = dynamic$1;\n slotContainer.children = el.children.filter(function (c) {\n if (!c.slotScope) {\n c.parent = slotContainer;\n return true\n }\n });\n slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n // remove children as they are returned from scopedSlots now\n el.children = [];\n // mark el non-plain so data gets generated\n el.plain = false;\n }\n }\n }\n}\n\nfunction getSlotName (binding) {\n var name = binding.name.replace(slotRE, '');\n if (!name) {\n if (binding.name[0] !== '#') {\n name = 'default';\n } else {\n warn$2(\n \"v-slot shorthand syntax requires a slot name.\",\n binding\n );\n }\n }\n return dynamicArgRE.test(name)\n // dynamic [name]\n ? { name: name.slice(1, -1), dynamic: true }\n // static name\n : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n}\n\n// handle <slot/> outlets\nfunction processSlotOutlet (el) {\n if (el.tag === 'slot') {\n el.slotName = getBindingAttr(el, 'name');\n if (el.key) {\n warn$2(\n \"`key` does not work on <slot> because slots are abstract outlets \" +\n \"and can possibly expand into multiple elements. \" +\n \"Use the key on a wrapping element instead.\",\n getRawBindingAttr(el, 'key')\n );\n }\n }\n}\n\nfunction processComponent (el) {\n var binding;\n if ((binding = getBindingAttr(el, 'is'))) {\n el.component = binding;\n }\n if (getAndRemoveAttr(el, 'inline-template') != null) {\n el.inlineTemplate = true;\n }\n}\n\nfunction processAttrs (el) {\n var list = el.attrsList;\n var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n for (i = 0, l = list.length; i < l; i++) {\n name = rawName = list[i].name;\n value = list[i].value;\n if (dirRE.test(name)) {\n // mark element as dynamic\n el.hasBindings = true;\n // modifiers\n modifiers = parseModifiers(name.replace(dirRE, ''));\n // support .foo shorthand syntax for the .prop modifier\n if (modifiers) {\n name = name.replace(modifierRE, '');\n }\n if (bindRE.test(name)) { // v-bind\n name = name.replace(bindRE, '');\n value = parseFilters(value);\n isDynamic = dynamicArgRE.test(name);\n if (isDynamic) {\n name = name.slice(1, -1);\n }\n if (\n value.trim().length === 0\n ) {\n warn$2(\n (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n );\n }\n if (modifiers) {\n if (modifiers.prop && !isDynamic) {\n name = camelize(name);\n if (name === 'innerHtml') { name = 'innerHTML'; }\n }\n if (modifiers.camel && !isDynamic) {\n name = camelize(name);\n }\n if (modifiers.sync) {\n syncGen = genAssignmentCode(value, \"$event\");\n if (!isDynamic) {\n addHandler(\n el,\n (\"update:\" + (camelize(name))),\n syncGen,\n null,\n false,\n warn$2,\n list[i]\n );\n if (hyphenate(name) !== camelize(name)) {\n addHandler(\n el,\n (\"update:\" + (hyphenate(name))),\n syncGen,\n null,\n false,\n warn$2,\n list[i]\n );\n }\n } else {\n // handler w/ dynamic event name\n addHandler(\n el,\n (\"\\\"update:\\\"+(\" + name + \")\"),\n syncGen,\n null,\n false,\n warn$2,\n list[i],\n true // dynamic\n );\n }\n }\n }\n if ((modifiers && modifiers.prop) || (\n !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n )) {\n addProp(el, name, value, list[i], isDynamic);\n } else {\n addAttr(el, name, value, list[i], isDynamic);\n }\n } else if (onRE.test(name)) { // v-on\n name = name.replace(onRE, '');\n isDynamic = dynamicArgRE.test(name);\n if (isDynamic) {\n name = name.slice(1, -1);\n }\n addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n } else { // normal directives\n name = name.replace(dirRE, '');\n // parse arg\n var argMatch = name.match(argRE);\n var arg = argMatch && argMatch[1];\n isDynamic = false;\n if (arg) {\n name = name.slice(0, -(arg.length + 1));\n if (dynamicArgRE.test(arg)) {\n arg = arg.slice(1, -1);\n isDynamic = true;\n }\n }\n addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n if (name === 'model') {\n checkForAliasModel(el, value);\n }\n }\n } else {\n // literal attribute\n {\n var res = parseText(value, delimiters);\n if (res) {\n warn$2(\n name + \"=\\\"\" + value + \"\\\": \" +\n 'Interpolation inside attributes has been removed. ' +\n 'Use v-bind or the colon shorthand instead. For example, ' +\n 'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.',\n list[i]\n );\n }\n }\n addAttr(el, name, JSON.stringify(value), list[i]);\n // #6887 firefox doesn't update muted state if set via attribute\n // even immediately after element creation\n if (!el.component &&\n name === 'muted' &&\n platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n addProp(el, name, 'true', list[i]);\n }\n }\n }\n}\n\nfunction checkInFor (el) {\n var parent = el;\n while (parent) {\n if (parent.for !== undefined) {\n return true\n }\n parent = parent.parent;\n }\n return false\n}\n\nfunction parseModifiers (name) {\n var match = name.match(modifierRE);\n if (match) {\n var ret = {};\n match.forEach(function (m) { ret[m.slice(1)] = true; });\n return ret\n }\n}\n\nfunction makeAttrsMap (attrs) {\n var map = {};\n for (var i = 0, l = attrs.length; i < l; i++) {\n if (\n map[attrs[i].name] && !isIE && !isEdge\n ) {\n warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n }\n map[attrs[i].name] = attrs[i].value;\n }\n return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n return (\n el.tag === 'style' ||\n (el.tag === 'script' && (\n !el.attrsMap.type ||\n el.attrsMap.type === 'text/javascript'\n ))\n )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n var res = [];\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n if (!ieNSBug.test(attr.name)) {\n attr.name = attr.name.replace(ieNSPrefix, '');\n res.push(attr);\n }\n }\n return res\n}\n\nfunction checkForAliasModel (el, value) {\n var _el = el;\n while (_el) {\n if (_el.for && _el.alias === value) {\n warn$2(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"You are binding v-model directly to a v-for iteration alias. \" +\n \"This will not be able to modify the v-for source array because \" +\n \"writing to the alias is like modifying a function local variable. \" +\n \"Consider using an array of objects and use v-model on an object property instead.\",\n el.rawAttrsMap['v-model']\n );\n }\n _el = _el.parent;\n }\n}\n\n/* */\n\nfunction preTransformNode (el, options) {\n if (el.tag === 'input') {\n var map = el.attrsMap;\n if (!map['v-model']) {\n return\n }\n\n var typeBinding;\n if (map[':type'] || map['v-bind:type']) {\n typeBinding = getBindingAttr(el, 'type');\n }\n if (!map.type && !typeBinding && map['v-bind']) {\n typeBinding = \"(\" + (map['v-bind']) + \").type\";\n }\n\n if (typeBinding) {\n var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n // 1. checkbox\n var branch0 = cloneASTElement(el);\n // process for on the main node\n processFor(branch0);\n addRawAttr(branch0, 'type', 'checkbox');\n processElement(branch0, options);\n branch0.processed = true; // prevent it from double-processed\n branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n addIfCondition(branch0, {\n exp: branch0.if,\n block: branch0\n });\n // 2. add radio else-if condition\n var branch1 = cloneASTElement(el);\n getAndRemoveAttr(branch1, 'v-for', true);\n addRawAttr(branch1, 'type', 'radio');\n processElement(branch1, options);\n addIfCondition(branch0, {\n exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n block: branch1\n });\n // 3. other\n var branch2 = cloneASTElement(el);\n getAndRemoveAttr(branch2, 'v-for', true);\n addRawAttr(branch2, ':type', typeBinding);\n processElement(branch2, options);\n addIfCondition(branch0, {\n exp: ifCondition,\n block: branch2\n });\n\n if (hasElse) {\n branch0.else = true;\n } else if (elseIfCondition) {\n branch0.elseif = elseIfCondition;\n }\n\n return branch0\n }\n }\n}\n\nfunction cloneASTElement (el) {\n return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$1 = {\n preTransformNode: preTransformNode\n};\n\nvar modules$1 = [\n klass$1,\n style$1,\n model$1\n];\n\n/* */\n\nfunction text (el, dir) {\n if (dir.value) {\n addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n }\n}\n\n/* */\n\nfunction html (el, dir) {\n if (dir.value) {\n addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n }\n}\n\nvar directives$1 = {\n model: model,\n text: text,\n html: html\n};\n\n/* */\n\nvar baseOptions = {\n expectHTML: true,\n modules: modules$1,\n directives: directives$1,\n isPreTag: isPreTag,\n isUnaryTag: isUnaryTag,\n mustUseProp: mustUseProp,\n canBeLeftOpenTag: canBeLeftOpenTag,\n isReservedTag: isReservedTag,\n getTagNamespace: getTagNamespace,\n staticKeys: genStaticKeys(modules$1)\n};\n\n/* */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n * create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n if (!root) { return }\n isStaticKey = genStaticKeysCached(options.staticKeys || '');\n isPlatformReservedTag = options.isReservedTag || no;\n // first pass: mark all non-static nodes.\n markStatic$1(root);\n // second pass: mark static roots.\n markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n return makeMap(\n 'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n (keys ? ',' + keys : '')\n )\n}\n\nfunction markStatic$1 (node) {\n node.static = isStatic(node);\n if (node.type === 1) {\n // do not make component slot content static. this avoids\n // 1. components not able to mutate slot nodes\n // 2. static slot content fails for hot-reloading\n if (\n !isPlatformReservedTag(node.tag) &&\n node.tag !== 'slot' &&\n node.attrsMap['inline-template'] == null\n ) {\n return\n }\n for (var i = 0, l = node.children.length; i < l; i++) {\n var child = node.children[i];\n markStatic$1(child);\n if (!child.static) {\n node.static = false;\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n var block = node.ifConditions[i$1].block;\n markStatic$1(block);\n if (!block.static) {\n node.static = false;\n }\n }\n }\n }\n}\n\nfunction markStaticRoots (node, isInFor) {\n if (node.type === 1) {\n if (node.static || node.once) {\n node.staticInFor = isInFor;\n }\n // For a node to qualify as a static root, it should have children that\n // are not just static text. Otherwise the cost of hoisting out will\n // outweigh the benefits and it's better off to just always render it fresh.\n if (node.static && node.children.length && !(\n node.children.length === 1 &&\n node.children[0].type === 3\n )) {\n node.staticRoot = true;\n return\n } else {\n node.staticRoot = false;\n }\n if (node.children) {\n for (var i = 0, l = node.children.length; i < l; i++) {\n markStaticRoots(node.children[i], isInFor || !!node.for);\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n markStaticRoots(node.ifConditions[i$1].block, isInFor);\n }\n }\n }\n}\n\nfunction isStatic (node) {\n if (node.type === 2) { // expression\n return false\n }\n if (node.type === 3) { // text\n return true\n }\n return !!(node.pre || (\n !node.hasBindings && // no dynamic bindings\n !node.if && !node.for && // not v-if or v-for or v-else\n !isBuiltInTag(node.tag) && // not a built-in\n isPlatformReservedTag(node.tag) && // not a component\n !isDirectChildOfTemplateFor(node) &&\n Object.keys(node).every(isStaticKey)\n ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n while (node.parent) {\n node = node.parent;\n if (node.tag !== 'template') {\n return false\n }\n if (node.for) {\n return true\n }\n }\n return false\n}\n\n/* */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n 'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n // #7880: IE11 and Edge use `Esc` for Escape key name.\n esc: ['Esc', 'Escape'],\n tab: 'Tab',\n enter: 'Enter',\n // #9112: IE11 uses `Spacebar` for Space key name.\n space: [' ', 'Spacebar'],\n // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n up: ['Up', 'ArrowUp'],\n left: ['Left', 'ArrowLeft'],\n right: ['Right', 'ArrowRight'],\n down: ['Down', 'ArrowDown'],\n // #9112: IE11 uses `Del` for Delete key name.\n 'delete': ['Backspace', 'Delete', 'Del']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n stop: '$event.stopPropagation();',\n prevent: '$event.preventDefault();',\n self: genGuard(\"$event.target !== $event.currentTarget\"),\n ctrl: genGuard(\"!$event.ctrlKey\"),\n shift: genGuard(\"!$event.shiftKey\"),\n alt: genGuard(\"!$event.altKey\"),\n meta: genGuard(\"!$event.metaKey\"),\n left: genGuard(\"'button' in $event && $event.button !== 0\"),\n middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n events,\n isNative\n) {\n var prefix = isNative ? 'nativeOn:' : 'on:';\n var staticHandlers = \"\";\n var dynamicHandlers = \"\";\n for (var name in events) {\n var handlerCode = genHandler(events[name]);\n if (events[name] && events[name].dynamic) {\n dynamicHandlers += name + \",\" + handlerCode + \",\";\n } else {\n staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n }\n }\n staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n if (dynamicHandlers) {\n return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n } else {\n return prefix + staticHandlers\n }\n}\n\nfunction genHandler (handler) {\n if (!handler) {\n return 'function(){}'\n }\n\n if (Array.isArray(handler)) {\n return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n }\n\n var isMethodPath = simplePathRE.test(handler.value);\n var isFunctionExpression = fnExpRE.test(handler.value);\n var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n\n if (!handler.modifiers) {\n if (isMethodPath || isFunctionExpression) {\n return handler.value\n }\n return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") // inline statement\n } else {\n var code = '';\n var genModifierCode = '';\n var keys = [];\n for (var key in handler.modifiers) {\n if (modifierCode[key]) {\n genModifierCode += modifierCode[key];\n // left/right\n if (keyCodes[key]) {\n keys.push(key);\n }\n } else if (key === 'exact') {\n var modifiers = (handler.modifiers);\n genModifierCode += genGuard(\n ['ctrl', 'shift', 'alt', 'meta']\n .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n .join('||')\n );\n } else {\n keys.push(key);\n }\n }\n if (keys.length) {\n code += genKeyFilter(keys);\n }\n // Make sure modifiers like prevent and stop get executed after key filtering\n if (genModifierCode) {\n code += genModifierCode;\n }\n var handlerCode = isMethodPath\n ? (\"return \" + (handler.value) + \"($event)\")\n : isFunctionExpression\n ? (\"return (\" + (handler.value) + \")($event)\")\n : isFunctionInvocation\n ? (\"return \" + (handler.value))\n : handler.value;\n return (\"function($event){\" + code + handlerCode + \"}\")\n }\n}\n\nfunction genKeyFilter (keys) {\n return (\n // make sure the key filters only apply to KeyboardEvents\n // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n // key events that do not have keyCode property...\n \"if(!$event.type.indexOf('key')&&\" +\n (keys.map(genFilterCode).join('&&')) + \")return null;\"\n )\n}\n\nfunction genFilterCode (key) {\n var keyVal = parseInt(key, 10);\n if (keyVal) {\n return (\"$event.keyCode!==\" + keyVal)\n }\n var keyCode = keyCodes[key];\n var keyName = keyNames[key];\n return (\n \"_k($event.keyCode,\" +\n (JSON.stringify(key)) + \",\" +\n (JSON.stringify(keyCode)) + \",\" +\n \"$event.key,\" +\n \"\" + (JSON.stringify(keyName)) +\n \")\"\n )\n}\n\n/* */\n\nfunction on (el, dir) {\n if (dir.modifiers) {\n warn(\"v-on without argument does not support modifiers.\");\n }\n el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/* */\n\nfunction bind$1 (el, dir) {\n el.wrapData = function (code) {\n return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n };\n}\n\n/* */\n\nvar baseDirectives = {\n on: on,\n bind: bind$1,\n cloak: noop\n};\n\n/* */\n\n\n\n\n\nvar CodegenState = function CodegenState (options) {\n this.options = options;\n this.warn = options.warn || baseWarn;\n this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n this.directives = extend(extend({}, baseDirectives), options.directives);\n var isReservedTag = options.isReservedTag || no;\n this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n this.onceId = 0;\n this.staticRenderFns = [];\n this.pre = false;\n};\n\n\n\nfunction generate (\n ast,\n options\n) {\n var state = new CodegenState(options);\n var code = ast ? genElement(ast, state) : '_c(\"div\")';\n return {\n render: (\"with(this){return \" + code + \"}\"),\n staticRenderFns: state.staticRenderFns\n }\n}\n\nfunction genElement (el, state) {\n if (el.parent) {\n el.pre = el.pre || el.parent.pre;\n }\n\n if (el.staticRoot && !el.staticProcessed) {\n return genStatic(el, state)\n } else if (el.once && !el.onceProcessed) {\n return genOnce(el, state)\n } else if (el.for && !el.forProcessed) {\n return genFor(el, state)\n } else if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n return genChildren(el, state) || 'void 0'\n } else if (el.tag === 'slot') {\n return genSlot(el, state)\n } else {\n // component or element\n var code;\n if (el.component) {\n code = genComponent(el.component, el, state);\n } else {\n var data;\n if (!el.plain || (el.pre && state.maybeComponent(el))) {\n data = genData$2(el, state);\n }\n\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n }\n // module transforms\n for (var i = 0; i < state.transforms.length; i++) {\n code = state.transforms[i](el, code);\n }\n return code\n }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n el.staticProcessed = true;\n // Some elements (templates) need to behave differently inside of a v-pre\n // node. All pre nodes are static roots, so we can use this as a location to\n // wrap a state change and reset it upon exiting the pre node.\n var originalPreState = state.pre;\n if (el.pre) {\n state.pre = el.pre;\n }\n state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n state.pre = originalPreState;\n return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n el.onceProcessed = true;\n if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.staticInFor) {\n var key = '';\n var parent = el.parent;\n while (parent) {\n if (parent.for) {\n key = parent.key;\n break\n }\n parent = parent.parent;\n }\n if (!key) {\n state.warn(\n \"v-once can only be used inside v-for that is keyed. \",\n el.rawAttrsMap['v-once']\n );\n return genElement(el, state)\n }\n return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n } else {\n return genStatic(el, state)\n }\n}\n\nfunction genIf (\n el,\n state,\n altGen,\n altEmpty\n) {\n el.ifProcessed = true; // avoid recursion\n return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n conditions,\n state,\n altGen,\n altEmpty\n) {\n if (!conditions.length) {\n return altEmpty || '_e()'\n }\n\n var condition = conditions.shift();\n if (condition.exp) {\n return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n } else {\n return (\"\" + (genTernaryExp(condition.block)))\n }\n\n // v-if with v-once should generate code like (a)?_m(0):_m(1)\n function genTernaryExp (el) {\n return altGen\n ? altGen(el, state)\n : el.once\n ? genOnce(el, state)\n : genElement(el, state)\n }\n}\n\nfunction genFor (\n el,\n state,\n altGen,\n altHelper\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n if (state.maybeComponent(el) &&\n el.tag !== 'slot' &&\n el.tag !== 'template' &&\n !el.key\n ) {\n state.warn(\n \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n \"v-for should have explicit keys. \" +\n \"See https://vuejs.org/guide/list.html#key for more info.\",\n el.rawAttrsMap['v-for'],\n true /* tip */\n );\n }\n\n el.forProcessed = true; // avoid recursion\n return (altHelper || '_l') + \"((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + ((altGen || genElement)(el, state)) +\n '})'\n}\n\nfunction genData$2 (el, state) {\n var data = '{';\n\n // directives first.\n // directives may mutate the el's other properties before they are generated.\n var dirs = genDirectives(el, state);\n if (dirs) { data += dirs + ','; }\n\n // key\n if (el.key) {\n data += \"key:\" + (el.key) + \",\";\n }\n // ref\n if (el.ref) {\n data += \"ref:\" + (el.ref) + \",\";\n }\n if (el.refInFor) {\n data += \"refInFor:true,\";\n }\n // pre\n if (el.pre) {\n data += \"pre:true,\";\n }\n // record original tag name for components using \"is\" attribute\n if (el.component) {\n data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n }\n // module data generation functions\n for (var i = 0; i < state.dataGenFns.length; i++) {\n data += state.dataGenFns[i](el);\n }\n // attributes\n if (el.attrs) {\n data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n }\n // DOM props\n if (el.props) {\n data += \"domProps:\" + (genProps(el.props)) + \",\";\n }\n // event handlers\n if (el.events) {\n data += (genHandlers(el.events, false)) + \",\";\n }\n if (el.nativeEvents) {\n data += (genHandlers(el.nativeEvents, true)) + \",\";\n }\n // slot target\n // only for non-scoped slots\n if (el.slotTarget && !el.slotScope) {\n data += \"slot:\" + (el.slotTarget) + \",\";\n }\n // scoped slots\n if (el.scopedSlots) {\n data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n }\n // component v-model\n if (el.model) {\n data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n }\n // inline-template\n if (el.inlineTemplate) {\n var inlineTemplate = genInlineTemplate(el, state);\n if (inlineTemplate) {\n data += inlineTemplate + \",\";\n }\n }\n data = data.replace(/,$/, '') + '}';\n // v-bind dynamic argument wrap\n // v-bind with dynamic arguments must be applied using the same v-bind object\n // merge helper so that class/style/mustUseProp attrs are handled correctly.\n if (el.dynamicAttrs) {\n data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n }\n // v-bind data wrap\n if (el.wrapData) {\n data = el.wrapData(data);\n }\n // v-on data wrap\n if (el.wrapListeners) {\n data = el.wrapListeners(data);\n }\n return data\n}\n\nfunction genDirectives (el, state) {\n var dirs = el.directives;\n if (!dirs) { return }\n var res = 'directives:[';\n var hasRuntime = false;\n var i, l, dir, needRuntime;\n for (i = 0, l = dirs.length; i < l; i++) {\n dir = dirs[i];\n needRuntime = true;\n var gen = state.directives[dir.name];\n if (gen) {\n // compile-time directive that manipulates AST.\n // returns true if it also needs a runtime counterpart.\n needRuntime = !!gen(el, dir, state.warn);\n }\n if (needRuntime) {\n hasRuntime = true;\n res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n }\n }\n if (hasRuntime) {\n return res.slice(0, -1) + ']'\n }\n}\n\nfunction genInlineTemplate (el, state) {\n var ast = el.children[0];\n if (el.children.length !== 1 || ast.type !== 1) {\n state.warn(\n 'Inline-template components must have exactly one child element.',\n { start: el.start }\n );\n }\n if (ast && ast.type === 1) {\n var inlineRenderFns = generate(ast, state.options);\n return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n }\n}\n\nfunction genScopedSlots (\n el,\n slots,\n state\n) {\n // by default scoped slots are considered \"stable\", this allows child\n // components with only scoped slots to skip forced updates from parent.\n // but in some cases we have to bail-out of this optimization\n // for example if the slot contains dynamic names, has v-if or v-for on them...\n var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n var slot = slots[key];\n return (\n slot.slotTargetDynamic ||\n slot.if ||\n slot.for ||\n containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n )\n });\n\n // #9534: if a component with scoped slots is inside a conditional branch,\n // it's possible for the same component to be reused but with different\n // compiled slot content. To avoid that, we generate a unique key based on\n // the generated code of all the slot contents.\n var needsKey = !!el.if;\n\n // OR when it is inside another scoped slot or v-for (the reactivity may be\n // disconnected due to the intermediate scope variable)\n // #9438, #9506\n // TODO: this can be further optimized by properly analyzing in-scope bindings\n // and skip force updating ones that do not actually use scope variables.\n if (!needsForceUpdate) {\n var parent = el.parent;\n while (parent) {\n if (\n (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n parent.for\n ) {\n needsForceUpdate = true;\n break\n }\n if (parent.if) {\n needsKey = true;\n }\n parent = parent.parent;\n }\n }\n\n var generatedSlots = Object.keys(slots)\n .map(function (key) { return genScopedSlot(slots[key], state); })\n .join(',');\n\n return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n}\n\nfunction hash(str) {\n var hash = 5381;\n var i = str.length;\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n return hash >>> 0\n}\n\nfunction containsSlotChild (el) {\n if (el.type === 1) {\n if (el.tag === 'slot') {\n return true\n }\n return el.children.some(containsSlotChild)\n }\n return false\n}\n\nfunction genScopedSlot (\n el,\n state\n) {\n var isLegacySyntax = el.attrsMap['slot-scope'];\n if (el.if && !el.ifProcessed && !isLegacySyntax) {\n return genIf(el, state, genScopedSlot, \"null\")\n }\n if (el.for && !el.forProcessed) {\n return genFor(el, state, genScopedSlot)\n }\n var slotScope = el.slotScope === emptySlotScopeToken\n ? \"\"\n : String(el.slotScope);\n var fn = \"function(\" + slotScope + \"){\" +\n \"return \" + (el.tag === 'template'\n ? el.if && isLegacySyntax\n ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n : genChildren(el, state) || 'undefined'\n : genElement(el, state)) + \"}\";\n // reverse proxy v-slot without scope on this.$slots\n var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n}\n\nfunction genChildren (\n el,\n state,\n checkSkip,\n altGenElement,\n altGenNode\n) {\n var children = el.children;\n if (children.length) {\n var el$1 = children[0];\n // optimize single v-for\n if (children.length === 1 &&\n el$1.for &&\n el$1.tag !== 'template' &&\n el$1.tag !== 'slot'\n ) {\n var normalizationType = checkSkip\n ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n : \"\";\n return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n }\n var normalizationType$1 = checkSkip\n ? getNormalizationType(children, state.maybeComponent)\n : 0;\n var gen = altGenNode || genNode;\n return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n children,\n maybeComponent\n) {\n var res = 0;\n for (var i = 0; i < children.length; i++) {\n var el = children[i];\n if (el.type !== 1) {\n continue\n }\n if (needsNormalization(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n res = 2;\n break\n }\n if (maybeComponent(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n res = 1;\n }\n }\n return res\n}\n\nfunction needsNormalization (el) {\n return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n if (node.type === 1) {\n return genElement(node, state)\n } else if (node.type === 3 && node.isComment) {\n return genComment(node)\n } else {\n return genText(node)\n }\n}\n\nfunction genText (text) {\n return (\"_v(\" + (text.type === 2\n ? text.expression // no need for () because already wrapped in _s()\n : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n var slotName = el.slotName || '\"default\"';\n var children = genChildren(el, state);\n var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n var attrs = el.attrs || el.dynamicAttrs\n ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n // slot props are camelized\n name: camelize(attr.name),\n value: attr.value,\n dynamic: attr.dynamic\n }); }))\n : null;\n var bind$$1 = el.attrsMap['v-bind'];\n if ((attrs || bind$$1) && !children) {\n res += \",null\";\n }\n if (attrs) {\n res += \",\" + attrs;\n }\n if (bind$$1) {\n res += (attrs ? '' : ',null') + \",\" + bind$$1;\n }\n return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n componentName,\n el,\n state\n) {\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n var staticProps = \"\";\n var dynamicProps = \"\";\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var value = transformSpecialNewlines(prop.value);\n if (prop.dynamic) {\n dynamicProps += (prop.name) + \",\" + value + \",\";\n } else {\n staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n }\n }\n staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n if (dynamicProps) {\n return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n } else {\n return staticProps\n }\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n return text\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/* */\n\n\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\n 'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n 'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast, warn) {\n if (ast) {\n checkNode(ast, warn);\n }\n}\n\nfunction checkNode (node, warn) {\n if (node.type === 1) {\n for (var name in node.attrsMap) {\n if (dirRE.test(name)) {\n var value = node.attrsMap[name];\n if (value) {\n var range = node.rawAttrsMap[name];\n if (name === 'v-for') {\n checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n } else if (onRE.test(name)) {\n checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n } else {\n checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n }\n }\n }\n }\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n checkNode(node.children[i], warn);\n }\n }\n } else if (node.type === 2) {\n checkExpression(node.expression, node.text, warn, node);\n }\n}\n\nfunction checkEvent (exp, text, warn, range) {\n var stipped = exp.replace(stripStringRE, '');\n var keywordMatch = stipped.match(unaryOperatorsRE);\n if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n warn(\n \"avoid using JavaScript unary operator as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n range\n );\n }\n checkExpression(exp, text, warn, range);\n}\n\nfunction checkFor (node, text, warn, range) {\n checkExpression(node.for || '', text, warn, range);\n checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\n\nfunction checkIdentifier (\n ident,\n type,\n text,\n warn,\n range\n) {\n if (typeof ident === 'string') {\n try {\n new Function((\"var \" + ident + \"=_\"));\n } catch (e) {\n warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n }\n }\n}\n\nfunction checkExpression (exp, text, warn, range) {\n try {\n new Function((\"return \" + exp));\n } catch (e) {\n var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n if (keywordMatch) {\n warn(\n \"avoid using JavaScript keyword as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n Raw expression: \" + (text.trim()),\n range\n );\n } else {\n warn(\n \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n \" \" + exp + \"\\n\\n\" +\n \" Raw expression: \" + (text.trim()) + \"\\n\",\n range\n );\n }\n }\n}\n\n/* */\n\nvar range = 2;\n\nfunction generateCodeFrame (\n source,\n start,\n end\n) {\n if ( start === void 0 ) start = 0;\n if ( end === void 0 ) end = source.length;\n\n var lines = source.split(/\\r?\\n/);\n var count = 0;\n var res = [];\n for (var i = 0; i < lines.length; i++) {\n count += lines[i].length + 1;\n if (count >= start) {\n for (var j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) { continue }\n res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"| \" + (lines[j])));\n var lineLength = lines[j].length;\n if (j === i) {\n // push underline\n var pad = start - (count - lineLength) + 1;\n var length = end > count ? lineLength - pad : end - start;\n res.push(\" | \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n } else if (j > i) {\n if (end > count) {\n var length$1 = Math.min(end - count, lineLength);\n res.push(\" | \" + repeat$1(\"^\", length$1));\n }\n count += lineLength + 1;\n }\n }\n break\n }\n }\n return res.join('\\n')\n}\n\nfunction repeat$1 (str, n) {\n var result = '';\n if (n > 0) {\n while (true) { // eslint-disable-line\n if (n & 1) { result += str; }\n n >>>= 1;\n if (n <= 0) { break }\n str += str;\n }\n }\n return result\n}\n\n/* */\n\n\n\nfunction createFunction (code, errors) {\n try {\n return new Function(code)\n } catch (err) {\n errors.push({ err: err, code: code });\n return noop\n }\n}\n\nfunction createCompileToFunctionFn (compile) {\n var cache = Object.create(null);\n\n return function compileToFunctions (\n template,\n options,\n vm\n ) {\n options = extend({}, options);\n var warn$$1 = options.warn || warn;\n delete options.warn;\n\n /* istanbul ignore if */\n {\n // detect possible CSP restriction\n try {\n new Function('return 1');\n } catch (e) {\n if (e.toString().match(/unsafe-eval|CSP/)) {\n warn$$1(\n 'It seems you are using the standalone build of Vue.js in an ' +\n 'environment with Content Security Policy that prohibits unsafe-eval. ' +\n 'The template compiler cannot work in this environment. Consider ' +\n 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n 'templates into render functions.'\n );\n }\n }\n }\n\n // check cache\n var key = options.delimiters\n ? String(options.delimiters) + template\n : template;\n if (cache[key]) {\n return cache[key]\n }\n\n // compile\n var compiled = compile(template, options);\n\n // check compilation errors/tips\n {\n if (compiled.errors && compiled.errors.length) {\n if (options.outputSourceRange) {\n compiled.errors.forEach(function (e) {\n warn$$1(\n \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n generateCodeFrame(template, e.start, e.end),\n vm\n );\n });\n } else {\n warn$$1(\n \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n vm\n );\n }\n }\n if (compiled.tips && compiled.tips.length) {\n if (options.outputSourceRange) {\n compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n } else {\n compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n }\n }\n }\n\n // turn code into functions\n var res = {};\n var fnGenErrors = [];\n res.render = createFunction(compiled.render, fnGenErrors);\n res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n return createFunction(code, fnGenErrors)\n });\n\n // check function generation errors.\n // this should only happen if there is a bug in the compiler itself.\n // mostly for codegen development use\n /* istanbul ignore if */\n {\n if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n warn$$1(\n \"Failed to generate render function:\\n\\n\" +\n fnGenErrors.map(function (ref) {\n var err = ref.err;\n var code = ref.code;\n\n return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n }).join('\\n'),\n vm\n );\n }\n }\n\n return (cache[key] = res)\n }\n}\n\n/* */\n\nfunction createCompilerCreator (baseCompile) {\n return function createCompiler (baseOptions) {\n function compile (\n template,\n options\n ) {\n var finalOptions = Object.create(baseOptions);\n var errors = [];\n var tips = [];\n\n var warn = function (msg, range, tip) {\n (tip ? tips : errors).push(msg);\n };\n\n if (options) {\n if (options.outputSourceRange) {\n // $flow-disable-line\n var leadingSpaceLength = template.match(/^\\s*/)[0].length;\n\n warn = function (msg, range, tip) {\n var data = { msg: msg };\n if (range) {\n if (range.start != null) {\n data.start = range.start + leadingSpaceLength;\n }\n if (range.end != null) {\n data.end = range.end + leadingSpaceLength;\n }\n }\n (tip ? tips : errors).push(data);\n };\n }\n // merge custom modules\n if (options.modules) {\n finalOptions.modules =\n (baseOptions.modules || []).concat(options.modules);\n }\n // merge custom directives\n if (options.directives) {\n finalOptions.directives = extend(\n Object.create(baseOptions.directives || null),\n options.directives\n );\n }\n // copy other options\n for (var key in options) {\n if (key !== 'modules' && key !== 'directives') {\n finalOptions[key] = options[key];\n }\n }\n }\n\n finalOptions.warn = warn;\n\n var compiled = baseCompile(template.trim(), finalOptions);\n {\n detectErrors(compiled.ast, warn);\n }\n compiled.errors = errors;\n compiled.tips = tips;\n return compiled\n }\n\n return {\n compile: compile,\n compileToFunctions: createCompileToFunctionFn(compile)\n }\n }\n}\n\n/* */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n template,\n options\n) {\n var ast = parse(template.trim(), options);\n if (options.optimize !== false) {\n optimize(ast, options);\n }\n var code = generate(ast, options);\n return {\n ast: ast,\n render: code.render,\n staticRenderFns: code.staticRenderFns\n }\n});\n\n/* */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compile = ref$1.compile;\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/* */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n div = div || document.createElement('div');\n div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n return div.innerHTML.indexOf('&#10;') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n warn(\n \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (!template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n outputSourceRange: \"development\" !== 'production',\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue.compile = compileToFunctions;\n\nmodule.exports = Vue;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../../timers-browserify/main.js */ \"./node_modules/timers-browserify/main.js\").setImmediate))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5kZXYuanM/NDY1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWI7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixpQkFBaUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLCtCQUErQjtBQUNyRCxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGlDQUFpQyxFQUFFO0FBQ3JGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGNBQWM7O0FBRTNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsdUNBQXVDLHdCQUF3QixFQUFFO0FBQ2pFLDBCQUEwQjs7QUFFMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQyxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSx3Q0FBd0MsRUFBRTtBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixvQkFBb0IsRUFBRTtBQUNyRDtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixTQUFTLHFCQUFxQjs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQsaUNBQWlDLHNCQUFzQjtBQUN2RDtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEMsK0JBQStCO0FBQy9CO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixZQUFZO0FBQzlCLFdBQVc7QUFDWDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNB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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssdUZBQXVGO0FBQzVGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQywyQkFBMkIsRUFBRTtBQUN2RSxLQUFLO0FBQ0w7QUFDQSwwQ0FBMEMsNEJBQTRCLEVBQUU7QUFDeEUsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixlQUFlO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixzQkFBc0I7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGFBQWE7QUFDakM7QUFDQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsbUJBQW1CO0FBQzNFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEMsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGO0FBQ2pGLDRCQUE0QjtBQUM1QjtBQUNBLDJCQUEyQjtBQUMzQix3QkFBd0IsaUVBQWlFO0FBQ3pGLFlBQVksMEZBQTBGO0FBQ3RHLE1BQU0sS0FBSywwQ0FBMEM7QUFDckQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsa0JBQWtCO0FBQy9ELHNCQUFzQiwrQ0FBK0M7QUFDckUsaURBQWlEOztBQUVqRDtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw2Q0FBNkMsRUFBRTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDRCQUE0QixFQUFFO0FBQ2xGLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELCtCQUErQixFQUFFO0FBQ3JGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsYUFBYTs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxxQ0FBcUM7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1Q0FBdUMsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMkNBQTJDLEVBQUU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLDhCQUE4QixFQUFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHVDQUF1Qzs7QUFFekUscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxnQkFBZ0I7QUFDeEQ7QUFDQTtBQUNBLGdFQUFnRSxzQkFBc0IsRUFBRTtBQUN4RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwyQkFBMkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QseUJBQXlCLEVBQUU7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0JBQW9CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU8sNEJBQTRCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sT0FBTztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx3QkFBd0IsRUFBRTtBQUMxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5jb21tb24uZGV2LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBWdWUuanMgdjIuNi4xMFxuICogKGMpIDIwMTQtMjAxOSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qICAqL1xuXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuZnVuY3Rpb24gaXNVbmRlZiAodikge1xuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZWYgKHYpIHtcbiAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZSAodikge1xuICByZXR1cm4gdiA9PT0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlICh2KSB7XG4gIHJldHVybiB2ID09PSBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgKVxufVxuXG4vKipcbiAqIFF1aWNrIG9iamVjdCBjaGVjayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxuICogT2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICogaXMgYSBKU09OLWNvbXBsaWFudCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJhdyB0eXBlIHN0cmluZyBvZiBhIHZhbHVlLCBlLmcuLCBbb2JqZWN0IE9iamVjdF0uXG4gKi9cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiB0b1Jhd1R5cGUgKHZhbHVlKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNoZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCAodikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4ICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbClcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIChcbiAgICBpc0RlZih2YWwpICYmXG4gICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHZhbC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogQXJyYXkuaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBfdG9TdHJpbmcpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAgIDogU3RyaW5nKHZhbClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0b051bWJlciAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gaXNOYU4obikgPyB2YWwgOiBuXG59XG5cbi8qKlxuICogTWFrZSBhIG1hcCBhbmQgcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEga2V5XG4gKiBpcyBpbiB0aGF0IG1hcC5cbiAqL1xuZnVuY3Rpb24gbWFrZU1hcCAoXG4gIHN0cixcbiAgZXhwZWN0c0xvd2VyQ2FzZVxuKSB7XG4gIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgbGlzdCA9IHN0ci5zcGxpdCgnLCcpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICB9XG4gIHJldHVybiBleHBlY3RzTG93ZXJDYXNlXG4gICAgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9XG4gICAgOiBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsXTsgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICovXG52YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICovXG5mdW5jdGlvbiByZW1vdmUgKGFyciwgaXRlbSkge1xuICBpZiAoYXJyLmxlbmd0aCkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJzsgfSlcbn0pO1xuXG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufSk7XG5cbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG59KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gKiBlLmcuLCBQaGFudG9tSlMgMS54LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcbiAqIHNpbmNlIG5hdGl2ZSBiaW5kIGlzIG5vdyBwZXJmb3JtYW50IGVub3VnaCBpbiBtb3N0IGJyb3dzZXJzLlxuICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICogUGhhbnRvbUpTIDEueCwgc28gdGhpcyBtdXN0IGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHBvbHlmaWxsQmluZCAoZm4sIGN0eCkge1xuICBmdW5jdGlvbiBib3VuZEZuIChhKSB7XG4gICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBsXG4gICAgICA/IGwgPiAxXG4gICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgIDogZm4uY2FsbChjdHgsIGEpXG4gICAgICA6IGZuLmNhbGwoY3R4KVxuICB9XG5cbiAgYm91bmRGbi5fbGVuZ3RoID0gZm4ubGVuZ3RoO1xuICByZXR1cm4gYm91bmRGblxufVxuXG5mdW5jdGlvbiBuYXRpdmVCaW5kIChmbiwgY3R4KSB7XG4gIHJldHVybiBmbi5iaW5kKGN0eClcbn1cblxudmFyIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICA/IG5hdGl2ZUJpbmRcbiAgOiBwb2x5ZmlsbEJpbmQ7XG5cbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkgKGxpc3QsIHN0YXJ0KSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyoqXG4gKiBNaXggcHJvcGVydGllcyBpbnRvIHRhcmdldCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCAodG8sIF9mcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0IChhcnIpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRyYW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi5yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxuICovXG5mdW5jdGlvbiBub29wIChhLCBiLCBjKSB7fVxuXG4vKipcbiAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gKi9cbnZhciBubyA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmYWxzZTsgfTtcblxuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdHJpbmcgY29udGFpbmluZyBzdGF0aWMga2V5cyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXG4gKi9cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMgKG1vZHVsZXMpIHtcbiAgcmV0dXJuIG1vZHVsZXMucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgcmV0dXJuIGtleXMuY29uY2F0KG0uc3RhdGljS2V5cyB8fCBbXSlcbiAgfSwgW10pLmpvaW4oJywnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCcsXG4gICdzZXJ2ZXJQcmVmZXRjaCdcbl07XG5cbi8qICAqL1xuXG5cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVjb3JkIHBlcmZcbiAgICovXG4gIHBlcmZvcm1hbmNlOiBmYWxzZSxcblxuICAvKipcbiAgICogRXJyb3IgaGFuZGxlciBmb3Igd2F0Y2hlciBlcnJvcnNcbiAgICovXG4gIGVycm9ySGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogV2FybiBoYW5kbGVyIGZvciB3YXRjaGVyIHdhcm5zXG4gICAqL1xuICB3YXJuSGFuZGxlcjogbnVsbCxcblxuICAvKipcbiAgICogSWdub3JlIGNlcnRhaW4gY3VzdG9tIGVsZW1lbnRzXG4gICAqL1xuICBpZ25vcmVkRWxlbWVudHM6IFtdLFxuXG4gIC8qKlxuICAgKiBDdXN0b20gdXNlciBrZXkgYWxpYXNlcyBmb3Igdi1vblxuICAgKi9cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGtleUNvZGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICogY29tcG9uZW50LiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZFRhZzogbm8sXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29tcG9uZW50XG4gICAqIHByb3AuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkQXR0cjogbm8sXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIGFuIHVua25vd24gZWxlbWVudC5cbiAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgaXNVbmtub3duRWxlbWVudDogbm8sXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICovXG4gIGdldFRhZ05hbWVzcGFjZTogbm9vcCxcblxuICAvKipcbiAgICogUGFyc2UgdGhlIHJlYWwgdGFnIG5hbWUgZm9yIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICovXG4gIHBhcnNlUGxhdGZvcm1UYWdOYW1lOiBpZGVudGl0eSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIG11c3QgYmUgYm91bmQgdXNpbmcgcHJvcGVydHksIGUuZy4gdmFsdWVcbiAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgKi9cbiAgbXVzdFVzZVByb3A6IG5vLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkuIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgVnVlIFRlc3QgVXRpbHNcbiAgICogVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgcmVkdWNlIHBlcmZvcm1hbmNlIGlmIHNldCB0byBmYWxzZS5cbiAgICovXG4gIGFzeW5jOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciBsZWdhY3kgcmVhc29uc1xuICAgKi9cbiAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1Ncbn0pO1xuXG4vKiAgKi9cblxuLyoqXG4gKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gKiB1c2luZyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUzL3NlbWFudGljcy1zY3JpcHRpbmcuaHRtbCNwb3RlbnRpYWxjdXN0b21lbGVtZW50bmFtZVxuICogc2tpcHBpbmcgXFx1MTAwMDAtXFx1RUZGRkYgZHVlIHRvIGl0IGZyZWV6aW5nIHVwIFBoYW50b21KU1xuICovXG52YXIgdW5pY29kZVJlZ0V4cCA9IC9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztcblxuLyoqXG4gKiBDaGVjayBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCAkIG9yIF9cbiAqL1xuZnVuY3Rpb24gaXNSZXNlcnZlZCAoc3RyKSB7XG4gIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICByZXR1cm4gYyA9PT0gMHgyNCB8fCBjID09PSAweDVGXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGRlZiAob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICB2YWx1ZTogdmFsLFxuICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gKi9cbnZhciBiYWlsUkUgPSBuZXcgUmVnRXhwKChcIlteXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCIuJF9cXFxcZF1cIikpO1xuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIGlmIChiYWlsUkUudGVzdChwYXRoKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW9iaikgeyByZXR1cm4gfVxuICAgICAgb2JqID0gb2JqW3NlZ21lbnRzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9XG59XG5cbi8qICAqL1xuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuXG4vLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgaW5XZWV4ID0gdHlwZW9mIFdYRW52aXJvbm1lbnQgIT09ICd1bmRlZmluZWQnICYmICEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybTtcbnZhciB3ZWV4UGxhdGZvcm0gPSBpbldlZXggJiYgV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpO1xudmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xudmFyIGlzSUU5ID0gVUEgJiYgVUEuaW5kZXhPZignbXNpZSA5LjAnKSA+IDA7XG52YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XG52YXIgaXNBbmRyb2lkID0gKFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDApIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdhbmRyb2lkJyk7XG52YXIgaXNJT1MgPSAoVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KFVBKSkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2lvcycpO1xudmFyIGlzQ2hyb21lID0gVUEgJiYgL2Nocm9tZVxcL1xcZCsvLnRlc3QoVUEpICYmICFpc0VkZ2U7XG52YXIgaXNQaGFudG9tSlMgPSBVQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbnZhciBpc0ZGID0gVUEgJiYgVUEubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKTtcblxuLy8gRmlyZWZveCBoYXMgYSBcIndhdGNoXCIgZnVuY3Rpb24gb24gT2JqZWN0LnByb3RvdHlwZS4uLlxudmFyIG5hdGl2ZVdhdGNoID0gKHt9KS53YXRjaDtcblxudmFyIHN1cHBvcnRzUGFzc2l2ZSA9IGZhbHNlO1xuaWYgKGluQnJvd3Nlcikge1xuICB0cnkge1xuICAgIHZhciBvcHRzID0ge307XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdHMsICdwYXNzaXZlJywgKHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdC1wYXNzaXZlJywgbnVsbCwgb3B0cyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cbi8vIHRoaXMgbmVlZHMgdG8gYmUgbGF6eS1ldmFsZWQgYmVjYXVzZSB2dWUgbWF5IGJlIHJlcXVpcmVkIGJlZm9yZVxuLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbnZhciBfaXNTZXJ2ZXI7XG52YXIgaXNTZXJ2ZXJSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChfaXNTZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghaW5Ccm93c2VyICYmICFpbldlZXggJiYgdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJlbmRlcmVyIGFuZCBhdm9pZFxuICAgICAgLy8gV2VicGFjayBzaGltbWluZyB0aGUgcHJvY2Vzc1xuICAgICAgX2lzU2VydmVyID0gZ2xvYmFsWydwcm9jZXNzJ10gJiYgZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2ZXInO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaXNTZXJ2ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9pc1NlcnZlclxufTtcblxuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KEN0b3IudG9TdHJpbmcoKSlcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG5cbnZhciBfU2V0O1xuLyogaXN0YW5idWwgaWdub3JlIGlmICovIC8vICRmbG93LWRpc2FibGUtbGluZVxuaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gIF9TZXQgPSBTZXQ7XG59IGVsc2Uge1xuICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGggcHJpbWl0aXZlIGtleXMuXG4gIF9TZXQgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTZXQgKCkge1xuICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cbiAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZVxuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGtleSkge1xuICAgICAgdGhpcy5zZXRba2V5XSA9IHRydWU7XG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH07XG5cbiAgICByZXR1cm4gU2V0O1xuICB9KCkpO1xufVxuXG4vKiAgKi9cblxudmFyIHdhcm4gPSBub29wO1xudmFyIHRpcCA9IG5vb3A7XG52YXIgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IChub29wKTsgLy8gd29yayBhcm91bmQgZmxvdyBjaGVja1xudmFyIGZvcm1hdENvbXBvbmVudE5hbWUgPSAobm9vcCk7XG5cbntcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAoIWNvbmZpZy5hc3luYykge1xuICAgIC8vIHN1YnMgYXJlbid0IHNvcnRlZCBpbiBzY2hlZHVsZXIgaWYgbm90IHJ1bm5pbmcgYXN5bmNcbiAgICAvLyB3ZSBuZWVkIHRvIHNvcnQgdGhlbSBub3cgdG8gbWFrZSBzdXJlIHRoZXkgZmlyZSBpbiBjb3JyZWN0XG4gICAgLy8gb3JkZXJcbiAgICBzdWJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbCA9IHN1YnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgc3Vic1tpXS51cGRhdGUoKTtcbiAgfVxufTtcblxuLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuLy8gVGhpcyBpcyBnbG9iYWxseSB1bmlxdWUgYmVjYXVzZSBvbmx5IG9uZSB3YXRjaGVyXG4vLyBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgdGltZS5cbkRlcC50YXJnZXQgPSBudWxsO1xudmFyIHRhcmdldFN0YWNrID0gW107XG5cbmZ1bmN0aW9uIHB1c2hUYXJnZXQgKHRhcmdldCkge1xuICB0YXJnZXRTdGFjay5wdXNoKHRhcmdldCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBvcFRhcmdldCAoKSB7XG4gIHRhcmdldFN0YWNrLnBvcCgpO1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0U3RhY2tbdGFyZ2V0U3RhY2subGVuZ3RoIC0gMV07XG59XG5cbi8qICAqL1xuXG52YXIgVk5vZGUgPSBmdW5jdGlvbiBWTm9kZSAoXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIGVsbSxcbiAgY29udGV4dCxcbiAgY29tcG9uZW50T3B0aW9ucyxcbiAgYXN5bmNGYWN0b3J5XG4pIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgdGhpcy5lbG0gPSBlbG07XG4gIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcbiAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gIHRoaXMucmF3ID0gZmFsc2U7XG4gIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xuICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gIHRoaXMuaXNPbmNlID0gZmFsc2U7XG4gIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGNoaWxkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbi8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBjcmVhdGVFbXB0eVZOb2RlID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgaWYgKCB0ZXh0ID09PSB2b2lkIDAgKSB0ZXh0ID0gJyc7XG5cbiAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgbm9kZS50ZXh0ID0gdGV4dDtcbiAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICByZXR1cm4gbm9kZVxufTtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlICh2YWwpIHtcbiAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSlcbn1cblxuLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbi8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3Ncbi8vIG11bHRpcGxlIHJlbmRlcnMsIGNsb25pbmcgdGhlbSBhdm9pZHMgZXJyb3JzIHdoZW4gRE9NIG1hbmlwdWxhdGlvbnMgcmVseVxuLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbmZ1bmN0aW9uIGNsb25lVk5vZGUgKHZub2RlKSB7XG4gIHZhciBjbG9uZWQgPSBuZXcgVk5vZGUoXG4gICAgdm5vZGUudGFnLFxuICAgIHZub2RlLmRhdGEsXG4gICAgLy8gIzc5NzVcbiAgICAvLyBjbG9uZSBjaGlsZHJlbiBhcnJheSB0byBhdm9pZCBtdXRhdGluZyBvcmlnaW5hbCBpbiBjYXNlIG9mIGNsb25pbmdcbiAgICAvLyBhIGNoaWxkLlxuICAgIHZub2RlLmNoaWxkcmVuICYmIHZub2RlLmNoaWxkcmVuLnNsaWNlKCksXG4gICAgdm5vZGUudGV4dCxcbiAgICB2bm9kZS5lbG0sXG4gICAgdm5vZGUuY29udGV4dCxcbiAgICB2bm9kZS5jb21wb25lbnRPcHRpb25zLFxuICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICApO1xuICBjbG9uZWQubnMgPSB2bm9kZS5ucztcbiAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gIGNsb25lZC5rZXkgPSB2bm9kZS5rZXk7XG4gIGNsb25lZC5pc0NvbW1lbnQgPSB2bm9kZS5pc0NvbW1lbnQ7XG4gIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gIGNsb25lZC5mbk9wdGlvbnMgPSB2bm9kZS5mbk9wdGlvbnM7XG4gIGNsb25lZC5mblNjb3BlSWQgPSB2bm9kZS5mblNjb3BlSWQ7XG4gIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gIGNsb25lZC5pc0Nsb25lZCA9IHRydWU7XG4gIHJldHVybiBjbG9uZWRcbn1cblxuLypcbiAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gKi9cblxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcblxudmFyIG1ldGhvZHNUb1BhdGNoID0gW1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXTtcblxuLyoqXG4gKiBJbnRlcmNlcHQgbXV0YXRpbmcgbWV0aG9kcyBhbmQgZW1pdCBldmVudHNcbiAqL1xubWV0aG9kc1RvUGF0Y2guZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIC8vIGNhY2hlIG9yaWdpbmFsIG1ldGhvZFxuICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gIGRlZihhcnJheU1ldGhvZHMsIG1ldGhvZCwgZnVuY3Rpb24gbXV0YXRvciAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIHZhciBvYiA9IHRoaXMuX19vYl9fO1xuICAgIHZhciBpbnNlcnRlZDtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAncHVzaCc6XG4gICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzLnNsaWNlKDIpO1xuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpZiAoaW5zZXJ0ZWQpIHsgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTsgfVxuICAgIC8vIG5vdGlmeSBjaGFuZ2VcbiAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KTtcbn0pO1xuXG4vKiAgKi9cblxudmFyIGFycmF5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFycmF5TWV0aG9kcyk7XG5cbi8qKlxuICogSW4gc29tZSBjYXNlcyB3ZSBtYXkgd2FudCB0byBkaXNhYmxlIG9ic2VydmF0aW9uIGluc2lkZSBhIGNvbXBvbmVudCdzXG4gKiB1cGRhdGUgY29tcHV0YXRpb24uXG4gKi9cbnZhciBzaG91bGRPYnNlcnZlID0gdHJ1ZTtcblxuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nICh2YWx1ZSkge1xuICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG59XG5cbi8qKlxuICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0aGUgdGFyZ2V0XG4gKiBvYmplY3QncyBwcm9wZXJ0eSBrZXlzIGludG8gZ2V0dGVyL3NldHRlcnMgdGhhdFxuICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gKi9cbnZhciBPYnNlcnZlciA9IGZ1bmN0aW9uIE9ic2VydmVyICh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMuZGVwID0gbmV3IERlcCgpO1xuICB0aGlzLnZtQ291bnQgPSAwO1xuICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKGhhc1Byb3RvKSB7XG4gICAgICBwcm90b0F1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvcHlBdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMsIGFycmF5S2V5cyk7XG4gICAgfVxuICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndhbGsodmFsdWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFdhbGsgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBhbmQgY29udmVydCB0aGVtIGludG9cbiAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlblxuICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS53YWxrID0gZnVuY3Rpb24gd2FsayAob2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEob2JqLCBrZXlzW2ldKTtcbiAgfVxufTtcblxuLyoqXG4gKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLm9ic2VydmVBcnJheSA9IGZ1bmN0aW9uIG9ic2VydmVBcnJheSAoaXRlbXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvYnNlcnZlKGl0ZW1zW2ldKTtcbiAgfVxufTtcblxuLy8gaGVscGVyc1xuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHByb3RvdHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuICB0YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG59XG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgZGVmaW5pbmdcbiAqIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gY29weUF1Z21lbnQgKHRhcmdldCwgc3JjLCBrZXlzKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBkZWYodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHQgdG8gY3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlIGZvciBhIHZhbHVlLFxuICogcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGlmIHN1Y2Nlc3NmdWxseSBvYnNlcnZlZCxcbiAqIG9yIHRoZSBleGlzdGluZyBvYnNlcnZlciBpZiB0aGUgdmFsdWUgYWxyZWFkeSBoYXMgb25lLlxuICovXG5mdW5jdGlvbiBvYnNlcnZlICh2YWx1ZSwgYXNSb290RGF0YSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9iO1xuICBpZiAoaGFzT3duKHZhbHVlLCAnX19vYl9fJykgJiYgdmFsdWUuX19vYl9fIGluc3RhbmNlb2YgT2JzZXJ2ZXIpIHtcbiAgICBvYiA9IHZhbHVlLl9fb2JfXztcbiAgfSBlbHNlIGlmIChcbiAgICBzaG91bGRPYnNlcnZlICYmXG4gICAgIWlzU2VydmVyUmVuZGVyaW5nKCkgJiZcbiAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkgJiZcbiAgICAhdmFsdWUuX2lzVnVlXG4gICkge1xuICAgIG9iID0gbmV3IE9ic2VydmVyKHZhbHVlKTtcbiAgfVxuICBpZiAoYXNSb290RGF0YSAmJiBvYikge1xuICAgIG9iLnZtQ291bnQrKztcbiAgfVxuICByZXR1cm4gb2Jcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlJCQxIChcbiAgb2JqLFxuICBrZXksXG4gIHZhbCxcbiAgY3VzdG9tU2V0dGVyLFxuICBzaGFsbG93XG4pIHtcbiAgdmFyIGRlcCA9IG5ldyBEZXAoKTtcblxuICB2YXIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICB2YXIgc2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuc2V0O1xuICBpZiAoKCFnZXR0ZXIgfHwgc2V0dGVyKSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFsID0gb2JqW2tleV07XG4gIH1cblxuICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiByZWFjdGl2ZUdldHRlciAoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAgICBpZiAoY2hpbGRPYikge1xuICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZGVwZW5kQXJyYXkodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlU2V0dGVyIChuZXdWYWwpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9cbiAgICAgIGlmIChuZXdWYWwgPT09IHZhbHVlIHx8IChuZXdWYWwgIT09IG5ld1ZhbCAmJiB2YWx1ZSAhPT0gdmFsdWUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUgKi9cbiAgICAgIGlmIChjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHdhcm4oXG4gICAgICAnQXZvaWQgZGVsZXRpbmcgcHJvcGVydGllcyBvbiBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJ1xuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgZGVsZXRlIHRhcmdldFtrZXldO1xuICBpZiAoIW9iKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgb2IuZGVwLm5vdGlmeSgpO1xufVxuXG4vKipcbiAqIENvbGxlY3QgZGVwZW5kZW5jaWVzIG9uIGFycmF5IGVsZW1lbnRzIHdoZW4gdGhlIGFycmF5IGlzIHRvdWNoZWQsIHNpbmNlXG4gKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kQXJyYXkgKHZhbHVlKSB7XG4gIGZvciAodmFyIGUgPSAodm9pZCAwKSwgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBlID0gdmFsdWVbaV07XG4gICAgZSAmJiBlLl9fb2JfXyAmJiBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBPcHRpb24gb3ZlcndyaXRpbmcgc3RyYXRlZ2llcyBhcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXG4gKiBob3cgdG8gbWVyZ2UgYSBwYXJlbnQgb3B0aW9uIHZhbHVlIGFuZCBhIGNoaWxkIG9wdGlvblxuICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gKi9cbnZhciBzdHJhdHMgPSBjb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuXG4vKipcbiAqIE9wdGlvbnMgd2l0aCByZXN0cmljdGlvbnNcbiAqL1xue1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0aW9uICcgK1xuICAgICAgICAndGhhdCByZXR1cm5zIGEgcGVyLWluc3RhbmNlIHZhbHVlIGluIGNvbXBvbmVudCAnICtcbiAgICAgICAgJ2RlZmluaXRpb25zLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcGFyZW50VmFsXG4gICAgfVxuICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwpXG4gIH1cblxuICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSlcbn07XG5cbi8qKlxuICogSG9va3MgYW5kIHByb3BzIGFyZSBtZXJnZWQgYXMgYXJyYXlzLlxuICovXG5mdW5jdGlvbiBtZXJnZUhvb2sgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsXG4pIHtcbiAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgPyBwYXJlbnRWYWxcbiAgICAgID8gcGFyZW50VmFsLmNvbmNhdChjaGlsZFZhbClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICA6IFtjaGlsZFZhbF1cbiAgICA6IHBhcmVudFZhbDtcbiAgcmV0dXJuIHJlc1xuICAgID8gZGVkdXBlSG9va3MocmVzKVxuICAgIDogcmVzXG59XG5cbmZ1bmN0aW9uIGRlZHVwZUhvb2tzIChob29rcykge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocmVzLmluZGV4T2YoaG9va3NbaV0pID09PSAtMSkge1xuICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkxJRkVDWUNMRV9IT09LUy5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gIHN0cmF0c1tob29rXSA9IG1lcmdlSG9vaztcbn0pO1xuXG4vKipcbiAqIEFzc2V0c1xuICpcbiAqIFdoZW4gYSB2bSBpcyBwcmVzZW50IChpbnN0YW5jZSBjcmVhdGlvbiksIHdlIG5lZWQgdG8gZG9cbiAqIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gY29uc3RydWN0b3Igb3B0aW9ucywgaW5zdGFuY2VcbiAqIG9wdGlvbnMgYW5kIHBhcmVudCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBtZXJnZUFzc2V0cyAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gIGlmIChjaGlsZFZhbCkge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IHt9O1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBmb3IgKHZhciBrZXkkMSBpbiBjaGlsZFZhbCkge1xuICAgIHZhciBwYXJlbnQgPSByZXRba2V5JDFdO1xuICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleSQxXTtcbiAgICBpZiAocGFyZW50ICYmICFBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIHBhcmVudCA9IFtwYXJlbnRdO1xuICAgIH1cbiAgICByZXRba2V5JDFdID0gcGFyZW50XG4gICAgICA/IHBhcmVudC5jb25jYXQoY2hpbGQpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGQpID8gY2hpbGQgOiBbY2hpbGRdO1xuICB9XG4gIHJldHVybiByZXRcbn07XG5cbi8qKlxuICogT3RoZXIgb2JqZWN0IGhhc2hlcy5cbiAqL1xuc3RyYXRzLnByb3BzID1cbnN0cmF0cy5tZXRob2RzID1cbnN0cmF0cy5pbmplY3QgPVxuc3RyYXRzLmNvbXB1dGVkID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgaWYgKGNoaWxkVmFsICYmIFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKCdwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguJyk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgbmFtZSA9IGNhbWVsaXplKGtleSk7XG4gICAgICByZXNbbmFtZV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyB2YWxcbiAgICAgICAgOiB7IHR5cGU6IHZhbCB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIHtcbiAgICBjaGVja0NvbXBvbmVudHMoY2hpbGQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNoaWxkID0gY2hpbGQub3B0aW9ucztcbiAgfVxuXG4gIG5vcm1hbGl6ZVByb3BzKGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZUluamVjdChjaGlsZCwgdm0pO1xuICBub3JtYWxpemVEaXJlY3RpdmVzKGNoaWxkKTtcblxuICAvLyBBcHBseSBleHRlbmRzIGFuZCBtaXhpbnMgb24gdGhlIGNoaWxkIG9wdGlvbnMsXG4gIC8vIGJ1dCBvbmx5IGlmIGl0IGlzIGEgcmF3IG9wdGlvbnMgb2JqZWN0IHRoYXQgaXNuJ3RcbiAgLy8gdGhlIHJlc3VsdCBvZiBhbm90aGVyIG1lcmdlT3B0aW9ucyBjYWxsLlxuICAvLyBPbmx5IG1lcmdlZCBvcHRpb25zIGhhcyB0aGUgX2Jhc2UgcHJvcGVydHkuXG4gIGlmICghY2hpbGQuX2Jhc2UpIHtcbiAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pO1xuICAgIH1cbiAgICBpZiAoY2hpbGQubWl4aW5zKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkLm1peGlucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQubWl4aW5zW2ldLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gcGFyZW50KSB7XG4gICAgbWVyZ2VGaWVsZChrZXkpO1xuICB9XG4gIGZvciAoa2V5IGluIGNoaWxkKSB7XG4gICAgaWYgKCFoYXNPd24ocGFyZW50LCBrZXkpKSB7XG4gICAgICBtZXJnZUZpZWxkKGtleSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1lcmdlRmllbGQgKGtleSkge1xuICAgIHZhciBzdHJhdCA9IHN0cmF0c1trZXldIHx8IGRlZmF1bHRTdHJhdDtcbiAgICBvcHRpb25zW2tleV0gPSBzdHJhdChwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0sIGtleSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGFzc2V0LlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJlY2F1c2UgY2hpbGQgaW5zdGFuY2VzIG5lZWQgYWNjZXNzXG4gKiB0byBhc3NldHMgZGVmaW5lZCBpbiBpdHMgYW5jZXN0b3IgY2hhaW4uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBc3NldCAoXG4gIG9wdGlvbnMsXG4gIHR5cGUsXG4gIGlkLFxuICB3YXJuTWlzc2luZ1xuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBhc3NldHMgPSBvcHRpb25zW3R5cGVdO1xuICAvLyBjaGVjayBsb2NhbCByZWdpc3RyYXRpb24gdmFyaWF0aW9ucyBmaXJzdFxuICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKSB7IHJldHVybiBhc3NldHNbaWRdIH1cbiAgdmFyIGNhbWVsaXplZElkID0gY2FtZWxpemUoaWQpO1xuICBpZiAoaGFzT3duKGFzc2V0cywgY2FtZWxpemVkSWQpKSB7IHJldHVybiBhc3NldHNbY2FtZWxpemVkSWRdIH1cbiAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICBpZiAoaGFzT3duKGFzc2V0cywgUGFzY2FsQ2FzZUlkKSkgeyByZXR1cm4gYXNzZXRzW1Bhc2NhbENhc2VJZF0gfVxuICAvLyBmYWxsYmFjayB0byBwcm90b3R5cGUgY2hhaW5cbiAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgaWYgKHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAoaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgLy8gVGVjaGluaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBGYWxsYmFjayB0byBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gIHZhciBfcmVzb2x2ZTtcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgcGVuZGluZyA9IHRydWU7XG4gICAgdGltZXJGdW5jKCk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcblxue1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG57XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIiArIGtleSArIFwiXFxcIiBiZWNhdXNlIFwiICtcbiAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgaGFzUHJveHkgPVxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuXG4gIGlmIChoYXNQcm94eSkge1xuICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIiArIGtleSkpO1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGhhc0hhbmRsZXIgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBoYXMgKHRhcmdldCwga2V5KSB7XG4gICAgICB2YXIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFscyhrZXkpIHx8XG4gICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnXycgJiYgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkXG4gICAgfVxuICB9O1xuXG4gIHZhciBnZXRIYW5kbGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIkludmFsaWQgaGFuZGxlciBmb3IgZXZlbnQgXFxcIlwiICsgKGV2ZW50Lm5hbWUpICsgXCJcXFwiOiBnb3QgXCIgKyBTdHJpbmcoY3VyKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZCkpIHtcbiAgICAgIGlmIChpc1VuZGVmKGN1ci5mbnMpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICB9XG4gICAgICBhZGQoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlLCBldmVudC5wYXNzaXZlLCBldmVudC5wYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgcmVtb3ZlJCQxKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG1lcmdlVk5vZGVIb29rIChkZWYsIGhvb2tLZXksIGhvb2spIHtcbiAgaWYgKGRlZiBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgZGVmID0gZGVmLmRhdGEuaG9vayB8fCAoZGVmLmRhdGEuaG9vayA9IHt9KTtcbiAgfVxuICB2YXIgaW52b2tlcjtcbiAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tleV07XG5cbiAgZnVuY3Rpb24gd3JhcHBlZEhvb2sgKCkge1xuICAgIGhvb2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICByZW1vdmUoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgfVxuXG4gIGlmIChpc1VuZGVmKG9sZEhvb2spKSB7XG4gICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gIH0gZWxzZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xkSG9vay5tZXJnZWQpKSB7XG4gICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcbiAgICAgIGludm9rZXIgPSBvbGRIb29rO1xuICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIHBsYWluIGhvb2tcbiAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW29sZEhvb2ssIHdyYXBwZWRIb29rXSk7XG4gICAgfVxuICB9XG5cbiAgaW52b2tlci5tZXJnZWQgPSB0cnVlO1xuICBkZWZbaG9va0tleV0gPSBpbnZva2VyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSAoXG4gIGRhdGEsXG4gIEN0b3IsXG4gIHRhZ1xuKSB7XG4gIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxuICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgLy8gY29tcG9uZW50IGl0c2VsZi5cbiAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBhdHRycyA9IGRhdGEuYXR0cnM7XG4gIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbmplY3QgKGluamVjdCwgdm0pIHtcbiAgaWYgKGluamVjdCkge1xuICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICAgID8gUmVmbGVjdC5vd25LZXlzKGluamVjdClcbiAgICAgIDogT2JqZWN0LmtleXMoaW5qZWN0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldLmZyb207XG4gICAgICB2YXIgc291cmNlID0gdm07XG4gICAgICB3aGlsZSAoc291cmNlKSB7XG4gICAgICAgIGlmIChzb3VyY2UuX3Byb3ZpZGVkICYmIGhhc093bihzb3VyY2UuX3Byb3ZpZGVkLCBwcm92aWRlS2V5KSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlLl9wcm92aWRlZFtwcm92aWRlS2V5XTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBpbmplY3Rba2V5XSkge1xuICAgICAgICAgIHZhciBwcm92aWRlRGVmYXVsdCA9IGluamVjdFtrZXldLmRlZmF1bHQ7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB0eXBlb2YgcHJvdmlkZURlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgIDogcHJvdmlkZURlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybigoXCJJbmplY3Rpb24gXFxcIlwiICsga2V5ICsgXCJcXFwiIG5vdCBmb3VuZFwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKiAgKi9cblxuXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyByYXcgY2hpbGRyZW4gVk5vZGVzIGludG8gYSBzbG90IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNsb3RzIChcbiAgY2hpbGRyZW4sXG4gIGNvbnRleHRcbikge1xuICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuICB2YXIgc2xvdHMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgLy8gcmVtb3ZlIHNsb3QgYXR0cmlidXRlIGlmIHRoZSBub2RlIGlzIHJlc29sdmVkIGFzIGEgVnVlIHNsb3Qgbm9kZVxuICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgIH1cbiAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcbiAgICAgIGRhdGEgJiYgZGF0YS5zbG90ICE9IG51bGxcbiAgICApIHtcbiAgICAgIHZhciBuYW1lID0gZGF0YS5zbG90O1xuICAgICAgdmFyIHNsb3QgPSAoc2xvdHNbbmFtZV0gfHwgKHNsb3RzW25hbWVdID0gW10pKTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgc2xvdC5wdXNoLmFwcGx5KHNsb3QsIGNoaWxkLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsb3QucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIChzbG90cy5kZWZhdWx0IHx8IChzbG90cy5kZWZhdWx0ID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgLy8gaWdub3JlIHNsb3RzIHRoYXQgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlXG4gIGZvciAodmFyIG5hbWUkMSBpbiBzbG90cykge1xuICAgIGlmIChzbG90c1tuYW1lJDFdLmV2ZXJ5KGlzV2hpdGVzcGFjZSkpIHtcbiAgICAgIGRlbGV0ZSBzbG90c1tuYW1lJDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2xvdHNcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4gIHJldHVybiAobm9kZS5pc0NvbW1lbnQgJiYgIW5vZGUuYXN5bmNGYWN0b3J5KSB8fCBub2RlLnRleHQgPT09ICcgJ1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdHMgKFxuICBzbG90cyxcbiAgbm9ybWFsU2xvdHMsXG4gIHByZXZTbG90c1xuKSB7XG4gIHZhciByZXM7XG4gIHZhciBoYXNOb3JtYWxTbG90cyA9IE9iamVjdC5rZXlzKG5vcm1hbFNsb3RzKS5sZW5ndGggPiAwO1xuICB2YXIgaXNTdGFibGUgPSBzbG90cyA/ICEhc2xvdHMuJHN0YWJsZSA6ICFoYXNOb3JtYWxTbG90cztcbiAgdmFyIGtleSA9IHNsb3RzICYmIHNsb3RzLiRrZXk7XG4gIGlmICghc2xvdHMpIHtcbiAgICByZXMgPSB7fTtcbiAgfSBlbHNlIGlmIChzbG90cy5fbm9ybWFsaXplZCkge1xuICAgIC8vIGZhc3QgcGF0aCAxOiBjaGlsZCBjb21wb25lbnQgcmUtcmVuZGVyIG9ubHksIHBhcmVudCBkaWQgbm90IGNoYW5nZVxuICAgIHJldHVybiBzbG90cy5fbm9ybWFsaXplZFxuICB9IGVsc2UgaWYgKFxuICAgIGlzU3RhYmxlICYmXG4gICAgcHJldlNsb3RzICYmXG4gICAgcHJldlNsb3RzICE9PSBlbXB0eU9iamVjdCAmJlxuICAgIGtleSA9PT0gcHJldlNsb3RzLiRrZXkgJiZcbiAgICAhaGFzTm9ybWFsU2xvdHMgJiZcbiAgICAhcHJldlNsb3RzLiRoYXNOb3JtYWxcbiAgKSB7XG4gICAgLy8gZmFzdCBwYXRoIDI6IHN0YWJsZSBzY29wZWQgc2xvdHMgdy8gbm8gbm9ybWFsIHNsb3RzIHRvIHByb3h5LFxuICAgIC8vIG9ubHkgbmVlZCB0byBub3JtYWxpemUgb25jZVxuICAgIHJldHVybiBwcmV2U2xvdHNcbiAgfSBlbHNlIHtcbiAgICByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkkMSBpbiBzbG90cykge1xuICAgICAgaWYgKHNsb3RzW2tleSQxXSAmJiBrZXkkMVswXSAhPT0gJyQnKSB7XG4gICAgICAgIHJlc1trZXkkMV0gPSBub3JtYWxpemVTY29wZWRTbG90KG5vcm1hbFNsb3RzLCBrZXkkMSwgc2xvdHNba2V5JDFdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gZXhwb3NlIG5vcm1hbCBzbG90cyBvbiBzY29wZWRTbG90c1xuICBmb3IgKHZhciBrZXkkMiBpbiBub3JtYWxTbG90cykge1xuICAgIGlmICghKGtleSQyIGluIHJlcykpIHtcbiAgICAgIHJlc1trZXkkMl0gPSBwcm94eU5vcm1hbFNsb3Qobm9ybWFsU2xvdHMsIGtleSQyKTtcbiAgICB9XG4gIH1cbiAgLy8gYXZvcmlheiBzZWVtcyB0byBtb2NrIGEgbm9uLWV4dGVuc2libGUgJHNjb3BlZFNsb3RzIG9iamVjdFxuICAvLyBhbmQgd2hlbiB0aGF0IGlzIHBhc3NlZCBkb3duIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3JcbiAgaWYgKHNsb3RzICYmIE9iamVjdC5pc0V4dGVuc2libGUoc2xvdHMpKSB7XG4gICAgKHNsb3RzKS5fbm9ybWFsaXplZCA9IHJlcztcbiAgfVxuICBkZWYocmVzLCAnJHN0YWJsZScsIGlzU3RhYmxlKTtcbiAgZGVmKHJlcywgJyRrZXknLCBrZXkpO1xuICBkZWYocmVzLCAnJGhhc05vcm1hbCcsIGhhc05vcm1hbFNsb3RzKTtcbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90KG5vcm1hbFNsb3RzLCBrZXksIGZuKSB7XG4gIHZhciBub3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXMgPSBhcmd1bWVudHMubGVuZ3RoID8gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKSA6IGZuKHt9KTtcbiAgICByZXMgPSByZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmVzKVxuICAgICAgPyBbcmVzXSAvLyBzaW5nbGUgdm5vZGVcbiAgICAgIDogbm9ybWFsaXplQ2hpbGRyZW4ocmVzKTtcbiAgICByZXR1cm4gcmVzICYmIChcbiAgICAgIHJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIChyZXMubGVuZ3RoID09PSAxICYmIHJlc1swXS5pc0NvbW1lbnQpIC8vICM5NjU4XG4gICAgKSA/IHVuZGVmaW5lZFxuICAgICAgOiByZXNcbiAgfTtcbiAgLy8gdGhpcyBpcyBhIHNsb3QgdXNpbmcgdGhlIG5ldyB2LXNsb3Qgc3ludGF4IHdpdGhvdXQgc2NvcGUuIGFsdGhvdWdoIGl0IGlzXG4gIC8vIGNvbXBpbGVkIGFzIGEgc2NvcGVkIHNsb3QsIHJlbmRlciBmbiB1c2VycyB3b3VsZCBleHBlY3QgaXQgdG8gYmUgcHJlc2VudFxuICAvLyBvbiB0aGlzLiRzbG90cyBiZWNhdXNlIHRoZSB1c2FnZSBpcyBzZW1hbnRpY2FsbHkgYSBub3JtYWwgc2xvdC5cbiAgaWYgKGZuLnByb3h5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgIGdldDogbm9ybWFsaXplZCxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG5mdW5jdGlvbiBwcm94eU5vcm1hbFNsb3Qoc2xvdHMsIGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHYtZm9yIGxpc3RzLlxuICovXG5mdW5jdGlvbiByZW5kZXJMaXN0IChcbiAgdmFsLFxuICByZW5kZXJcbikge1xuICB2YXIgcmV0LCBpLCBsLCBrZXlzLCBrZXk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkgfHwgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxbaV0sIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKGkgKyAxLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgIGlmIChoYXNTeW1ib2wgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgIHJldCA9IFtdO1xuICAgICAgdmFyIGl0ZXJhdG9yID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgIHJldC5wdXNoKHJlbmRlcihyZXN1bHQudmFsdWUsIHJldC5sZW5ndGgpKTtcbiAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgIHJldCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtrZXldLCBrZXksIGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzRGVmKHJldCkpIHtcbiAgICByZXQgPSBbXTtcbiAgfVxuICAocmV0KS5faXNWTGlzdCA9IHRydWU7XG4gIHJldHVybiByZXRcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyA8c2xvdD5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU2xvdCAoXG4gIG5hbWUsXG4gIGZhbGxiYWNrLFxuICBwcm9wcyxcbiAgYmluZE9iamVjdFxuKSB7XG4gIHZhciBzY29wZWRTbG90Rm4gPSB0aGlzLiRzY29wZWRTbG90c1tuYW1lXTtcbiAgdmFyIG5vZGVzO1xuICBpZiAoc2NvcGVkU2xvdEZuKSB7IC8vIHNjb3BlZCBzbG90XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoYmluZE9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFjaztcbiAgfSBlbHNlIHtcbiAgICBub2RlcyA9IHRoaXMuJHNsb3RzW25hbWVdIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzIChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbiA9IGRhdGEub24gPSBkYXRhLm9uID8gZXh0ZW5kKHt9LCBkYXRhLm9uKSA6IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgIHZhciBvdXJzID0gdmFsdWVba2V5XTtcbiAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBvdXJzKSA6IG91cnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICBmbnMsIC8vIHNlZSBmbG93L3Zub2RlXG4gIHJlcyxcbiAgLy8gdGhlIGZvbGxvd2luZyBhcmUgYWRkZWQgaW4gMi42XG4gIGhhc0R5bmFtaWNLZXlzLFxuICBjb250ZW50SGFzaEtleVxuKSB7XG4gIHJlcyA9IHJlcyB8fCB7ICRzdGFibGU6ICFoYXNEeW5hbWljS2V5cyB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNsb3QpKSB7XG4gICAgICByZXNvbHZlU2NvcGVkU2xvdHMoc2xvdCwgcmVzLCBoYXNEeW5hbWljS2V5cyk7XG4gICAgfSBlbHNlIGlmIChzbG90KSB7XG4gICAgICAvLyBtYXJrZXIgZm9yIHJldmVyc2UgcHJveHlpbmcgdi1zbG90IHdpdGhvdXQgc2NvcGUgb24gdGhpcy4kc2xvdHNcbiAgICAgIGlmIChzbG90LnByb3h5KSB7XG4gICAgICAgIHNsb3QuZm4ucHJveHkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmVzW3Nsb3Qua2V5XSA9IHNsb3QuZm47XG4gICAgfVxuICB9XG4gIGlmIChjb250ZW50SGFzaEtleSkge1xuICAgIChyZXMpLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kRHluYW1pY0tleXMgKGJhc2VPYmosIHZhbHVlcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBrZXkgPSB2YWx1ZXNbaV07XG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSkge1xuICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICB9IGVsc2UgaWYgKGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGlzIGEgc3BlaWNhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiICsga2V5KSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhc2VPYmpcbn1cblxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyICh2YWx1ZSwgc3ltYm9sKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgdGFyZ2V0Ll9uID0gdG9OdW1iZXI7XG4gIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICB0YXJnZXQuX3QgPSByZW5kZXJTbG90O1xuICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gIHRhcmdldC5fbSA9IHJlbmRlclN0YXRpYztcbiAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgdGFyZ2V0Ll9iID0gYmluZE9iamVjdFByb3BzO1xuICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gIHRhcmdldC5fdSA9IHJlc29sdmVTY29wZWRTbG90cztcbiAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICB0YXJnZXQuX3AgPSBwcmVwZW5kTW9kaWZpZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCAoXG4gIGRhdGEsXG4gIHByb3BzLFxuICBjaGlsZHJlbixcbiAgcGFyZW50LFxuICBDdG9yXG4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2YXIgY29udGV4dFZtO1xuICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgfVxuICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcyQxLiRzbG90cykge1xuICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIGRhdGEuc2NvcGVkU2xvdHMsXG4gICAgICAgIHRoaXMkMS4kc2xvdHMgPSByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIHBhcmVudClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzJDEuJHNsb3RzXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsICh7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKVxuICAgIH1cbiAgfSkpO1xuXG4gIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgdmFyIHZub2RlID0gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0ID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7IH07XG4gIH1cbn1cblxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCAoXG4gIEN0b3IsXG4gIHByb3BzRGF0YSxcbiAgZGF0YSxcbiAgY29udGV4dFZtLFxuICBjaGlsZHJlblxuKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWYoZGF0YS5hdHRycykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgfVxuXG4gIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGV4dFZtLFxuICAgIEN0b3JcbiAgKTtcblxuICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAvLyAoZS5nLiBpdCB3YXMgZnJvbSBhIGNhY2hlZCBub3JtYWwgc2xvdCkgdGhlIGZuQ29udGV4dCBjYXVzZXMgbmFtZWQgc2xvdHNcbiAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICBjbG9uZS5mbkNvbnRleHQgPSBjb250ZXh0Vm07XG4gIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gIHtcbiAgICAoY2xvbmUuZGV2dG9vbHNNZXRhID0gY2xvbmUuZGV2dG9vbHNNZXRhIHx8IHt9KS5yZW5kZXJDb250ZXh0ID0gcmVuZGVyQ29udGV4dDtcbiAgfVxuICBpZiAoZGF0YS5zbG90KSB7XG4gICAgKGNsb25lLmRhdGEgfHwgKGNsb25lLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XG4gIH1cbiAgcmV0dXJuIGNsb25lXG59XG5cbmZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRvLCBmcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgdG9bY2FtZWxpemUoa2V5KV0gPSBmcm9tW2tleV07XG4gIH1cbn1cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8vIGlubGluZSBob29rcyB0byBiZSBpbnZva2VkIG9uIGNvbXBvbmVudCBWTm9kZXMgZHVyaW5nIHBhdGNoXG52YXIgY29tcG9uZW50Vk5vZGVIb29rcyA9IHtcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIGlmIChcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAhdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkICYmXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZVxuICAgICkge1xuICAgICAgLy8ga2VwdC1hbGl2ZSBjb21wb25lbnRzLCB0cmVhdCBhcyBhIHBhdGNoXG4gICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgY29tcG9uZW50Vk5vZGVIb29rcy5wcmVwYXRjaChtb3VudGVkTm9kZSwgbW91bnRlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gICAgICAgIHZub2RlLFxuICAgICAgICBhY3RpdmVJbnN0YW5jZVxuICAgICAgKTtcbiAgICAgIGNoaWxkLiRtb3VudChoeWRyYXRpbmcgPyB2bm9kZS5lbG0gOiB1bmRlZmluZWQsIGh5ZHJhdGluZyk7XG4gICAgfVxuICB9LFxuXG4gIHByZXBhdGNoOiBmdW5jdGlvbiBwcmVwYXRjaCAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgdXBkYXRlQ2hpbGRDb21wb25lbnQoXG4gICAgICBjaGlsZCxcbiAgICAgIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICBvcHRpb25zLmxpc3RlbmVycywgLy8gdXBkYXRlZCBsaXN0ZW5lcnNcbiAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXG4gICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICk7XG4gIH0sXG5cbiAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQgKHZub2RlKSB7XG4gICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0O1xuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBjYWxsSG9vayhjb21wb25lbnRJbnN0YW5jZSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICBpZiAoY29udGV4dC5faXNNb3VudGVkKSB7XG4gICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAvLyBEdXJpbmcgdXBkYXRlcywgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCdzIGNoaWxkIGNvbXBvbmVudHMgbWF5XG4gICAgICAgIC8vIGNoYW5nZSwgc28gZGlyZWN0bHkgd2Fsa2luZyB0aGUgdHJlZSBoZXJlIG1heSBjYWxsIGFjdGl2YXRlZCBob29rc1xuICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgd2hvbGUgcGF0Y2ggcHJvY2VzcyBlbmRlZC5cbiAgICAgICAgcXVldWVBY3RpdmF0ZWRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICBpZiAoIXZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBob29rc1RvTWVyZ2UgPSBPYmplY3Qua2V5cyhjb21wb25lbnRWTm9kZUhvb2tzKTtcblxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50IChcbiAgQ3RvcixcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuXG4gIC8vIHBsYWluIG9wdGlvbnMgb2JqZWN0OiB0dXJuIGl0IGludG8gYSBjb25zdHJ1Y3RvclxuICBpZiAoaXNPYmplY3QoQ3RvcikpIHtcbiAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICB9XG5cbiAgLy8gaWYgYXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIGFuIGFzeW5jIGNvbXBvbmVudCBmYWN0b3J5LFxuICAvLyByZWplY3QuXG4gIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkF2b2lkIHVzaW5nIG9ic2VydmVkIGRhdGEgb2JqZWN0IGFzIHZub2RlIGRhdGE6IFwiICsgKEpTT04uc3RyaW5naWZ5KGRhdGEpKSArIFwiXFxuXCIgK1xuICAgICAgJ0Fsd2F5cyBjcmVhdGUgZnJlc2ggdm5vZGUgZGF0YSBvYmplY3RzIGluIGVhY2ggcmVuZGVyIScsXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbiAgLy8gb2JqZWN0IHN5bnRheCBpbiB2LWJpbmRcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEuaXMpKSB7XG4gICAgdGFnID0gZGF0YS5pcztcbiAgfVxuICBpZiAoIXRhZykge1xuICAgIC8vIGluIGNhc2Ugb2YgY29tcG9uZW50IDppcyBzZXQgdG8gZmFsc3kgdmFsdWVcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1wcmltaXRpdmUga2V5XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbn1cblxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgIHZhciBfcGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgIHZtLiRzY29wZWRTbG90c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcGFyZW50IHZub2RlLiB0aGlzIGFsbG93cyByZW5kZXIgZnVuY3Rpb25zIHRvIGhhdmUgYWNjZXNzXG4gICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgIC8vIHJlbmRlciBzZWxmXG4gICAgdmFyIHZub2RlO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gbWFpbnRhaW4gYSBzdGFjayBiZWNhdWVzIGFsbCByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSB2bTtcbiAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdNdWx0aXBsZSByb290IG5vZGVzIHJldHVybmVkIGZyb20gcmVuZGVyIGZ1bmN0aW9uLiBSZW5kZXIgZnVuY3Rpb24gJyArXG4gICAgICAgICAgJ3Nob3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyBzZXQgcGFyZW50XG4gICAgdm5vZGUucGFyZW50ID0gX3BhcmVudFZub2RlO1xuICAgIHJldHVybiB2bm9kZVxuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZW5zdXJlQ3RvciAoY29tcCwgYmFzZSkge1xuICBpZiAoXG4gICAgY29tcC5fX2VzTW9kdWxlIHx8XG4gICAgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxuICApIHtcbiAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICB9XG4gIHJldHVybiBpc09iamVjdChjb21wKVxuICAgID8gYmFzZS5leHRlbmQoY29tcClcbiAgICA6IGNvbXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlciAoXG4gIGZhY3RvcnksXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICBub2RlLmFzeW5jTWV0YSA9IHsgZGF0YTogZGF0YSwgY29udGV4dDogY29udGV4dCwgY2hpbGRyZW46IGNoaWxkcmVuLCB0YWc6IHRhZyB9O1xuICByZXR1cm4gbm9kZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQgKFxuICBmYWN0b3J5LFxuICBiYXNlQ3RvclxuKSB7XG4gIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuZXJyb3JDb21wXG4gIH1cblxuICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZFxuICB9XG5cbiAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICBpZiAob3duZXIgJiYgaXNEZWYoZmFjdG9yeS5vd25lcnMpICYmIGZhY3Rvcnkub3duZXJzLmluZGV4T2Yob3duZXIpID09PSAtMSkge1xuICAgIC8vIGFscmVhZHkgcGVuZGluZ1xuICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xuICB9XG5cbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgfVxuXG4gIGlmIChvd25lciAmJiAhaXNEZWYoZmFjdG9yeS5vd25lcnMpKSB7XG4gICAgdmFyIG93bmVycyA9IGZhY3Rvcnkub3duZXJzID0gW293bmVyXTtcbiAgICB2YXIgc3luYyA9IHRydWU7XG4gICAgdmFyIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgdmFyIHRpbWVyVGltZW91dCA9IG51bGxcblxuICAgIDsob3duZXIpLiRvbignaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUob3duZXJzLCBvd25lcik7IH0pO1xuXG4gICAgdmFyIGZvcmNlUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIChvd25lcnNbaV0pLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgICBpZiAodGltZXJMb2FkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZyk7XG4gICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZXJUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyVGltZW91dCk7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgLy8gY2FjaGUgcmVzb2x2ZWRcbiAgICAgIGZhY3RvcnkucmVzb2x2ZWQgPSBlbnN1cmVDdG9yKHJlcywgYmFzZUN0b3IpO1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgLy8gKGFzeW5jIHJlc29sdmVzIGFyZSBzaGltbWVkIGFzIHN5bmNocm9ub3VzIGR1cmluZyBTU1IpXG4gICAgICBpZiAoIXN5bmMpIHtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvd25lcnMubGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBcIiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjogXCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzKSkge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UocmVzLmNvbXBvbmVudCkpIHtcbiAgICAgICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZXMuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLnRpbWVvdXQpKSB7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIFwidGltZW91dCAoXCIgKyAocmVzLnRpbWVvdXQpICsgXCJtcylcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHJlcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN5bmMgPSBmYWxzZTtcbiAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ1xuICAgICAgPyBmYWN0b3J5LmxvYWRpbmdDb21wXG4gICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCAoY2hpbGRyZW4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgIHJldHVybiBjXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyAodm0pIHtcbiAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciB0YXJnZXQ7XG5cbmZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb24oZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9mZihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0O1xuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICB2bSxcbiAgbGlzdGVuZXJzLFxuICBvbGRMaXN0ZW5lcnNcbikge1xuICB0YXJnZXQgPSB2bTtcbiAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGFsbFxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpJDEgPCBsOyBpJDErKykge1xuICAgICAgICB2bS4kb2ZmKGV2ZW50W2kkMV0sIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIGlmICghZm4pIHtcbiAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgdmFyIGNiO1xuICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjYiA9IGNic1tpXTtcbiAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHtcbiAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobG93ZXJDYXNlRXZlbnQgIT09IGV2ZW50ICYmIHZtLl9ldmVudHNbbG93ZXJDYXNlRXZlbnRdKSB7XG4gICAgICAgIHRpcChcbiAgICAgICAgICBcIkV2ZW50IFxcXCJcIiArIGxvd2VyQ2FzZUV2ZW50ICsgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIgYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCB5b3UgY2Fubm90IHVzZSBcIiArXG4gICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgIFwiWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgKGh5cGhlbmF0ZShldmVudCkpICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgIGlmIChjYnMpIHtcbiAgICAgIGNicyA9IGNicy5sZW5ndGggPiAxID8gdG9BcnJheShjYnMpIDogY2JzO1xuICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCJcIjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYnNbaV0sIHZtLCBhcmdzLCB2bSwgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcblxuZnVuY3Rpb24gc2V0QWN0aXZlSW5zdGFuY2Uodm0pIHtcbiAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICBhY3RpdmVJbnN0YW5jZSA9IHZtO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2ZUluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG5cbiAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJlbnRcbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBpZiAocGFyZW50ICYmICFvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gIH1cblxuICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuXG4gIHZtLiRjaGlsZHJlbiA9IFtdO1xuICB2bS4kcmVmcyA9IHt9O1xuXG4gIHZtLl93YXRjaGVyID0gbnVsbDtcbiAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gIHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgdmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcbiAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xuICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgIC8vIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fIGlzIGluamVjdGVkIGluIGVudHJ5IHBvaW50c1xuICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxuICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAvLyBpbml0aWFsIHJlbmRlclxuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHZtLiRlbCwgdm5vZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZXNcbiAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyhwcmV2Vm5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgLy8gdXBkYXRlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgaWYgKHByZXZFbCkge1xuICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xuICAgIH1cbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IHZtO1xuICAgIH1cbiAgICAvLyBpZiBwYXJlbnQgaXMgYW4gSE9DLCB1cGRhdGUgaXRzICRlbCBhcyB3ZWxsXG4gICAgaWYgKHZtLiR2bm9kZSAmJiB2bS4kcGFyZW50ICYmIHZtLiR2bm9kZSA9PT0gdm0uJHBhcmVudC5fdm5vZGUpIHtcbiAgICAgIHZtLiRwYXJlbnQuJGVsID0gdm0uJGVsO1xuICAgIH1cbiAgICAvLyB1cGRhdGVkIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIgdG8gZW5zdXJlIHRoYXQgY2hpbGRyZW4gYXJlXG4gICAgLy8gdXBkYXRlZCBpbiBhIHBhcmVudCdzIHVwZGF0ZWQgaG9vay5cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIudXBkYXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAodm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcbiAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICBpZiAocGFyZW50ICYmICFwYXJlbnQuX2lzQmVpbmdEZXN0cm95ZWQgJiYgIXZtLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICByZW1vdmUocGFyZW50LiRjaGlsZHJlbiwgdm0pO1xuICAgIH1cbiAgICAvLyB0ZWFyZG93biB3YXRjaGVyc1xuICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gICAgdmFyIGkgPSB2bS5fd2F0Y2hlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZtLl93YXRjaGVyc1tpXS50ZWFyZG93bigpO1xuICAgIH1cbiAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgIC8vIGZyb3plbiBvYmplY3QgbWF5IG5vdCBoYXZlIG9ic2VydmVyLlxuICAgIGlmICh2bS5fZGF0YS5fX29iX18pIHtcbiAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgfVxuICAgIC8vIGNhbGwgdGhlIGxhc3QgaG9vay4uLlxuICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXG4gICAgdm0uX19wYXRjaF9fKHZtLl92bm9kZSwgbnVsbCk7XG4gICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgIGNhbGxIb29rKHZtLCAnZGVzdHJveWVkJyk7XG4gICAgLy8gdHVybiBvZmYgYWxsIGluc3RhbmNlIGxpc3RlbmVycy5cbiAgICB2bS4kb2ZmKCk7XG4gICAgLy8gcmVtb3ZlIF9fdnVlX18gcmVmZXJlbmNlXG4gICAgaWYgKHZtLiRlbCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgIH1cbiAgICAvLyByZWxlYXNlIGNpcmN1bGFyIHJlZmVyZW5jZSAoIzY3NTkpXG4gICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBtb3VudENvbXBvbmVudCAoXG4gIHZtLFxuICBlbCxcbiAgaHlkcmF0aW5nXG4pIHtcbiAgdm0uJGVsID0gZWw7XG4gIGlmICghdm0uJG9wdGlvbnMucmVuZGVyKSB7XG4gICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgIHZhciBpZCA9IHZtLl91aWQ7XG4gICAgICB2YXIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiICsgaWQ7XG4gICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyBpZDtcblxuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICB2YXIgdm5vZGUgPSB2bS5fcmVuZGVyKCk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArIG5hbWUgKyBcIiByZW5kZXJcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZtLl91cGRhdGUodm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICBtZWFzdXJlKChcInZ1ZSBcIiArIG5hbWUgKyBcIiBwYXRjaFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgLy8gc2luY2UgdGhlIHdhdGNoZXIncyBpbml0aWFsIHBhdGNoIG1heSBjYWxsICRmb3JjZVVwZGF0ZSAoZS5nLiBpbnNpZGUgY2hpbGRcbiAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgYmVmb3JlOiBmdW5jdGlvbiBiZWZvcmUgKCkge1xuICAgICAgaWYgKHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICBoeWRyYXRpbmcgPSBmYWxzZTtcblxuICAvLyBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlLCBjYWxsIG1vdW50ZWQgb24gc2VsZlxuICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICB2bS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgfVxuICByZXR1cm4gdm1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQgKFxuICB2bSxcbiAgcHJvcHNEYXRhLFxuICBsaXN0ZW5lcnMsXG4gIHBhcmVudFZub2RlLFxuICByZW5kZXJDaGlsZHJlblxuKSB7XG4gIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luSW5hY3RpdmVUcmVlICh2bSkge1xuICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gdHJ1ZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgcHVzaFRhcmdldCgpO1xuICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgdmFyIGluZm8gPSBob29rICsgXCIgaG9va1wiO1xuICBpZiAoaGFuZGxlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBudWxsLCB2bSwgaW5mbyk7XG4gICAgfVxuICB9XG4gIGlmICh2bS5faGFzSG9va0V2ZW50KSB7XG4gICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICB9XG4gIHBvcFRhcmdldCgpO1xufVxuXG4vKiAgKi9cblxudmFyIE1BWF9VUERBVEVfQ09VTlQgPSAxMDA7XG5cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG52YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7XG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCA9IDA7XG5cbi8qKlxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgpIHtcbiAgaW5kZXggPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xuICBoYXMgPSB7fTtcbiAge1xuICAgIGNpcmN1bGFyID0ge307XG4gIH1cbiAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG59XG5cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcblxuLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cbnZhciBnZXROb3cgPSBEYXRlLm5vdztcblxuLy8gRGV0ZXJtaW5lIHdoYXQgZXZlbnQgdGltZXN0YW1wIHRoZSBicm93c2VyIGlzIHVzaW5nLiBBbm5veWluZ2x5LCB0aGVcbi8vIHRpbWVzdGFtcCBjYW4gZWl0aGVyIGJlIGhpLXJlcyAocmVsYXRpdmUgdG8gcGFnZSBsb2FkKSBvciBsb3ctcmVzXG4vLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbi8vIHNhbWUgdGltZXN0YW1wIHR5cGUgd2hlbiBzYXZpbmcgdGhlIGZsdXNoIHRpbWVzdGFtcC5cbi8vIEFsbCBJRSB2ZXJzaW9ucyB1c2UgbG93LXJlcyBldmVudCB0aW1lc3RhbXBzLCBhbmQgaGF2ZSBwcm9ibGVtYXRpYyBjbG9ja1xuLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbmlmIChpbkJyb3dzZXIgJiYgIWlzSUUpIHtcbiAgdmFyIHBlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICBpZiAoXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nICYmXG4gICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXBcbiAgKSB7XG4gICAgLy8gaWYgdGhlIGV2ZW50IHRpbWVzdGFtcCwgYWx0aG91Z2ggZXZhbHVhdGVkIEFGVEVSIHRoZSBEYXRlLm5vdygpLCBpc1xuICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lciB0aW1lc3RhbXBzIGFzXG4gICAgLy8gd2VsbC5cbiAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgY3VycmVudEZsdXNoVGltZXN0YW1wID0gZ2V0Tm93KCk7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgIH1cbiAgICBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaGFzW2lkXSA9IG51bGw7XG4gICAgd2F0Y2hlci5ydW4oKTtcbiAgICAvLyBpbiBkZXYgYnVpbGQsIGNoZWNrIGFuZCBzdG9wIGNpcmN1bGFyIHVwZGF0ZXMuXG4gICAgaWYgKGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAgICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgY2FsbEhvb2sodm0sICd1cGRhdGVkJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgLy8gc2V0dGluZyBfaW5hY3RpdmUgdG8gZmFsc2UgaGVyZSBzbyB0aGF0IGEgcmVuZGVyIGZ1bmN0aW9uIGNhblxuICAvLyByZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJvdXRlci12aWV3KVxuICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgYWN0aXZhdGVkQ2hpbGRyZW4ucHVzaCh2bSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHF1ZXVlW2ldLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhlIHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBwZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIgKHdhdGNoZXIpIHtcbiAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgaWYgKGhhc1tpZF0gPT0gbnVsbCkge1xuICAgIGhhc1tpZF0gPSB0cnVlO1xuICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBiYXNlZCBvbiBpdHMgaWRcbiAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgIHdhaXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBleHBPckZuLnRvU3RyaW5nKCk7XG4gIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICBpZiAodHlwZW9mIGV4cE9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgaWYgKCF0aGlzLmdldHRlcikge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICB7XG4gICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIgKyBoeXBoZW5hdGVkS2V5ICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICB3YXJuKFxuICAgICAgJ2RhdGEgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0OlxcbicgK1xuICAgICAgJ2h0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL2NvbXBvbmVudHMuaHRtbCNkYXRhLU11c3QtQmUtYS1GdW5jdGlvbicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gcHJveHkgZGF0YSBvbiBpbnN0YW5jZVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgdmFyIG1ldGhvZHMgPSB2bS4kb3B0aW9ucy5tZXRob2RzO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiVGhlIGRhdGEgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIiArXG4gICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XG4gICAgfVxuICB9XG4gIC8vIG9ic2VydmUgZGF0YVxuICBvYnNlcnZlKGRhdGEsIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG59XG5cbmZ1bmN0aW9uIGdldERhdGEgKGRhdGEsIHZtKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBkYXRhIGdldHRlcnNcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwiZGF0YSgpXCIpO1xuICAgIHJldHVybiB7fVxuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbnZhciBjb21wdXRlZFdhdGNoZXJPcHRpb25zID0geyBsYXp5OiB0cnVlIH07XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCAodm0sIGNvbXB1dGVkKSB7XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgd2F0Y2hlcnMgPSB2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gIHZhciBpc1NTUiA9IGlzU2VydmVyUmVuZGVyaW5nKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgIHZhciBnZXR0ZXIgPSB0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJyA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICBpZiAoZ2V0dGVyID09IG51bGwpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKFxuICAgICAgICB2bSxcbiAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgIG5vb3AsXG4gICAgICAgIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29tcG9uZW50LWRlZmluZWQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZVxuICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoa2V5IGluIHZtLiRkYXRhKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgIH0gZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVDb21wdXRlZCAoXG4gIHRhcmdldCxcbiAga2V5LFxuICB1c2VyRGVmXG4pIHtcbiAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gIGlmICh0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZik7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IG5vb3A7XG4gIH0gZWxzZSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZi5nZXQpXG4gICAgICA6IG5vb3A7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0IHx8IG5vb3A7XG4gIH1cbiAgaWYgKHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPT09IG5vb3ApIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgKFwiQ29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBhc3NpZ25lZCB0byBidXQgaXQgaGFzIG5vIHNldHRlci5cIiksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyIChrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyICgpIHtcbiAgICB2YXIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICB3YXRjaGVyLmRlcGVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR2V0dGVySW52b2tlcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHRoaXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdE1ldGhvZHMgKHZtLCBtZXRob2RzKSB7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICB7XG4gICAgZGF0YURlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAnVXNlIG5lc3RlZCBkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gICAgcHJvcHNEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHNldCA9IHNldDtcbiAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHdhdGNoID0gZnVuY3Rpb24gKFxuICAgIGV4cE9yRm4sXG4gICAgY2IsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKVxuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIHZtLCAoXCJjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXFxcIlwiICsgKHdhdGNoZXIuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuICgpIHtcbiAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkJDMgPSAwO1xuXG5mdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGEgdWlkXG4gICAgdm0uX3VpZCA9IHVpZCQzKys7XG5cbiAgICB2YXIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICB7XG4gICAgICBpbml0UHJveHkodm0pO1xuICAgIH1cbiAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgdm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZtKTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzXG4gICAgaW5pdFN0YXRlKHZtKTtcbiAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgY2FsbEhvb2sodm0sICdjcmVhdGVkJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdEludGVybmFsQ29tcG9uZW50ICh2bSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKTtcbiAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG5cbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0KSB7XG4gICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgaWYgKCFtb2RpZmllZCkgeyBtb2RpZmllZCA9IHt9OyB9XG4gICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBtb2RpZmllZFxufVxuXG5mdW5jdGlvbiBWdWUgKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFZ1ZSlcbiAgKSB7XG4gICAgd2FybignVnVlIGlzIGEgY29uc3RydWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICB9XG4gIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG5cbmluaXRNaXhpbihWdWUpO1xuc3RhdGVNaXhpbihWdWUpO1xuZXZlbnRzTWl4aW4oVnVlKTtcbmxpZmVjeWNsZU1peGluKFZ1ZSk7XG5yZW5kZXJNaXhpbihWdWUpO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFVzZSAoVnVlKSB7XG4gIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgdmFyIGluc3RhbGxlZFBsdWdpbnMgPSAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKSk7XG4gICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihwbHVnaW4pID4gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIGlmICh0eXBlb2YgcGx1Z2luLmluc3RhbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICAgIGluc3RhbGxlZFBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0TWl4aW4kMSAoVnVlKSB7XG4gIFZ1ZS5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbikge1xuICAgIHRoaXMub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG1peGluKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV4dGVuZCAoVnVlKSB7XG4gIC8qKlxuICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICogY2lkLiBUaGlzIGVuYWJsZXMgdXMgdG8gY3JlYXRlIHdyYXBwZWQgXCJjaGlsZFxuICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICovXG4gIFZ1ZS5jaWQgPSAwO1xuICB2YXIgY2lkID0gMTtcblxuICAvKipcbiAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICovXG4gIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgIGV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zIHx8IHt9O1xuICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgdmFyIGNhY2hlZEN0b3JzID0gZXh0ZW5kT3B0aW9ucy5fQ3RvciB8fCAoZXh0ZW5kT3B0aW9ucy5fQ3RvciA9IHt9KTtcbiAgICBpZiAoY2FjaGVkQ3RvcnNbU3VwZXJJZF0pIHtcbiAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgIH1cblxuICAgIHZhciBuYW1lID0gZXh0ZW5kT3B0aW9ucy5uYW1lIHx8IFN1cGVyLm9wdGlvbnMubmFtZTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICApO1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcbiAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8gYmVlbiB1cGRhdGVkLlxuICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEgKENvbXApIHtcbiAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIHtcbiAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuXG4gIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgVnVlLnV0aWwgPSB7XG4gICAgd2Fybjogd2FybixcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgfTtcblxuICBWdWUuc2V0ID0gc2V0O1xuICBWdWUuZGVsZXRlID0gZGVsO1xuICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcblxuICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgb2JzZXJ2ZShvYmopO1xuICAgIHJldHVybiBvYmpcbiAgfTtcblxuICBWdWUub3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH0pO1xuXG4gIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gIFZ1ZS5vcHRpb25zLl9iYXNlID0gVnVlO1xuXG4gIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG5cbiAgaW5pdFVzZShWdWUpO1xuICBpbml0TWl4aW4kMShWdWUpO1xuICBpbml0RXh0ZW5kKFZ1ZSk7XG4gIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgfVxufSk7XG5cbi8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ0Z1bmN0aW9uYWxSZW5kZXJDb250ZXh0Jywge1xuICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuXG5WdWUudmVyc2lvbiA9ICcyLjYuMTAnO1xuXG4vKiAgKi9cblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZhciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG5cbi8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3MnKTtcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgcmV0dXJuIChcbiAgICAoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpKSAmJiB0eXBlICE9PSAnYnV0dG9uJyB8fFxuICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAgKGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgKGF0dHIgPT09ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKVxuICApXG59O1xuXG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xuXG52YXIgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlID0gbWFrZU1hcCgnZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seScpO1xuXG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJ1xuICAgID8gJ2ZhbHNlJ1xuICAgIC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgIDoga2V5ID09PSAnY29udGVudGVkaXRhYmxlJyAmJiBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUodmFsdWUpXG4gICAgICA/IHZhbHVlXG4gICAgICA6ICd0cnVlJ1xufTtcblxudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKFxuICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgJ2RlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCwnICtcbiAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAncmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSwnICtcbiAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnXG4pO1xuXG52YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcblxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG59O1xuXG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG59O1xuXG52YXIgaXNGYWxzeUF0dHJWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2Vcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKGlzRGVmKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChpc0RlZihwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3NEYXRhIChjaGlsZCwgcGFyZW50KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICBjbGFzczogaXNEZWYoY2hpbGQuY2xhc3MpXG4gICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgOiBwYXJlbnQuY2xhc3NcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJDbGFzcyAoXG4gIHN0YXRpY0NsYXNzLFxuICBkeW5hbWljQ2xhc3Ncbikge1xuICBpZiAoaXNEZWYoc3RhdGljQ2xhc3MpIHx8IGlzRGVmKGR5bmFtaWNDbGFzcykpIHtcbiAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjb25jYXQgKGEsIGIpIHtcbiAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3MgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSlcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgc3RyaW5naWZpZWQ7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGlzRGVmKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcblxudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoXG4gICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbiwnICtcbiAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAncyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sJyArXG4gICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAnYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbiwnICtcbiAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICdjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290J1xuKTtcblxuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcChcbiAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgJ2ZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xuICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsXG4gIHRydWVcbik7XG5cbnZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07XG5cbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKVxufTtcblxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICByZXR1cm4gJ3N2ZydcbiAgfVxuICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3RoZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICByZXR1cm4gJ21hdGgnXG4gIH1cbn1cblxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCAodGFnKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXVxuICB9XG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50XG4gICAgKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpXG4gIH1cbn1cblxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qICAqL1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeSAoZWwpIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArIHRhZyArICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmVsbSwgbnVsbCwgdHJ1ZSwgY2hpbGRyZW4sIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlICh2bm9kZSkge1xuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgfVxuICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSkgeyBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICB9XG4gIH1cblxuICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSBvdmVyaGVhZFxuICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgIHZhciBpO1xuICAgIGlmIChpc0RlZihpID0gdm5vZGUuZm5TY29wZUlkKSkge1xuICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSB7XG4gICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQgZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNlKSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaSAhPT0gdm5vZGUuZm5Db250ZXh0ICYmXG4gICAgICBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZClcbiAgICApIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyAocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpIHsgaSh2bm9kZSk7IH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkgeyBjYnMuZGVzdHJveVtpXSh2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzIChwYXJlbnRFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICB9IGVsc2UgeyAvLyBUZXh0IG5vZGVcbiAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rICh2bm9kZSwgcm0pIHtcbiAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XG4gICAgICBpZiAoaXNEZWYocm0pKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlzdGVuZXJzIGNvdW50XG4gICAgICAgIHJtLmxpc3RlbmVycyArPSBsaXN0ZW5lcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkaXJlY3RseSByZW1vdmluZ1xuICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgICAgLy8gcmVjdXJzaXZlbHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGlzRGVmKGkgPSBpLl92bm9kZSkgJiYgaXNEZWYoaS5kYXRhKSkge1xuICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGksIHJtKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5yZW1vdmUpKSB7XG4gICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbiAocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgdmFyIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgIHZhciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICB2YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIHZub2RlVG9Nb3ZlLCByZWZFbG07XG5cbiAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3BlY2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAvLyB0byBlbnN1cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4gICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICB2YXIgY2FuTW92ZSA9ICFyZW1vdmVPbmx5O1xuXG4gICAge1xuICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKG5ld0NoKTtcbiAgICB9XG5cbiAgICB3aGlsZSAob2xkU3RhcnRJZHggPD0gb2xkRW5kSWR4ICYmIG5ld1N0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgaWYgKGlzVW5kZWYob2xkU3RhcnRWbm9kZSkpIHtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkRW5kVm5vZGUpKSB7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCBsZWZ0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkS2V5VG9JZHgpKSB7IG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpOyB9XG4gICAgICAgIGlkeEluT2xkID0gaXNEZWYobmV3U3RhcnRWbm9kZS5rZXkpXG4gICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkgeyAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICBwYXRjaFZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzIChjaGlsZHJlbikge1xuICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgIGlmIChpc0RlZihrZXkpKSB7XG4gICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIgKyBrZXkgKyBcIicuIFRoaXMgbWF5IGNhdXNlIGFuIHVwZGF0ZSBlcnJvci5cIiksXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWVuS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRJZHhJbk9sZCAobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgdmFyIGMgPSBvbGRDaFtpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpIHsgcmV0dXJuIGkgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoVm5vZGUgKFxuICAgIG9sZFZub2RlLFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4LFxuICAgIHJlbW92ZU9ubHlcbiAgKSB7XG4gICAgaWYgKG9sZFZub2RlID09PSB2bm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBlbG0gPSB2bm9kZS5lbG0gPSBvbGRWbm9kZS5lbG07XG5cbiAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgIGlmIChpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyByZXVzZSBlbGVtZW50IGZvciBzdGF0aWMgdHJlZXMuXG4gICAgLy8gbm90ZSB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIHZub2RlIGlzIGNsb25lZCAtXG4gICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gcmVzZXQgYnkgdGhlIGhvdC1yZWxvYWQtYXBpIGFuZCB3ZSBuZWVkIHRvIGRvIGEgcHJvcGVyIHJlLXJlbmRlci5cbiAgICBpZiAoaXNUcnVlKHZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgaXNUcnVlKG9sZFZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgdm5vZGUua2V5ID09PSBvbGRWbm9kZS5rZXkgJiZcbiAgICAgIChpc1RydWUodm5vZGUuaXNDbG9uZWQpIHx8IGlzVHJ1ZSh2bm9kZS5pc09uY2UpKVxuICAgICkge1xuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBpO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucHJlcGF0Y2gpKSB7XG4gICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgdmFyIGNoID0gdm5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy51cGRhdGUubGVuZ3RoOyArK2kpIHsgY2JzLnVwZGF0ZVtpXShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkudXBkYXRlKSkgeyBpKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRDaCkgJiYgaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChvbGRDaCAhPT0gY2gpIHsgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7IH1cbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkgeyBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpOyB9XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHYtaHRtbCBhbmQgZG9tUHJvcHM6IGlubmVySFRNTFxuICAgICAgICAgIGlmIChpc0RlZihpID0gZGF0YSkgJiYgaXNEZWYoaSA9IGkuZG9tUHJvcHMpICYmIGlzRGVmKGkgPSBpLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc2VydmVyIGlubmVySFRNTDogJywgaSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSB8fCAhaHlkcmF0ZShjaGlsZE5vZGUsIGNoaWxkcmVuW2kkMV0sIGluc2VydGVkVm5vZGVRdWV1ZSwgaW5WUHJlKSkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFjdHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuTWF0Y2ggfHwgY2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICB2YXIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICB2YXIgcGFyZW50RWxtID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgIGNyZWF0ZUVsbShcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSkpIHtcbiAgICAgICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50YWcpKSB7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpc0luaXRpYWxQYXRjaCk7XG4gICAgcmV0dXJuIHZub2RlLmVsbVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgZGlyZWN0aXZlcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICB1cGRhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXMgKHZub2RlKSB7XG4gICAgdXBkYXRlRGlyZWN0aXZlcyh2bm9kZSwgZW1wdHlOb2RlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdXBkYXRlRGlyZWN0aXZlcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMgfHwgdm5vZGUuZGF0YS5kaXJlY3RpdmVzKSB7XG4gICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgaXNDcmVhdGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEodm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcblxuICB2YXIgZGlyc1dpdGhJbnNlcnQgPSBbXTtcbiAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcbiAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgIGlmICghb2xkRGlyKSB7XG4gICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICBjYWxsSG9vayQxKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5pbnNlcnRlZCkge1xuICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICBkaXIub2xkVmFsdWUgPSBvbGREaXIudmFsdWU7XG4gICAgICBkaXIub2xkQXJnID0gb2xkRGlyLmFyZztcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICBjYWxsSG9vayQxKG9sZERpcnNba2V5XSwgJ3VuYmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxIChcbiAgZGlycyxcbiAgdm1cbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFkaXJzKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIHZhciBpLCBkaXI7XG4gIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZGlyLm1vZGlmaWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgIH1cbiAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICBkaXIuZGVmID0gcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgcmV0dXJuIGRpci5yYXdOYW1lIHx8ICgoZGlyLm5hbWUpICsgXCIuXCIgKyAoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSlcbn1cblxuZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGJhc2VNb2R1bGVzID0gW1xuICByZWYsXG4gIGRpcmVjdGl2ZXNcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICB9XG4gIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgLy8gZS5nLiA8b3B0aW9uIGRpc2FibGVkPlNlbGVjdCBvbmU8L29wdGlvbj5cbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCdcbiAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgOiBrZXk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2VTZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyAjNzEzODogSUUxMCAmIDExIGZpcmVzIGlucHV0IGV2ZW50IHdoZW4gc2V0dGluZyBwbGFjZWhvbGRlciBvblxuICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoXG4gICAgICBpc0lFICYmICFpc0lFOSAmJlxuICAgICAgZWwudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJlxuICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmIHZhbHVlICE9PSAnJyAmJiAhZWwuX19pZXBoXG4gICAgKSB7XG4gICAgICB2YXIgYmxvY2tlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICB9O1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZWwuX19pZXBoID0gdHJ1ZTsgLyogSUUgcGxhY2Vob2xkZXIgcGF0Y2hlZCAqL1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxudmFyIGF0dHJzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICBpZiAoXG4gICAgaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgaXNVbmRlZihvbGREYXRhKSB8fCAoXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBjbGFzc1xuICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgfVxufVxuXG52YXIga2xhc3MgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn07XG5cbi8qICAqL1xuXG52YXIgdmFsaWREaXZpc2lvbkNoYXJSRSA9IC9bXFx3KS4rXFwtXyRcXF1dLztcblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzIChleHApIHtcbiAgdmFyIGluU2luZ2xlID0gZmFsc2U7XG4gIHZhciBpbkRvdWJsZSA9IGZhbHNlO1xuICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICB2YXIgaW5SZWdleCA9IGZhbHNlO1xuICB2YXIgY3VybHkgPSAwO1xuICB2YXIgc3F1YXJlID0gMDtcbiAgdmFyIHBhcmVuID0gMDtcbiAgdmFyIGxhc3RGaWx0ZXJJbmRleCA9IDA7XG4gIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBleHAubGVuZ3RoOyBpKyspIHtcbiAgICBwcmV2ID0gYztcbiAgICBjID0gZXhwLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGluU2luZ2xlKSB7XG4gICAgICBpZiAoYyA9PT0gMHgyNyAmJiBwcmV2ICE9PSAweDVDKSB7IGluU2luZ2xlID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKGluRG91YmxlKSB7XG4gICAgICBpZiAoYyA9PT0gMHgyMiAmJiBwcmV2ICE9PSAweDVDKSB7IGluRG91YmxlID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKGluVGVtcGxhdGVTdHJpbmcpIHtcbiAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NUMpIHsgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChpblJlZ2V4KSB7XG4gICAgICBpZiAoYyA9PT0gMHgyZiAmJiBwcmV2ICE9PSAweDVDKSB7IGluUmVnZXggPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjID09PSAweDdDICYmIC8vIHBpcGVcbiAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3QyAmJlxuICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdDICYmXG4gICAgICAhY3VybHkgJiYgIXNxdWFyZSAmJiAhcGFyZW5cbiAgICApIHtcbiAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gZmlyc3QgZmlsdGVyLCBlbmQgb2YgZXhwcmVzc2lvblxuICAgICAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwdXNoRmlsdGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICBjYXNlIDB4MjI6IGluRG91YmxlID0gdHJ1ZTsgYnJlYWsgICAgICAgICAvLyBcIlxuICAgICAgICBjYXNlIDB4Mjc6IGluU2luZ2xlID0gdHJ1ZTsgYnJlYWsgICAgICAgICAvLyAnXG4gICAgICAgIGNhc2UgMHg2MDogaW5UZW1wbGF0ZVN0cmluZyA9IHRydWU7IGJyZWFrIC8vIGBcbiAgICAgICAgY2FzZSAweDI4OiBwYXJlbisrOyBicmVhayAgICAgICAgICAgICAgICAgLy8gKFxuICAgICAgICBjYXNlIDB4Mjk6IHBhcmVuLS07IGJyZWFrICAgICAgICAgICAgICAgICAvLyApXG4gICAgICAgIGNhc2UgMHg1Qjogc3F1YXJlKys7IGJyZWFrICAgICAgICAgICAgICAgIC8vIFtcbiAgICAgICAgY2FzZSAweDVEOiBzcXVhcmUtLTsgYnJlYWsgICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICBjYXNlIDB4N0I6IGN1cmx5Kys7IGJyZWFrICAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgIGNhc2UgMHg3RDogY3VybHktLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICAgIGlmIChjID09PSAweDJmKSB7IC8vIC9cbiAgICAgICAgdmFyIGogPSBpIC0gMTtcbiAgICAgICAgdmFyIHAgPSAodm9pZCAwKTtcbiAgICAgICAgLy8gZmluZCBmaXJzdCBub24td2hpdGVzcGFjZSBwcmV2IGNoYXJcbiAgICAgICAgZm9yICg7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XG4gICAgICAgICAgaWYgKHAgIT09ICcgJykgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwIHx8ICF2YWxpZERpdmlzaW9uQ2hhclJFLnRlc3QocCkpIHtcbiAgICAgICAgICBpblJlZ2V4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgfSBlbHNlIGlmIChsYXN0RmlsdGVySW5kZXggIT09IDApIHtcbiAgICBwdXNoRmlsdGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoRmlsdGVyICgpIHtcbiAgICAoZmlsdGVycyB8fCAoZmlsdGVycyA9IFtdKSkucHVzaChleHAuc2xpY2UobGFzdEZpbHRlckluZGV4LCBpKS50cmltKCkpO1xuICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICB9XG5cbiAgaWYgKGZpbHRlcnMpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwcmVzc2lvbiA9IHdyYXBGaWx0ZXIoZXhwcmVzc2lvbiwgZmlsdGVyc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cHJlc3Npb25cbn1cblxuZnVuY3Rpb24gd3JhcEZpbHRlciAoZXhwLCBmaWx0ZXIpIHtcbiAgdmFyIGkgPSBmaWx0ZXIuaW5kZXhPZignKCcpO1xuICBpZiAoaSA8IDApIHtcbiAgICAvLyBfZjogcmVzb2x2ZUZpbHRlclxuICAgIHJldHVybiAoXCJfZihcXFwiXCIgKyBmaWx0ZXIgKyBcIlxcXCIpKFwiICsgZXhwICsgXCIpXCIpXG4gIH0gZWxzZSB7XG4gICAgdmFyIG5hbWUgPSBmaWx0ZXIuc2xpY2UoMCwgaSk7XG4gICAgdmFyIGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xuICAgIHJldHVybiAoXCJfZihcXFwiXCIgKyBuYW1lICsgXCJcXFwiKShcIiArIGV4cCArIChhcmdzICE9PSAnKScgPyAnLCcgKyBhcmdzIDogYXJncykpXG4gIH1cbn1cblxuLyogICovXG5cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuZnVuY3Rpb24gYmFzZVdhcm4gKG1zZywgcmFuZ2UpIHtcbiAgY29uc29sZS5lcnJvcigoXCJbVnVlIGNvbXBpbGVyXTogXCIgKyBtc2cpKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuZnVuY3Rpb24gcGx1Y2tNb2R1bGVGdW5jdGlvbiAoXG4gIG1vZHVsZXMsXG4gIGtleVxuKSB7XG4gIHJldHVybiBtb2R1bGVzXG4gICAgPyBtb2R1bGVzLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbVtrZXldOyB9KS5maWx0ZXIoZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH0pXG4gICAgOiBbXVxufVxuXG5mdW5jdGlvbiBhZGRQcm9wIChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gIChlbC5wcm9wcyB8fCAoZWwucHJvcHMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgdmFyIGF0dHJzID0gZHluYW1pY1xuICAgID8gKGVsLmR5bmFtaWNBdHRycyB8fCAoZWwuZHluYW1pY0F0dHJzID0gW10pKVxuICAgIDogKGVsLmF0dHJzIHx8IChlbC5hdHRycyA9IFtdKSk7XG4gIGF0dHJzLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbi8vIGFkZCBhIHJhdyBhdHRyICh1c2UgdGhpcyBpbiBwcmVUcmFuc2Zvcm1zKVxuZnVuY3Rpb24gYWRkUmF3QXR0ciAoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSkge1xuICBlbC5hdHRyc01hcFtuYW1lXSA9IHZhbHVlO1xuICBlbC5hdHRyc0xpc3QucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSwgcmFuZ2UpKTtcbn1cblxuZnVuY3Rpb24gYWRkRGlyZWN0aXZlIChcbiAgZWwsXG4gIG5hbWUsXG4gIHJhd05hbWUsXG4gIHZhbHVlLFxuICBhcmcsXG4gIGlzRHluYW1pY0FyZyxcbiAgbW9kaWZpZXJzLFxuICByYW5nZVxuKSB7XG4gIChlbC5kaXJlY3RpdmVzIHx8IChlbC5kaXJlY3RpdmVzID0gW10pKS5wdXNoKHJhbmdlU2V0SXRlbSh7XG4gICAgbmFtZTogbmFtZSxcbiAgICByYXdOYW1lOiByYXdOYW1lLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBhcmc6IGFyZyxcbiAgICBpc0R5bmFtaWNBcmc6IGlzRHluYW1pY0FyZyxcbiAgICBtb2RpZmllcnM6IG1vZGlmaWVyc1xuICB9LCByYW5nZSkpO1xuICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwZW5kTW9kaWZpZXJNYXJrZXIgKHN5bWJvbCwgbmFtZSwgZHluYW1pYykge1xuICByZXR1cm4gZHluYW1pY1xuICAgID8gKFwiX3AoXCIgKyBuYW1lICsgXCIsXFxcIlwiICsgc3ltYm9sICsgXCJcXFwiKVwiKVxuICAgIDogc3ltYm9sICsgbmFtZSAvLyBtYXJrIHRoZSBldmVudCBhcyBjYXB0dXJlZFxufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyIChcbiAgZWwsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICBtb2RpZmllcnMsXG4gIGltcG9ydGFudCxcbiAgd2FybixcbiAgcmFuZ2UsXG4gIGR5bmFtaWNcbikge1xuICBtb2RpZmllcnMgPSBtb2RpZmllcnMgfHwgZW1wdHlPYmplY3Q7XG4gIC8vIHdhcm4gcHJldmVudCBhbmQgcGFzc2l2ZSBtb2RpZmllclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAgIHdhcm4gJiZcbiAgICBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZVxuICApIHtcbiAgICB3YXJuKFxuICAgICAgJ3Bhc3NpdmUgYW5kIHByZXZlbnQgY2FuXFwndCBiZSB1c2VkIHRvZ2V0aGVyLiAnICtcbiAgICAgICdQYXNzaXZlIGhhbmRsZXIgY2FuXFwndCBwcmV2ZW50IGRlZmF1bHQgZXZlbnQuJyxcbiAgICAgIHJhbmdlXG4gICAgKTtcbiAgfVxuXG4gIC8vIG5vcm1hbGl6ZSBjbGljay5yaWdodCBhbmQgY2xpY2subWlkZGxlIHNpbmNlIHRoZXkgZG9uJ3QgYWN0dWFsbHkgZmlyZVxuICAvLyB0aGlzIGlzIHRlY2huaWNhbGx5IGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBhdCBsZWFzdCBmb3Igbm93IGJyb3dzZXJzIGFyZVxuICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cbiAgaWYgKG1vZGlmaWVycy5yaWdodCkge1xuICAgIGlmIChkeW5hbWljKSB7XG4gICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nY29udGV4dG1lbnUnOihcIiArIG5hbWUgKyBcIilcIjtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgIG5hbWUgPSAnY29udGV4dG1lbnUnO1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9kaWZpZXJzLm1pZGRsZSkge1xuICAgIGlmIChkeW5hbWljKSB7XG4gICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiICsgbmFtZSArIFwiKVwiO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgbmFtZSA9ICdtb3VzZXVwJztcbiAgICB9XG4gIH1cblxuICAvLyBjaGVjayBjYXB0dXJlIG1vZGlmaWVyXG4gIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMuY2FwdHVyZTtcbiAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCchJywgbmFtZSwgZHluYW1pYyk7XG4gIH1cbiAgaWYgKG1vZGlmaWVycy5vbmNlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5vbmNlO1xuICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJ34nLCBuYW1lLCBkeW5hbWljKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKG1vZGlmaWVycy5wYXNzaXZlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5wYXNzaXZlO1xuICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyYnLCBuYW1lLCBkeW5hbWljKTtcbiAgfVxuXG4gIHZhciBldmVudHM7XG4gIGlmIChtb2RpZmllcnMubmF0aXZlKSB7XG4gICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgZXZlbnRzID0gZWwubmF0aXZlRXZlbnRzIHx8IChlbC5uYXRpdmVFdmVudHMgPSB7fSk7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gIH1cblxuICB2YXIgbmV3SGFuZGxlciA9IHJhbmdlU2V0SXRlbSh7IHZhbHVlOiB2YWx1ZS50cmltKCksIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpO1xuICBpZiAobW9kaWZpZXJzICE9PSBlbXB0eU9iamVjdCkge1xuICAgIG5ld0hhbmRsZXIubW9kaWZpZXJzID0gbW9kaWZpZXJzO1xuICB9XG5cbiAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcnMpKSB7XG4gICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gIH0gZWxzZSBpZiAoaGFuZGxlcnMpIHtcbiAgICBldmVudHNbbmFtZV0gPSBpbXBvcnRhbnQgPyBbbmV3SGFuZGxlciwgaGFuZGxlcnNdIDogW2hhbmRsZXJzLCBuZXdIYW5kbGVyXTtcbiAgfSBlbHNlIHtcbiAgICBldmVudHNbbmFtZV0gPSBuZXdIYW5kbGVyO1xuICB9XG5cbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UmF3QmluZGluZ0F0dHIgKFxuICBlbCxcbiAgbmFtZVxuKSB7XG4gIHJldHVybiBlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgIGVsLnJhd0F0dHJzTWFwWyd2LWJpbmQ6JyArIG5hbWVdIHx8XG4gICAgZWwucmF3QXR0cnNNYXBbbmFtZV1cbn1cblxuZnVuY3Rpb24gZ2V0QmluZGluZ0F0dHIgKFxuICBlbCxcbiAgbmFtZSxcbiAgZ2V0U3RhdGljXG4pIHtcbiAgdmFyIGR5bmFtaWNWYWx1ZSA9XG4gICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJzonICsgbmFtZSkgfHxcbiAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1iaW5kOicgKyBuYW1lKTtcbiAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmlsdGVycyhkeW5hbWljVmFsdWUpXG4gIH0gZWxzZSBpZiAoZ2V0U3RhdGljICE9PSBmYWxzZSkge1xuICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RhdGljVmFsdWUpXG4gICAgfVxuICB9XG59XG5cbi8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbi8vIGRvZXNuJ3QgZ2V0IHByb2Nlc3NlZCBieSBwcm9jZXNzQXR0cnMuXG4vLyBCeSBkZWZhdWx0IGl0IGRvZXMgTk9UIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAgKGF0dHJzTWFwKSBiZWNhdXNlIHRoZSBtYXAgaXNcbi8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHIgKFxuICBlbCxcbiAgbmFtZSxcbiAgcmVtb3ZlRnJvbU1hcFxuKSB7XG4gIHZhciB2YWw7XG4gIGlmICgodmFsID0gZWwuYXR0cnNNYXBbbmFtZV0pICE9IG51bGwpIHtcbiAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAobGlzdFtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAocmVtb3ZlRnJvbU1hcCkge1xuICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcbiAgfVxuICByZXR1cm4gdmFsXG59XG5cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IChcbiAgZWwsXG4gIG5hbWVcbikge1xuICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICBpZiAobmFtZS50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuIGF0dHJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmFuZ2VTZXRJdGVtIChcbiAgaXRlbSxcbiAgcmFuZ2Vcbikge1xuICBpZiAocmFuZ2UpIHtcbiAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgaXRlbS5zdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgIH1cbiAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgIGl0ZW0uZW5kID0gcmFuZ2UuZW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBvbmVudCB2LW1vZGVsXG4gKi9cbmZ1bmN0aW9uIGdlbkNvbXBvbmVudE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFyIHRyaW0gPSByZWYudHJpbTtcblxuICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gYmFzZVZhbHVlRXhwcmVzc2lvbjtcbiAgaWYgKHRyaW0pIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPVxuICAgICAgXCIodHlwZW9mIFwiICsgYmFzZVZhbHVlRXhwcmVzc2lvbiArIFwiID09PSAnc3RyaW5nJ1wiICtcbiAgICAgIFwiPyBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIi50cmltKClcIiArXG4gICAgICBcIjogXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgaWYgKG51bWJlcikge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICB2YXIgYXNzaWdubWVudCA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuXG4gIGVsLm1vZGVsID0ge1xuICAgIHZhbHVlOiAoXCIoXCIgKyB2YWx1ZSArIFwiKVwiKSxcbiAgICBleHByZXNzaW9uOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgY2FsbGJhY2s6IChcImZ1bmN0aW9uIChcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIikge1wiICsgYXNzaWdubWVudCArIFwifVwiKVxuICB9O1xufVxuXG4vKipcbiAqIENyb3NzLXBsYXRmb3JtIGNvZGVnZW4gaGVscGVyIGZvciBnZW5lcmF0aW5nIHYtbW9kZWwgdmFsdWUgYXNzaWdubWVudCBjb2RlLlxuICovXG5mdW5jdGlvbiBnZW5Bc3NpZ25tZW50Q29kZSAoXG4gIHZhbHVlLFxuICBhc3NpZ25tZW50XG4pIHtcbiAgdmFyIHJlcyA9IHBhcnNlTW9kZWwodmFsdWUpO1xuICBpZiAocmVzLmtleSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1lbnQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcIiRzZXQoXCIgKyAocmVzLmV4cCkgKyBcIiwgXCIgKyAocmVzLmtleSkgKyBcIiwgXCIgKyBhc3NpZ25tZW50ICsgXCIpXCIpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIHYtbW9kZWwgZXhwcmVzc2lvbiBpbnRvIGEgYmFzZSBwYXRoIGFuZCBhIGZpbmFsIGtleSBzZWdtZW50LlxuICogSGFuZGxlcyBib3RoIGRvdC1wYXRoIGFuZCBwb3NzaWJsZSBzcXVhcmUgYnJhY2tldHMuXG4gKlxuICogUG9zc2libGUgY2FzZXM6XG4gKlxuICogLSB0ZXN0XG4gKiAtIHRlc3Rba2V5XVxuICogLSB0ZXN0W3Rlc3QxW2tleV1dXG4gKiAtIHRlc3RbXCJhXCJdW2tleV1cbiAqIC0geHh4LnRlc3RbYVthXS50ZXN0MVtrZXldXVxuICogLSB0ZXN0Lnh4eC5hW1wiYXNhXCJdW3Rlc3QxW2tleV1dXG4gKlxuICovXG5cbnZhciBsZW4sIHN0ciwgY2hyLCBpbmRleCQxLCBleHByZXNzaW9uUG9zLCBleHByZXNzaW9uRW5kUG9zO1xuXG5cblxuZnVuY3Rpb24gcGFyc2VNb2RlbCAodmFsKSB7XG4gIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL3B1bGwvNzczMFxuICAvLyBhbGxvdyB2LW1vZGVsPVwib2JqLnZhbCBcIiAodHJhaWxpbmcgd2hpdGVzcGFjZSlcbiAgdmFsID0gdmFsLnRyaW0oKTtcbiAgbGVuID0gdmFsLmxlbmd0aDtcblxuICBpZiAodmFsLmluZGV4T2YoJ1snKSA8IDAgfHwgdmFsLmxhc3RJbmRleE9mKCddJykgPCBsZW4gLSAxKSB7XG4gICAgaW5kZXgkMSA9IHZhbC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChpbmRleCQxID4gLTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cDogdmFsLnNsaWNlKDAsIGluZGV4JDEpLFxuICAgICAgICBrZXk6ICdcIicgKyB2YWwuc2xpY2UoaW5kZXgkMSArIDEpICsgJ1wiJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbCxcbiAgICAgICAga2V5OiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RyID0gdmFsO1xuICBpbmRleCQxID0gZXhwcmVzc2lvblBvcyA9IGV4cHJlc3Npb25FbmRQb3MgPSAwO1xuXG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gMHg1Qikge1xuICAgICAgcGFyc2VCcmFja2V0KGNocik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICBrZXk6IHZhbC5zbGljZShleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0ICgpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgkMSlcbn1cblxuZnVuY3Rpb24gZW9mICgpIHtcbiAgcmV0dXJuIGluZGV4JDEgPj0gbGVuXG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQgKGNocikge1xuICByZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgyN1xufVxuXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXQgKGNocikge1xuICB2YXIgaW5CcmFja2V0ID0gMTtcbiAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChjaHIgPT09IDB4NUIpIHsgaW5CcmFja2V0Kys7IH1cbiAgICBpZiAoY2hyID09PSAweDVEKSB7IGluQnJhY2tldC0tOyB9XG4gICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgZXhwcmVzc2lvbkVuZFBvcyA9IGluZGV4JDE7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgd2hpbGUgKCFlb2YoKSkge1xuICAgIGNociA9IG5leHQoKTtcbiAgICBpZiAoY2hyID09PSBzdHJpbmdRdW90ZSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciB3YXJuJDE7XG5cbi8vIGluIHNvbWUgY2FzZXMsIHRoZSBldmVudCB1c2VkIGhhcyB0byBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWVcbi8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG52YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbnZhciBDSEVDS0JPWF9SQURJT19UT0tFTiA9ICdfX2MnO1xuXG5mdW5jdGlvbiBtb2RlbCAoXG4gIGVsLFxuICBkaXIsXG4gIF93YXJuXG4pIHtcbiAgd2FybiQxID0gX3dhcm47XG4gIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gIHZhciB0YWcgPSBlbC50YWc7XG4gIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICB7XG4gICAgLy8gaW5wdXRzIHdpdGggdHlwZT1cImZpbGVcIiBhcmUgcmVhZCBvbmx5IGFuZCBzZXR0aW5nIHRoZSBpbnB1dCdzXG4gICAgLy8gdmFsdWUgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdmaWxlJykge1xuICAgICAgd2FybiQxKFxuICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIgK1xuICAgICAgICBcIkZpbGUgaW5wdXRzIGFyZSByZWFkIG9ubHkuIFVzZSBhIHYtb246Y2hhbmdlIGxpc3RlbmVyIGluc3RlYWQuXCIsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICBnZW5TZWxlY3QoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgZ2VuQ2hlY2tib3hNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgZ2VuRGVmYXVsdE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICghY29uZmlnLmlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2Uge1xuICAgIHdhcm4kMShcbiAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgXCJ2LW1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBlbGVtZW50IHR5cGUuIFwiICtcbiAgICAgICdJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBjb250ZW50ZWRpdGFibGUsIGl0XFwncyByZWNvbW1lbmRlZCB0byAnICtcbiAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsXG4gICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSBydW50aW1lIGRpcmVjdGl2ZSBtZXRhZGF0YVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZW5DaGVja2JveE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICB2YXIgdHJ1ZVZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndHJ1ZS12YWx1ZScpIHx8ICd0cnVlJztcbiAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gIGFkZFByb3AoZWwsICdjaGVja2VkJyxcbiAgICBcIkFycmF5LmlzQXJyYXkoXCIgKyB2YWx1ZSArIFwiKVwiICtcbiAgICBcIj9faShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIik+LTFcIiArIChcbiAgICAgIHRydWVWYWx1ZUJpbmRpbmcgPT09ICd0cnVlJ1xuICAgICAgICA/IChcIjooXCIgKyB2YWx1ZSArIFwiKVwiKVxuICAgICAgICA6IChcIjpfcShcIiArIHZhbHVlICsgXCIsXCIgKyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpXCIpXG4gICAgKVxuICApO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJyxcbiAgICBcInZhciAkJGE9XCIgKyB2YWx1ZSArIFwiLFwiICtcbiAgICAgICAgJyQkZWw9JGV2ZW50LnRhcmdldCwnICtcbiAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIiArIHRydWVWYWx1ZUJpbmRpbmcgKyBcIik6KFwiICsgZmFsc2VWYWx1ZUJpbmRpbmcgKyBcIik7XCIgK1xuICAgICdpZihBcnJheS5pc0FycmF5KCQkYSkpeycgK1xuICAgICAgXCJ2YXIgJCR2PVwiICsgKG51bWJlciA/ICdfbignICsgdmFsdWVCaW5kaW5nICsgJyknIDogdmFsdWVCaW5kaW5nKSArIFwiLFwiICtcbiAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgXCJpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuY29uY2F0KFskJHZdKScpKSArIFwiKX1cIiArXG4gICAgICBcImVsc2V7JCRpPi0xJiYoXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKScpKSArIFwiKX1cIiArXG4gICAgXCJ9ZWxzZXtcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpKSArIFwifVwiLFxuICAgIG51bGwsIHRydWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2VuUmFkaW9Nb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgdmFsdWVCaW5kaW5nID0gbnVtYmVyID8gKFwiX24oXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIilcIikgOiB2YWx1ZUJpbmRpbmc7XG4gIGFkZFByb3AoZWwsICdjaGVja2VkJywgKFwiX3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpKTtcbiAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUJpbmRpbmcpLCBudWxsLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU2VsZWN0IChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICBcIi5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucyxmdW5jdGlvbihvKXtyZXR1cm4gby5zZWxlY3RlZH0pXCIgK1xuICAgIFwiLm1hcChmdW5jdGlvbihvKXt2YXIgdmFsID0gXFxcIl92YWx1ZVxcXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZTtcIiArXG4gICAgXCJyZXR1cm4gXCIgKyAobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcpICsgXCJ9KVwiO1xuXG4gIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gIHZhciBjb2RlID0gXCJ2YXIgJCRzZWxlY3RlZFZhbCA9IFwiICsgc2VsZWN0ZWRWYWwgKyBcIjtcIjtcbiAgY29kZSA9IGNvZGUgKyBcIiBcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuXG4gIC8vIHdhcm4gaWYgdi1iaW5kOnZhbHVlIGNvbmZsaWN0cyB3aXRoIHYtbW9kZWxcbiAgLy8gZXhjZXB0IGZvciBpbnB1dHMgd2l0aCB2LWJpbmQ6dHlwZVxuICB7XG4gICAgdmFyIHZhbHVlJDEgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gfHwgZWwuYXR0cnNNYXBbJzp2YWx1ZSddO1xuICAgIHZhciB0eXBlQmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAgIGlmICh2YWx1ZSQxICYmICF0eXBlQmluZGluZykge1xuICAgICAgdmFyIGJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gPyAndi1iaW5kOnZhbHVlJyA6ICc6dmFsdWUnO1xuICAgICAgd2FybiQxKFxuICAgICAgICBiaW5kaW5nICsgXCI9XFxcIlwiICsgdmFsdWUkMSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCB2LW1vZGVsIG9uIHRoZSBzYW1lIGVsZW1lbnQgXCIgK1xuICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwW2JpbmRpbmddXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhciByZWYgPSBtb2RpZmllcnMgfHwge307XG4gIHZhciBsYXp5ID0gcmVmLmxhenk7XG4gIHZhciBudW1iZXIgPSByZWYubnVtYmVyO1xuICB2YXIgdHJpbSA9IHJlZi50cmltO1xuICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICB2YXIgZXZlbnQgPSBsYXp5XG4gICAgPyAnY2hhbmdlJ1xuICAgIDogdHlwZSA9PT0gJ3JhbmdlJ1xuICAgICAgPyBSQU5HRV9UT0tFTlxuICAgICAgOiAnaW5wdXQnO1xuXG4gIHZhciB2YWx1ZUV4cHJlc3Npb24gPSAnJGV2ZW50LnRhcmdldC52YWx1ZSc7XG4gIGlmICh0cmltKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKVwiO1xuICB9XG4gIGlmIChudW1iZXIpIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiICsgdmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cblxuICB2YXIgY29kZSA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuICBpZiAobmVlZENvbXBvc2l0aW9uR3VhcmQpIHtcbiAgICBjb2RlID0gXCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIgKyBjb2RlO1xuICB9XG5cbiAgYWRkUHJvcChlbCwgJ3ZhbHVlJywgKFwiKFwiICsgdmFsdWUgKyBcIilcIikpO1xuICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gIGlmICh0cmltIHx8IG51bWJlcikge1xuICAgIGFkZEhhbmRsZXIoZWwsICdibHVyJywgJyRmb3JjZVVwZGF0ZSgpJyk7XG4gIH1cbn1cblxuLyogICovXG5cbi8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2Vcbi8vIHRoZSB3aG9sZSBwb2ludCBpcyBlbnN1cmluZyB0aGUgdi1tb2RlbCBjYWxsYmFjayBnZXRzIGNhbGxlZCBiZWZvcmVcbi8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudHMgKG9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgIC8vIElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICB2YXIgZXZlbnQgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgfVxuICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAvLyBhZnRlciAyLjUuIEtlZXBpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBnZW5lcmF0ZWQgY29kZSBmcm9tIDwgMi40XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0JDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlciAoKSB7XG4gICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICByZW1vdmUkMihldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuLy8gc2FmZSB0byBleGNsdWRlLlxudmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgbmFtZSxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgcGFzc2l2ZVxuKSB7XG4gIC8vIGFzeW5jIGVkZ2UgY2FzZSAjNjU2NjogaW5uZXIgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcGF0Y2gsIGV2ZW50IGhhbmRsZXJcbiAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gIC8vIHRoZSBzb2x1dGlvbiBpcyBzaW1wbGU6IHdlIHNhdmUgdGhlIHRpbWVzdGFtcCB3aGVuIGEgaGFuZGxlciBpcyBhdHRhY2hlZCxcbiAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gIGlmICh1c2VNaWNyb3Rhc2tGaXgpIHtcbiAgICB2YXIgYXR0YWNoZWRUaW1lc3RhbXAgPSBjdXJyZW50Rmx1c2hUaW1lc3RhbXA7XG4gICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gb3JpZ2luYWwuX3dyYXBwZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAvLyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgbmV0IGluIGNhc2UgZXZlbnQudGltZVN0YW1wIGlzIHVucmVsaWFibGUgaW5cbiAgICAgICAgLy8gY2VydGFpbiB3ZWlyZCBlbnZpcm9ubWVudHMuLi5cbiAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAvLyBldmVudCBpcyBmaXJlZCBhZnRlciBoYW5kbGVyIGF0dGFjaG1lbnRcbiAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXAgfHxcbiAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgIC8vICM5NDYyIGlPUyA5IGJ1ZzogZXZlbnQudGltZVN0YW1wIGlzIDAgYWZ0ZXIgaGlzdG9yeS5wdXNoU3RhdGVcbiAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgLy8gIzk0NDggYmFpbCBpZiBldmVudCBpcyBmaXJlZCBpbiBhbm90aGVyIGRvY3VtZW50IGluIGEgbXVsdGktcGFnZVxuICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICBlLnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBzdXBwb3J0c1Bhc3NpdmVcbiAgICAgID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH1cbiAgICAgIDogY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmUkMiAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIF90YXJnZXRcbikge1xuICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIuX3dyYXBwZXIgfHwgaGFuZGxlcixcbiAgICBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkJDEsIHJlbW92ZSQyLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bm9kZS5jb250ZXh0KTtcbiAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG59XG5cbnZhciBldmVudHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVyc1xufTtcblxuLyogICovXG5cbnZhciBzdmdDb250YWluZXI7XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGlmICh2bm9kZS5jaGlsZHJlbikgeyB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwOyB9XG4gICAgICBpZiAoY3VyID09PSBvbGRQcm9wc1trZXldKSB7IGNvbnRpbnVlIH1cbiAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlIHByb3BlcnR5XG4gICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcbiAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0cmluZyhjdXIpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJIVE1MIGZvciBTVkcgZWxlbWVudHNcbiAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNhcnJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICBjdXIgIT09IG9sZFByb3BzW2tleV1cbiAgICApIHtcbiAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbn1cblxuLy8gY2hlY2sgcGxhdGZvcm1zL3dlYi91dGlsL2F0dHJzLmpzIGFjY2VwdFZhbHVlXG5cblxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgcmV0dXJuICghZWxtLmNvbXBvc2luZyAmJiAoXG4gICAgZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc05vdEluRm9jdXNBbmREaXJ0eSAoZWxtLCBjaGVja1ZhbCkge1xuICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICB2YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gIC8vICM2MTU3XG4gIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICB0cnkgeyBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtOyB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsXG59XG5cbmZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzIChlbG0sIG5ld1ZhbCkge1xuICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxufVxuXG52YXIgZG9tUHJvcHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn07XG5cbi8qICAqL1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2YXIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEgKGRhdGEpIHtcbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cbiAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSlcbiAgICA6IHN0eWxlXG59XG5cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyAoYmluZGluZ1N0eWxlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKVxuICB9XG4gIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgcmV0dXJuIGJpbmRpbmdTdHlsZVxufVxuXG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBzdHlsZURhdGE7XG5cbiAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcblxudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgIHJldHVybiBwcm9wXG4gIH1cbiAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuICB9XG59KTtcblxuZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcblxuICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGN1ciwgbmFtZTtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcblxuICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuXG4gIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAvLyB0byBtdXRhdGUgaXQuXG4gIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKVxuICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICA6IHN0eWxlO1xuXG4gIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcblxuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHN0eWxlID0ge1xuICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59O1xuXG4vKiAgKi9cblxudmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgfVxuICAgIGlmICghZWwuY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgIH1cbiAgICBjdXIgPSBjdXIudHJpbSgpO1xuICAgIGlmIChjdXIpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbiAoZGVmJCQxKSB7XG4gIGlmICghZGVmJCQxKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGlmIChkZWYkJDEuY3NzICE9PSBmYWxzZSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgfVxuICAgIGV4dGVuZChyZXMsIGRlZiQkMSk7XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMSlcbiAgfVxufVxuXG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnRlckNsYXNzOiAobmFtZSArIFwiLWVudGVyXCIpLFxuICAgIGVudGVyVG9DbGFzczogKG5hbWUgKyBcIi1lbnRlci10b1wiKSxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICBsZWF2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlXCIpLFxuICAgIGxlYXZlVG9DbGFzczogKG5hbWUgKyBcIi1sZWF2ZS10b1wiKSxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICB9XG59KTtcblxudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG5cbi8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSAndHJhbnNpdGlvbmVuZCc7XG52YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XG5pZiAoaGFzVHJhbnNpdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG4gIH1cbiAgaWYgKHdpbmRvdy5vbmFuaW1hdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gIH1cbn1cblxuLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG52YXIgcmFmID0gaW5Ccm93c2VyXG4gID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICA6IHNldFRpbWVvdXRcbiAgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiAoZm4pIHsgcmV0dXJuIGZuKCk7IH07XG5cbmZ1bmN0aW9uIG5leHRGcmFtZSAoZm4pIHtcbiAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICByYWYoZm4pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xuICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgIHJlbW92ZShlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gIH1cbiAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG59XG5cbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyAoXG4gIGVsLFxuICBleHBlY3RlZFR5cGUsXG4gIGNiXG4pIHtcbiAgdmFyIHJlZiA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICB2YXIgcHJvcENvdW50ID0gcmVmLnByb3BDb3VudDtcbiAgaWYgKCF0eXBlKSB7IHJldHVybiBjYigpIH1cbiAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICB2YXIgZW5kZWQgPSAwO1xuICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICBjYigpO1xuICB9O1xuICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICBlbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgZW5kKCk7XG4gICAgfVxuICB9LCB0aW1lb3V0ICsgMSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cblxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcblxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVvdXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zvcm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xhc3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0gJ2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAgICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2VsbGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAoZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGNiID0gZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlLl9wZW5kaW5nKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgfVxuICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICBkZWxheUxlYXZlKHBlcmZvcm1MZWF2ZSk7XG4gIH0gZWxzZSB7XG4gICAgcGVyZm9ybUxlYXZlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUgKCkge1xuICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIChlbC5wYXJlbnROb2RlLl9wZW5kaW5nIHx8IChlbC5wYXJlbnROb2RlLl9wZW5kaW5nID0ge30pKVsodm5vZGUua2V5KV0gPSB2bm9kZTtcbiAgICB9XG4gICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0TGVhdmVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG5mdW5jdGlvbiBjaGVja0R1cmF0aW9uICh2YWwsIG5hbWUsIHZub2RlKSB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBcIiArXG4gICAgICBcImdvdCBcIiArIChKU09OLnN0cmluZ2lmeSh2YWwpKSArIFwiLlwiLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBOYU4gLSBcIiArXG4gICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRHVyYXRpb24gKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSB0cmFuc2l0aW9uIGhvb2sncyBhcmd1bWVudCBsZW5ndGguIFRoZSBob29rIG1heSBiZTpcbiAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICogLSBhIHdyYXBwZWQgY29tcG9uZW50IG1ldGhvZCAoY2hlY2sgLl9sZW5ndGgpXG4gKiAtIGEgcGxhaW4gZnVuY3Rpb24gKC5sZW5ndGgpXG4gKi9cbmZ1bmN0aW9uIGdldEhvb2tBcmd1bWVudHNMZW5ndGggKGZuKSB7XG4gIGlmIChpc1VuZGVmKGZuKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHZhciBpbnZva2VyRm5zID0gZm4uZm5zO1xuICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAvLyBpbnZva2VyXG4gICAgcmV0dXJuIGdldEhvb2tBcmd1bWVudHNMZW5ndGgoXG4gICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMpXG4gICAgICAgID8gaW52b2tlckZuc1swXVxuICAgICAgICA6IGludm9rZXJGbnNcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChmbi5fbGVuZ3RoIHx8IGZuLmxlbmd0aCkgPiAxXG4gIH1cbn1cblxuZnVuY3Rpb24gX2VudGVyIChfLCB2bm9kZSkge1xuICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgZW50ZXIodm5vZGUpO1xuICB9XG59XG5cbnZhciB0cmFuc2l0aW9uID0gaW5Ccm93c2VyID8ge1xuICBjcmVhdGU6IF9lbnRlcixcbiAgYWN0aXZhdGU6IF9lbnRlcixcbiAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUkJDEgKHZub2RlLCBybSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICB9XG4gIH1cbn0gOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFtcbiAgYXR0cnMsXG4gIGtsYXNzLFxuICBldmVudHMsXG4gIGRvbVByb3BzLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvblxuXTtcblxuLyogICovXG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsICYmIGVsLnZtb2RlbCkge1xuICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGRpcmVjdGl2ZSA9IHtcbiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIC8vICM2OTAzXG4gICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRpcmVjdGl2ZS5jb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgfVxuICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkge1xuICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0Jywgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXG4gICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcbiAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHZhbHVlIGlzIG91dC1vZi1zeW5jIHdpdGggdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcbiAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgdmFyIHByZXZPcHRpb25zID0gZWwuX3ZPcHRpb25zO1xuICAgICAgdmFyIGN1ck9wdGlvbnMgPSBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICBpZiAoY3VyT3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc1tpXSk7IH0pKSB7XG4gICAgICAgIC8vIHRyaWdnZXIgY2hhbmdlIGV2ZW50IGlmXG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIG9wdGlvbiBmb3VuZCBmb3IgYXQgbGVhc3Qgb25lIHZhbHVlXG4gICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnMpOyB9KVxuICAgICAgICAgIDogYmluZGluZy52YWx1ZSAhPT0gYmluZGluZy5vbGRWYWx1ZSAmJiBoYXNOb01hdGNoaW5nT3B0aW9uKGJpbmRpbmcudmFsdWUsIGN1ck9wdGlvbnMpO1xuICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgdHJpZ2dlcihlbCwgJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0lFIHx8IGlzRWRnZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNNdWx0aXBsZSkge1xuICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KVxufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb25cbiAgICA/IG9wdGlvbi5fdmFsdWVcbiAgICA6IG9wdGlvbi52YWx1ZVxufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQgKGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZCAoZSkge1xuICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZykgeyByZXR1cm4gfVxuICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIgKGVsLCB0eXBlKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8qICAqL1xuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiYgKCF2bm9kZS5kYXRhIHx8ICF2bm9kZS5kYXRhLnRyYW5zaXRpb24pXG4gICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICA6IHZub2RlXG59XG5cbnZhciBzaG93ID0ge1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcblxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG4gICAgdmFyIG9sZFZhbHVlID0gcmVmLm9sZFZhbHVlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKSB7IHJldHVybiB9XG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIGlmICh0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kIChcbiAgICBlbCxcbiAgICBiaW5kaW5nLFxuICAgIHZub2RlLFxuICAgIG9sZFZub2RlLFxuICAgIGlzRGVzdHJveVxuICApIHtcbiAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gIG1vZGVsOiBkaXJlY3RpdmUsXG4gIHNob3c6IHNob3dcbn07XG5cbi8qICAqL1xuXG52YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICBuYW1lOiBTdHJpbmcsXG4gIGFwcGVhcjogQm9vbGVhbixcbiAgY3NzOiBCb29sZWFuLFxuICBtb2RlOiBTdHJpbmcsXG4gIHR5cGU6IFN0cmluZyxcbiAgZW50ZXJDbGFzczogU3RyaW5nLFxuICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxufTtcblxuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkICh2bm9kZSkge1xuICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgdmFyIGRhdGEgPSB7fTtcbiAgdmFyIG9wdGlvbnMgPSBjb21wLiRvcHRpb25zO1xuICAvLyBwcm9wc1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gIH1cbiAgLy8gZXZlbnRzLlxuICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgZm9yICh2YXIga2V5JDEgaW4gbGlzdGVuZXJzKSB7XG4gICAgZGF0YVtjYW1lbGl6ZShrZXkkMSldID0gbGlzdGVuZXJzW2tleSQxXTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgaWYgKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QocmF3Q2hpbGQudGFnKSkge1xuICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRUcmFuc2l0aW9uICh2bm9kZSkge1xuICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkIChjaGlsZCwgb2xkQ2hpbGQpIHtcbiAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG59XG5cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcblxudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbnZhciBUcmFuc2l0aW9uID0ge1xuICBuYW1lOiAndHJhbnNpdGlvbicsXG4gIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAobW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgd2FybigoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiICsgbmFtZSArIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgYyQxLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICBjJDEuZGF0YS5wb3MgPSBjJDEuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAga2VwdC5wdXNoKGMkMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKCh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZScpO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgdmFyIGVsID0gYy5lbG07XG4gICAgICAgIHZhciBzID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBlbC5fbW92ZUNiID0gZnVuY3Rpb24gY2IgKGUpIHtcbiAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzTW92ZTogZnVuY3Rpb24gaGFzTW92ZSAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNb3ZlXG4gICAgICB9XG4gICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIGVsLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHsgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7IH0pO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzIChjKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbiAoYykge1xuICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24gKGMpIHtcbiAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCJweCxcIiArIGR5ICsgXCJweClcIjtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gIH1cbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUuY29uZmlnLm11c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGluQnJvd3Nlcikge1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICBpZiAoZGV2dG9vbHMpIHtcbiAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgIFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCAwKTtcbn1cblxuLyogICovXG5cbnZhciBkZWZhdWx0VGFnUkUgPSAvXFx7XFx7KCg/Oi58XFxyP1xcbikrPylcXH1cXH0vZztcbnZhciByZWdleEVzY2FwZVJFID0gL1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcblxudmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgdmFyIG9wZW4gPSBkZWxpbWl0ZXJzWzBdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICB2YXIgY2xvc2UgPSBkZWxpbWl0ZXJzWzFdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKVxufSk7XG5cblxuXG5mdW5jdGlvbiBwYXJzZVRleHQgKFxuICB0ZXh0LFxuICBkZWxpbWl0ZXJzXG4pIHtcbiAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gIGlmICghdGFnUkUudGVzdCh0ZXh0KSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIHJhd1Rva2VucyA9IFtdO1xuICB2YXIgbGFzdEluZGV4ID0gdGFnUkUubGFzdEluZGV4ID0gMDtcbiAgdmFyIG1hdGNoLCBpbmRleCwgdG9rZW5WYWx1ZTtcbiAgd2hpbGUgKChtYXRjaCA9IHRhZ1JFLmV4ZWModGV4dCkpKSB7XG4gICAgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAvLyBwdXNoIHRleHQgdG9rZW5cbiAgICBpZiAoaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICB9XG4gICAgLy8gdGFnIHRva2VuXG4gICAgdmFyIGV4cCA9IHBhcnNlRmlsdGVycyhtYXRjaFsxXS50cmltKCkpO1xuICAgIHRva2Vucy5wdXNoKChcIl9zKFwiICsgZXhwICsgXCIpXCIpKTtcbiAgICByYXdUb2tlbnMucHVzaCh7ICdAYmluZGluZyc6IGV4cCB9KTtcbiAgICBsYXN0SW5kZXggPSBpbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICByYXdUb2tlbnMucHVzaCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0b2tlblZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleHByZXNzaW9uOiB0b2tlbnMuam9pbignKycpLFxuICAgIHRva2VuczogcmF3VG9rZW5zXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUgKGVsLCBvcHRpb25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgaWYgKHN0YXRpY0NsYXNzKSB7XG4gICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNDbGFzcywgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICBpZiAocmVzKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImNsYXNzPVxcXCJcIiArIHN0YXRpY0NsYXNzICsgXCJcXFwiOiBcIiArXG4gICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBjbGFzcz1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmNsYXNzPVwidmFsXCI+LicsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWydjbGFzcyddXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICBlbC5zdGF0aWNDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHN0YXRpY0NsYXNzKTtcbiAgfVxuICB2YXIgY2xhc3NCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdjbGFzcycsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XG4gIGlmIChjbGFzc0JpbmRpbmcpIHtcbiAgICBlbC5jbGFzc0JpbmRpbmcgPSBjbGFzc0JpbmRpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY0NsYXNzKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY0NsYXNzOlwiICsgKGVsLnN0YXRpY0NsYXNzKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwiY2xhc3M6XCIgKyAoZWwuY2xhc3NCaW5kaW5nKSArIFwiLFwiO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbnZhciBrbGFzcyQxID0ge1xuICBzdGF0aWNLZXlzOiBbJ3N0YXRpY0NsYXNzJ10sXG4gIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gIGdlbkRhdGE6IGdlbkRhdGFcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlJDEgKGVsLCBvcHRpb25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgaWYgKHN0YXRpY1N0eWxlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAge1xuICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNTdHlsZSwgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcInN0eWxlPVxcXCJcIiArIHN0YXRpY1N0eWxlICsgXCJcXFwiOiBcIiArXG4gICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBzdHlsZT1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOnN0eWxlPVwidmFsXCI+LicsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3N0eWxlJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xuICB9XG5cbiAgdmFyIHN0eWxlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc3R5bGUnLCBmYWxzZSAvKiBnZXRTdGF0aWMgKi8pO1xuICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgZWwuc3R5bGVCaW5kaW5nID0gc3R5bGVCaW5kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkRhdGEkMSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY1N0eWxlOlwiICsgKGVsLnN0YXRpY1N0eWxlKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwic3R5bGU6KFwiICsgKGVsLnN0eWxlQmluZGluZykgKyBcIiksXCI7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxudmFyIHN0eWxlJDEgPSB7XG4gIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxuICBnZW5EYXRhOiBnZW5EYXRhJDFcbn07XG5cbi8qICAqL1xuXG52YXIgZGVjb2RlcjtcblxudmFyIGhlID0ge1xuICBkZWNvZGU6IGZ1bmN0aW9uIGRlY29kZSAoaHRtbCkge1xuICAgIGRlY29kZXIgPSBkZWNvZGVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gZGVjb2Rlci50ZXh0Q29udGVudFxuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKFxuICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sJyArXG4gICdsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdicidcbik7XG5cbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKFxuICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZSdcbik7XG5cbi8vIEhUTUw1IHRhZ3MgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5kaWNlcy5odG1sI2VsZW1lbnRzLTNcbi8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxudmFyIGlzTm9uUGhyYXNpbmdUYWcgPSBtYWtlTWFwKFxuICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xuICAnaDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyArXG4gICdvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4gICd0aXRsZSx0cix0cmFjaydcbik7XG5cbi8qKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gKi9cblxuLy8gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1dGVzXG52YXIgYXR0cmlidXRlID0gL15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgZHluYW1pY0FyZ0F0dHJpYnV0ZSA9IC9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rXFxdW15cXHNcIic8PlxcLz1dKikoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/LztcbnZhciBuY25hbWUgPSBcIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiXSpcIjtcbnZhciBxbmFtZUNhcHR1cmUgPSBcIigoPzpcIiArIG5jbmFtZSArIFwiXFxcXDopP1wiICsgbmNuYW1lICsgXCIpXCI7XG52YXIgc3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cCgoXCJePFwiICsgcW5hbWVDYXB0dXJlKSk7XG52YXIgc3RhcnRUYWdDbG9zZSA9IC9eXFxzKihcXC8/KT4vO1xudmFyIGVuZFRhZyA9IG5ldyBSZWdFeHAoKFwiXjxcXFxcL1wiICsgcW5hbWVDYXB0dXJlICsgXCJbXj5dKj5cIikpO1xudmFyIGRvY3R5cGUgPSAvXjwhRE9DVFlQRSBbXj5dKz4vaTtcbi8vICM3Mjk4OiBlc2NhcGUgLSB0byBhdm9pZCBiZWluZyBwYXNlZCBhcyBIVE1MIGNvbW1lbnQgd2hlbiBpbmxpbmVkIGluIHBhZ2VcbnZhciBjb21tZW50ID0gL148IVxcLS0vO1xudmFyIGNvbmRpdGlvbmFsQ29tbWVudCA9IC9ePCFcXFsvO1xuXG4vLyBTcGVjaWFsIEVsZW1lbnRzIChjYW4gY29udGFpbiBhbnl0aGluZylcbnZhciBpc1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdzY3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciByZUNhY2hlID0ge307XG5cbnZhciBkZWNvZGluZ01hcCA9IHtcbiAgJyZsdDsnOiAnPCcsXG4gICcmZ3Q7JzogJz4nLFxuICAnJnF1b3Q7JzogJ1wiJyxcbiAgJyZhbXA7JzogJyYnLFxuICAnJiMxMDsnOiAnXFxuJyxcbiAgJyYjOTsnOiAnXFx0JyxcbiAgJyYjMzk7JzogXCInXCJcbn07XG52YXIgZW5jb2RlZEF0dHIgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOSk7L2c7XG52YXIgZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOXwjMTB8IzkpOy9nO1xuXG4vLyAjNTk5MlxudmFyIGlzSWdub3JlTmV3bGluZVRhZyA9IG1ha2VNYXAoJ3ByZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHNob3VsZElnbm9yZUZpcnN0TmV3bGluZSA9IGZ1bmN0aW9uICh0YWcsIGh0bWwpIHsgcmV0dXJuIHRhZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFnKSAmJiBodG1sWzBdID09PSAnXFxuJzsgfTtcblxuZnVuY3Rpb24gZGVjb2RlQXR0ciAodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gIHZhciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVzID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBlbmNvZGVkQXR0cjtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmUsIGZ1bmN0aW9uIChtYXRjaCkgeyByZXR1cm4gZGVjb2RpbmdNYXBbbWF0Y2hdOyB9KVxufVxuXG5mdW5jdGlvbiBwYXJzZUhUTUwgKGh0bWwsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBleHBlY3RIVE1MID0gb3B0aW9ucy5leHBlY3RIVE1MO1xuICB2YXIgaXNVbmFyeVRhZyQkMSA9IG9wdGlvbnMuaXNVbmFyeVRhZyB8fCBubztcbiAgdmFyIGNhbkJlTGVmdE9wZW5UYWckJDEgPSBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcgfHwgbm87XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0LCBsYXN0VGFnO1xuICB3aGlsZSAoaHRtbCkge1xuICAgIGxhc3QgPSBodG1sO1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgaW4gYSBwbGFpbnRleHQgY29udGVudCBlbGVtZW50IGxpa2Ugc2NyaXB0L3N0eWxlXG4gICAgaWYgKCFsYXN0VGFnIHx8ICFpc1BsYWluVGV4dEVsZW1lbnQobGFzdFRhZykpIHtcbiAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICBpZiAodGV4dEVuZCA9PT0gMCkge1xuICAgICAgICAvLyBDb21tZW50OlxuICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgdmFyIGNvbW1lbnRFbmQgPSBodG1sLmluZGV4T2YoJy0tPicpO1xuXG4gICAgICAgICAgaWYgKGNvbW1lbnRFbmQgPj0gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkS2VlcENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5jb21tZW50KGh0bWwuc3Vic3RyaW5nKDQsIGNvbW1lbnRFbmQpLCBpbmRleCwgaW5kZXggKyBjb21tZW50RW5kICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZHZhbmNlKGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25kaXRpb25hbF9jb21tZW50I0Rvd25sZXZlbC1yZXZlYWxlZF9jb25kaXRpb25hbF9jb21tZW50XG4gICAgICAgIGlmIChjb25kaXRpb25hbENvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgIHZhciBjb25kaXRpb25hbEVuZCA9IGh0bWwuaW5kZXhPZignXT4nKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25hbEVuZCA+PSAwKSB7XG4gICAgICAgICAgICBhZHZhbmNlKGNvbmRpdGlvbmFsRW5kICsgMik7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvY3R5cGU6XG4gICAgICAgIHZhciBkb2N0eXBlTWF0Y2ggPSBodG1sLm1hdGNoKGRvY3R5cGUpO1xuICAgICAgICBpZiAoZG9jdHlwZU1hdGNoKSB7XG4gICAgICAgICAgYWR2YW5jZShkb2N0eXBlTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5kIHRhZzpcbiAgICAgICAgdmFyIGVuZFRhZ01hdGNoID0gaHRtbC5tYXRjaChlbmRUYWcpO1xuICAgICAgICBpZiAoZW5kVGFnTWF0Y2gpIHtcbiAgICAgICAgICB2YXIgY3VySW5kZXggPSBpbmRleDtcbiAgICAgICAgICBhZHZhbmNlKGVuZFRhZ01hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgcGFyc2VFbmRUYWcoZW5kVGFnTWF0Y2hbMV0sIGN1ckluZGV4LCBpbmRleCk7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHRhZzpcbiAgICAgICAgdmFyIHN0YXJ0VGFnTWF0Y2ggPSBwYXJzZVN0YXJ0VGFnKCk7XG4gICAgICAgIGlmIChzdGFydFRhZ01hdGNoKSB7XG4gICAgICAgICAgaGFuZGxlU3RhcnRUYWcoc3RhcnRUYWdNYXRjaCk7XG4gICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XG4gICAgICAgICAgICBhZHZhbmNlKDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0ZXh0ID0gKHZvaWQgMCksIHJlc3QgPSAodm9pZCAwKSwgbmV4dCA9ICh2b2lkIDApO1xuICAgICAgaWYgKHRleHRFbmQgPj0gMCkge1xuICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICFlbmRUYWcudGVzdChyZXN0KSAmJlxuICAgICAgICAgICFzdGFydFRhZ09wZW4udGVzdChyZXN0KSAmJlxuICAgICAgICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50LnRlc3QocmVzdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICBuZXh0ID0gcmVzdC5pbmRleE9mKCc8JywgMSk7XG4gICAgICAgICAgaWYgKG5leHQgPCAwKSB7IGJyZWFrIH1cbiAgICAgICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGV4dEVuZCA8IDApIHtcbiAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jaGFycyAmJiB0ZXh0KSB7XG4gICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZW5kVGFnTGVuZ3RoID0gMDtcbiAgICAgIHZhciBzdGFja2VkVGFnID0gbGFzdFRhZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHJlU3RhY2tlZFRhZyA9IHJlQ2FjaGVbc3RhY2tlZFRhZ10gfHwgKHJlQ2FjaGVbc3RhY2tlZFRhZ10gPSBuZXcgUmVnRXhwKCcoW1xcXFxzXFxcXFNdKj8pKDwvJyArIHN0YWNrZWRUYWcgKyAnW14+XSo+KScsICdpJykpO1xuICAgICAgdmFyIHJlc3QkMSA9IGh0bWwucmVwbGFjZShyZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRleHQsIGVuZFRhZykge1xuICAgICAgICBlbmRUYWdMZW5ndGggPSBlbmRUYWcubGVuZ3RoO1xuICAgICAgICBpZiAoIWlzUGxhaW5UZXh0RWxlbWVudChzdGFja2VkVGFnKSAmJiBzdGFja2VkVGFnICE9PSAnbm9zY3JpcHQnKSB7XG4gICAgICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcLS0oW1xcc1xcU10qPyktLT4vZywgJyQxJykgLy8gIzcyOThcbiAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXV0+L2csICckMScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUoc3RhY2tlZFRhZywgdGV4dCkpIHtcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jaGFycykge1xuICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9KTtcbiAgICAgIGluZGV4ICs9IGh0bWwubGVuZ3RoIC0gcmVzdCQxLmxlbmd0aDtcbiAgICAgIGh0bWwgPSByZXN0JDE7XG4gICAgICBwYXJzZUVuZFRhZyhzdGFja2VkVGFnLCBpbmRleCAtIGVuZFRhZ0xlbmd0aCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChodG1sID09PSBsYXN0KSB7XG4gICAgICBvcHRpb25zLmNoYXJzICYmIG9wdGlvbnMuY2hhcnMoaHRtbCk7XG4gICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBvcHRpb25zLndhcm4pIHtcbiAgICAgICAgb3B0aW9ucy53YXJuKChcIk1hbC1mb3JtYXR0ZWQgdGFnIGF0IGVuZCBvZiB0ZW1wbGF0ZTogXFxcIlwiICsgaHRtbCArIFwiXFxcIlwiKSwgeyBzdGFydDogaW5kZXggKyBodG1sLmxlbmd0aCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0YWdzXG4gIHBhcnNlRW5kVGFnKCk7XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSAobikge1xuICAgIGluZGV4ICs9IG47XG4gICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKG4pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZyAoKSB7XG4gICAgdmFyIHN0YXJ0ID0gaHRtbC5tYXRjaChzdGFydFRhZ09wZW4pO1xuICAgIGlmIChzdGFydCkge1xuICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICB0YWdOYW1lOiBzdGFydFsxXSxcbiAgICAgICAgYXR0cnM6IFtdLFxuICAgICAgICBzdGFydDogaW5kZXhcbiAgICAgIH07XG4gICAgICBhZHZhbmNlKHN0YXJ0WzBdLmxlbmd0aCk7XG4gICAgICB2YXIgZW5kLCBhdHRyO1xuICAgICAgd2hpbGUgKCEoZW5kID0gaHRtbC5tYXRjaChzdGFydFRhZ0Nsb3NlKSkgJiYgKGF0dHIgPSBodG1sLm1hdGNoKGR5bmFtaWNBcmdBdHRyaWJ1dGUpIHx8IGh0bWwubWF0Y2goYXR0cmlidXRlKSkpIHtcbiAgICAgICAgYXR0ci5zdGFydCA9IGluZGV4O1xuICAgICAgICBhZHZhbmNlKGF0dHJbMF0ubGVuZ3RoKTtcbiAgICAgICAgYXR0ci5lbmQgPSBpbmRleDtcbiAgICAgICAgbWF0Y2guYXR0cnMucHVzaChhdHRyKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgbWF0Y2gudW5hcnlTbGFzaCA9IGVuZFsxXTtcbiAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2guZW5kID0gaW5kZXg7XG4gICAgICAgIHJldHVybiBtYXRjaFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VGFnIChtYXRjaCkge1xuICAgIHZhciB0YWdOYW1lID0gbWF0Y2gudGFnTmFtZTtcbiAgICB2YXIgdW5hcnlTbGFzaCA9IG1hdGNoLnVuYXJ5U2xhc2g7XG5cbiAgICBpZiAoZXhwZWN0SFRNTCkge1xuICAgICAgaWYgKGxhc3RUYWcgPT09ICdwJyAmJiBpc05vblBocmFzaW5nVGFnKHRhZ05hbWUpKSB7XG4gICAgICAgIHBhcnNlRW5kVGFnKGxhc3RUYWcpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbkJlTGVmdE9wZW5UYWckJDEodGFnTmFtZSkgJiYgbGFzdFRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICBwYXJzZUVuZFRhZyh0YWdOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5hcnkgPSBpc1VuYXJ5VGFnJCQxKHRhZ05hbWUpIHx8ICEhdW5hcnlTbGFzaDtcblxuICAgIHZhciBsID0gbWF0Y2guYXR0cnMubGVuZ3RoO1xuICAgIHZhciBhdHRycyA9IG5ldyBBcnJheShsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFyZ3MgPSBtYXRjaC5hdHRyc1tpXTtcbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3NbM10gfHwgYXJnc1s0XSB8fCBhcmdzWzVdIHx8ICcnO1xuICAgICAgdmFyIHNob3VsZERlY29kZU5ld2xpbmVzID0gdGFnTmFtZSA9PT0gJ2EnICYmIGFyZ3NbMV0gPT09ICdocmVmJ1xuICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgIDogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lcztcbiAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICBuYW1lOiBhcmdzWzFdLFxuICAgICAgICB2YWx1ZTogZGVjb2RlQXR0cih2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpXG4gICAgICB9O1xuICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBhcmdzLnN0YXJ0ICsgYXJnc1swXS5tYXRjaCgvXlxccyovKS5sZW5ndGg7XG4gICAgICAgIGF0dHJzW2ldLmVuZCA9IGFyZ3MuZW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdW5hcnkpIHtcbiAgICAgIHN0YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSwgYXR0cnM6IGF0dHJzLCBzdGFydDogbWF0Y2guc3RhcnQsIGVuZDogbWF0Y2guZW5kIH0pO1xuICAgICAgbGFzdFRhZyA9IHRhZ05hbWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgYXR0cnMsIHVuYXJ5LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUVuZFRhZyAodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xuICAgIHZhciBwb3MsIGxvd2VyQ2FzZWRUYWdOYW1lO1xuICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5kZXg7IH1cbiAgICBpZiAoZW5kID09IG51bGwpIHsgZW5kID0gaW5kZXg7IH1cblxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGxvd2VyQ2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHtcbiAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHRhZyBuYW1lIGlzIHByb3ZpZGVkLCBjbGVhbiBzaG9wXG4gICAgICBwb3MgPSAwO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IHBvczsgaS0tKSB7XG4gICAgICAgIGlmIChpID4gcG9zIHx8ICF0YWdOYW1lICYmXG4gICAgICAgICAgb3B0aW9ucy53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbnMud2FybihcbiAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0Y2hpbmcgZW5kIHRhZy5cIiksXG4gICAgICAgICAgICB7IHN0YXJ0OiBzdGFja1tpXS5zdGFydCwgZW5kOiBzdGFja1tpXS5lbmQgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgICAgb3B0aW9ucy5lbmQoc3RhY2tbaV0udGFnLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIG9wZW4gZWxlbWVudHMgZnJvbSB0aGUgc3RhY2tcbiAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgIGxhc3RUYWcgPSBwb3MgJiYgc3RhY2tbcG9zIC0gMV0udGFnO1xuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdicicpIHtcbiAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIHRydWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgZmFsc2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgIG9wdGlvbnMuZW5kKHRhZ05hbWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcbnZhciBkaXJSRSA9IC9edi18XkB8XjovO1xudmFyIGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcbnZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xudmFyIGR5bmFtaWNBcmdSRSA9IC9eXFxbLipcXF0kLztcblxudmFyIGFyZ1JFID0gLzooLiopJC87XG52YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xudmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZztcblxudmFyIHNsb3RSRSA9IC9edi1zbG90KDp8JCl8XiMvO1xuXG52YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xudmFyIHdoaXRlc3BhY2VSRSQxID0gL1xccysvZztcblxudmFyIGludmFsaWRBdHRyaWJ1dGVSRSA9IC9bXFxzXCInPD5cXC89XS87XG5cbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbnZhciBlbXB0eVNsb3RTY29wZVRva2VuID0gXCJfZW1wdHlfXCI7XG5cbi8vIGNvbmZpZ3VyYWJsZSBzdGF0ZVxudmFyIHdhcm4kMjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG52YXIgbWF5YmVDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQgKFxuICB0YWcsXG4gIGF0dHJzLFxuICBwYXJlbnRcbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IDEsXG4gICAgdGFnOiB0YWcsXG4gICAgYXR0cnNMaXN0OiBhdHRycyxcbiAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICByYXdBdHRyc01hcDoge30sXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgY2hpbGRyZW46IFtdXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHdhcm4kMiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcblxuICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XG4gIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcblxuICB0cmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICd0cmFuc2Zvcm1Ob2RlJyk7XG4gIHByZVRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3ByZVRyYW5zZm9ybU5vZGUnKTtcbiAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG5cbiAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcblxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcbiAgdmFyIHdoaXRlc3BhY2VPcHRpb24gPSBvcHRpb25zLndoaXRlc3BhY2U7XG4gIHZhciByb290O1xuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGluVlByZSA9IGZhbHNlO1xuICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdhcm5PbmNlIChtc2csIHJhbmdlKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICB3YXJuJDIobXNnLCByYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VFbGVtZW50IChlbGVtZW50KSB7XG4gICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICBlbGVtZW50ID0gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgIGlmICghc3RhY2subGVuZ3RoICYmIGVsZW1lbnQgIT09IHJvb3QpIHtcbiAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxuICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcbiAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxuICAgICAgICAgIGJsb2NrOiBlbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgXCJDb21wb25lbnQgdGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSBvbmUgcm9vdCBlbGVtZW50LiBcIiArXG4gICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHYtaWYgb24gbXVsdGlwbGUgZWxlbWVudHMsIFwiICtcbiAgICAgICAgICBcInVzZSB2LWVsc2UtaWYgdG8gY2hhaW4gdGhlbSBpbnN0ZWFkLlwiLFxuICAgICAgICAgIHsgc3RhcnQ6IGVsZW1lbnQuc3RhcnQgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3VycmVudFBhcmVudCAmJiAhZWxlbWVudC5mb3JiaWRkZW4pIHtcbiAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgcHJvY2Vzc0lmQ29uZGl0aW9ucyhlbGVtZW50LCBjdXJyZW50UGFyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbGVtZW50LnNsb3RTY29wZSkge1xuICAgICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgLy8ga2VlcCBpdCBpbiB0aGUgY2hpbGRyZW4gbGlzdCBzbyB0aGF0IHYtZWxzZSgtaWYpIGNvbmRpdGlvbnMgY2FuXG4gICAgICAgICAgLy8gZmluZCBpdCBhcyB0aGUgcHJldiBub2RlLlxuICAgICAgICAgIHZhciBuYW1lID0gZWxlbWVudC5zbG90VGFyZ2V0IHx8ICdcImRlZmF1bHRcIidcbiAgICAgICAgICA7KGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgfHwgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgPSB7fSkpW25hbWVdID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQucGFyZW50ID0gY3VycmVudFBhcmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaW5hbCBjaGlsZHJlbiBjbGVhbnVwXG4gICAgLy8gZmlsdGVyIG91dCBzY29wZWQgc2xvdHNcbiAgICBlbGVtZW50LmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuICEoYykuc2xvdFNjb3BlOyB9KTtcbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlIGFnYWluXG4gICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG5cbiAgICAvLyBjaGVjayBwcmUgc3RhdGVcbiAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgIGluVlByZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgIGluUHJlID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIGFwcGx5IHBvc3QtdHJhbnNmb3Jtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBvc3RUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW1FbmRpbmdXaGl0ZXNwYWNlIChlbCkge1xuICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGVcbiAgICBpZiAoIWluUHJlKSB7XG4gICAgICB2YXIgbGFzdE5vZGU7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICBsYXN0Tm9kZS50eXBlID09PSAzICYmXG4gICAgICAgIGxhc3ROb2RlLnRleHQgPT09ICcgJ1xuICAgICAgKSB7XG4gICAgICAgIGVsLmNoaWxkcmVuLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUm9vdENvbnN0cmFpbnRzIChlbCkge1xuICAgIGlmIChlbC50YWcgPT09ICdzbG90JyB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIHdhcm5PbmNlKFxuICAgICAgICBcIkNhbm5vdCB1c2UgPFwiICsgKGVsLnRhZykgKyBcIj4gYXMgY29tcG9uZW50IHJvb3QgZWxlbWVudCBiZWNhdXNlIGl0IG1heSBcIiArXG4gICAgICAgICdjb250YWluIG11bHRpcGxlIG5vZGVzLicsXG4gICAgICAgIHsgc3RhcnQ6IGVsLnN0YXJ0IH1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChlbC5hdHRyc01hcC5oYXNPd25Qcm9wZXJ0eSgndi1mb3InKSkge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgICdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcbiAgICAgICAgJ2l0IHJlbmRlcnMgbXVsdGlwbGUgZWxlbWVudHMuJyxcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAgd2Fybjogd2FybiQyLFxuICAgIGV4cGVjdEhUTUw6IG9wdGlvbnMuZXhwZWN0SFRNTCxcbiAgICBpc1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXG4gICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXG4gICAgb3V0cHV0U291cmNlUmFuZ2U6IG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UsXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0ICh0YWcsIGF0dHJzLCB1bmFyeSwgc3RhcnQkMSwgZW5kKSB7XG4gICAgICAvLyBjaGVjayBuYW1lc3BhY2UuXG4gICAgICAvLyBpbmhlcml0IHBhcmVudCBucyBpZiB0aGVyZSBpcyBvbmVcbiAgICAgIHZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG5cbiAgICAgIC8vIGhhbmRsZSBJRSBzdmcgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmIG5zID09PSAnc3ZnJykge1xuICAgICAgICBhdHRycyA9IGd1YXJkSUVTVkdCdWcoYXR0cnMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgY3VycmVudFBhcmVudCk7XG4gICAgICBpZiAobnMpIHtcbiAgICAgICAgZWxlbWVudC5ucyA9IG5zO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0JDE7XG4gICAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQ7XG4gICAgICAgICAgZWxlbWVudC5yYXdBdHRyc01hcCA9IGVsZW1lbnQuYXR0cnNMaXN0LnJlZHVjZShmdW5jdGlvbiAoY3VtdWxhdGVkLCBhdHRyKSB7XG4gICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICByZXR1cm4gY3VtdWxhdGVkXG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZHluYW1pYyBhcmd1bWVudCBleHByZXNzaW9uOiBhdHRyaWJ1dGUgbmFtZXMgY2Fubm90IGNvbnRhaW4gXCIgK1xuICAgICAgICAgICAgICBcInNwYWNlcywgcXVvdGVzLCA8LCA+LCAvIG9yID0uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5pbmRleE9mKFwiW1wiKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGF0dHIuc3RhcnQgKyBhdHRyLm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9yYmlkZGVuVGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgICdUZW1wbGF0ZXMgc2hvdWxkIG9ubHkgYmUgcmVzcG9uc2libGUgZm9yIG1hcHBpbmcgdGhlIHN0YXRlIHRvIHRoZSAnICtcbiAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcbiAgICAgICAgICBcIjxcIiArIHRhZyArIFwiPlwiICsgJywgYXMgdGhleSB3aWxsIG5vdCBiZSBwYXJzZWQuJyxcbiAgICAgICAgICB7IHN0YXJ0OiBlbGVtZW50LnN0YXJ0IH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbHkgcHJlLXRyYW5zZm9ybXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlVHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gcHJlVHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluVlByZSkge1xuICAgICAgICBwcm9jZXNzUHJlKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgICAgaW5QcmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluVlByZSkge1xuICAgICAgICBwcm9jZXNzUmF3QXR0cnMoZWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKCFlbGVtZW50LnByb2Nlc3NlZCkge1xuICAgICAgICAvLyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXNcbiAgICAgICAgcHJvY2Vzc0ZvcihlbGVtZW50KTtcbiAgICAgICAgcHJvY2Vzc0lmKGVsZW1lbnQpO1xuICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICB7XG4gICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgc3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW5kOiBmdW5jdGlvbiBlbmQgKHRhZywgc3RhcnQsIGVuZCQxKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gcG9wIHN0YWNrXG4gICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgIGN1cnJlbnRQYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgIGVsZW1lbnQuZW5kID0gZW5kJDE7XG4gICAgICB9XG4gICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSxcblxuICAgIGNoYXJzOiBmdW5jdGlvbiBjaGFycyAodGV4dCwgc3RhcnQsIGVuZCkge1xuICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGV4dCA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJyxcbiAgICAgICAgICAgICAgeyBzdGFydDogc3RhcnQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgKFwidGV4dCBcXFwiXCIgKyB0ZXh0ICsgXCJcXFwiIG91dHNpZGUgcm9vdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIiksXG4gICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YXJ0IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnRQYXJlbnQuY2hpbGRyZW47XG4gICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgdGV4dCA9IGlzVGV4dFRhZyhjdXJyZW50UGFyZW50KSA/IHRleHQgOiBkZWNvZGVIVE1MQ2FjaGVkKHRleHQpO1xuICAgICAgfSBlbHNlIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlT3B0aW9uKSB7XG4gICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIG5vZGUgaWYgaXQgY29udGFpbnNcbiAgICAgICAgICAvLyBsaW5lIGJyZWFrLCBvdGhlcndpc2UgY29uZGVuc2UgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSAnICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyAnICcgOiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xuICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSh3aGl0ZXNwYWNlUkUkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzO1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghaW5WUHJlICYmIHRleHQgIT09ICcgJyAmJiAocmVzID0gcGFyc2VUZXh0KHRleHQsIGRlbGltaXRlcnMpKSkge1xuICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGNoaWxkLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21tZW50OiBmdW5jdGlvbiBjb21tZW50ICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAvLyBhZGRpbmcgYW55dGluZyBhcyBhIHNpYmxpbmcgdG8gdGhlIHJvb3Qgbm9kZSBpcyBmb3JiaWRkZW5cbiAgICAgIC8vIGNvbW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhbGxvd2VkLCBidXQgaWdub3JlZFxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgdmFyIGNoaWxkID0ge1xuICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICBpc0NvbW1lbnQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiByb290XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NQcmUgKGVsKSB7XG4gIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1wcmUnKSAhPSBudWxsKSB7XG4gICAgZWwucHJlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMgKGVsKSB7XG4gIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gIGlmIChsZW4pIHtcbiAgICB2YXIgYXR0cnMgPSBlbC5hdHRycyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICBuYW1lOiBsaXN0W2ldLm5hbWUsXG4gICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShsaXN0W2ldLnZhbHVlKVxuICAgICAgfTtcbiAgICAgIGlmIChsaXN0W2ldLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBsaXN0W2ldLnN0YXJ0O1xuICAgICAgICBhdHRyc1tpXS5lbmQgPSBsaXN0W2ldLmVuZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWVsLnByZSkge1xuICAgIC8vIG5vbiByb290IG5vZGUgaW4gcHJlIGJsb2NrcyB3aXRoIG5vIGF0dHJpYnV0ZXNcbiAgICBlbC5wbGFpbiA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQgKFxuICBlbGVtZW50LFxuICBvcHRpb25zXG4pIHtcbiAgcHJvY2Vzc0tleShlbGVtZW50KTtcblxuICAvLyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgcGxhaW4gZWxlbWVudCBhZnRlclxuICAvLyByZW1vdmluZyBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZXNcbiAgZWxlbWVudC5wbGFpbiA9IChcbiAgICAhZWxlbWVudC5rZXkgJiZcbiAgICAhZWxlbWVudC5zY29wZWRTbG90cyAmJlxuICAgICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGhcbiAgKTtcblxuICBwcm9jZXNzUmVmKGVsZW1lbnQpO1xuICBwcm9jZXNzU2xvdENvbnRlbnQoZWxlbWVudCk7XG4gIHByb2Nlc3NTbG90T3V0bGV0KGVsZW1lbnQpO1xuICBwcm9jZXNzQ29tcG9uZW50KGVsZW1lbnQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICBlbGVtZW50ID0gdHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICB9XG4gIHByb2Nlc3NBdHRycyhlbGVtZW50KTtcbiAgcmV0dXJuIGVsZW1lbnRcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0tleSAoZWwpIHtcbiAgdmFyIGV4cCA9IGdldEJpbmRpbmdBdHRyKGVsLCAna2V5Jyk7XG4gIGlmIChleHApIHtcbiAgICB7XG4gICAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIjx0ZW1wbGF0ZT4gY2Fubm90IGJlIGtleWVkLiBQbGFjZSB0aGUga2V5IG9uIHJlYWwgZWxlbWVudHMgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZWwuZm9yKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGVsLml0ZXJhdG9yMiB8fCBlbC5pdGVyYXRvcjE7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICAgIGlmIChpdGVyYXRvciAmJiBpdGVyYXRvciA9PT0gZXhwICYmIHBhcmVudCAmJiBwYXJlbnQudGFnID09PSAndHJhbnNpdGlvbi1ncm91cCcpIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICBcIkRvIG5vdCB1c2Ugdi1mb3IgaW5kZXggYXMga2V5IG9uIDx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiwgXCIgK1xuICAgICAgICAgICAgXCJ0aGlzIGlzIHRoZSBzYW1lIGFzIG5vdCB1c2luZyBrZXlzLlwiLFxuICAgICAgICAgICAgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdrZXknKSxcbiAgICAgICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbC5rZXkgPSBleHA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JlZiAoZWwpIHtcbiAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4gIGlmIChyZWYpIHtcbiAgICBlbC5yZWYgPSByZWY7XG4gICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICB2YXIgZXhwO1xuICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIGV4dGVuZChlbCwgcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybiQyKFxuICAgICAgICAoXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiICsgZXhwKSxcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblxuXG5mdW5jdGlvbiBwYXJzZUZvciAoZXhwKSB7XG4gIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICBpZiAoIWluTWF0Y2gpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9IHt9O1xuICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gIHZhciBhbGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpO1xuICB2YXIgaXRlcmF0b3JNYXRjaCA9IGFsaWFzLm1hdGNoKGZvckl0ZXJhdG9yUkUpO1xuICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgIHJlcy5hbGlhcyA9IGFsaWFzLnJlcGxhY2UoZm9ySXRlcmF0b3JSRSwgJycpLnRyaW0oKTtcbiAgICByZXMuaXRlcmF0b3IxID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgIHJlcy5pdGVyYXRvcjIgPSBpdGVyYXRvck1hdGNoWzJdLnRyaW0oKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzLmFsaWFzID0gYWxpYXM7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzSWYgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicpO1xuICBpZiAoZXhwKSB7XG4gICAgZWwuaWYgPSBleHA7XG4gICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgIGV4cDogZXhwLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UnKSAhPSBudWxsKSB7XG4gICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGVsc2VpZiA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UtaWYnKTtcbiAgICBpZiAoZWxzZWlmKSB7XG4gICAgICBlbC5lbHNlaWYgPSBlbHNlaWY7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NJZkNvbmRpdGlvbnMgKGVsLCBwYXJlbnQpIHtcbiAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFyZW50LmNoaWxkcmVuKTtcbiAgaWYgKHByZXYgJiYgcHJldi5pZikge1xuICAgIGFkZElmQ29uZGl0aW9uKHByZXYsIHtcbiAgICAgIGV4cDogZWwuZWxzZWlmLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgd2FybiQyKFxuICAgICAgXCJ2LVwiICsgKGVsLmVsc2VpZiA/ICgnZWxzZS1pZj1cIicgKyBlbC5lbHNlaWYgKyAnXCInKSA6ICdlbHNlJykgKyBcIiBcIiArXG4gICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIgKyAoZWwudGFnKSArIFwiPiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdi1pZi5cIixcbiAgICAgIGVsLnJhd0F0dHJzTWFwW2VsLmVsc2VpZiA/ICd2LWVsc2UtaWYnIDogJ3YtZWxzZSddXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kUHJldkVsZW1lbnQgKGNoaWxkcmVuKSB7XG4gIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKGNoaWxkcmVuW2ldLnR5cGUgPT09IDEpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltpXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hpbGRyZW5baV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcInRleHQgXFxcIlwiICsgKGNoaWxkcmVuW2ldLnRleHQudHJpbSgpKSArIFwiXFxcIiBiZXR3ZWVuIHYtaWYgYW5kIHYtZWxzZSgtaWYpIFwiICtcbiAgICAgICAgICBcIndpbGwgYmUgaWdub3JlZC5cIixcbiAgICAgICAgICBjaGlsZHJlbltpXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uIChlbCwgY29uZGl0aW9uKSB7XG4gIGlmICghZWwuaWZDb25kaXRpb25zKSB7XG4gICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gIH1cbiAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc09uY2UgKGVsKSB7XG4gIHZhciBvbmNlJCQxID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Ytb25jZScpO1xuICBpZiAob25jZSQkMSAhPSBudWxsKSB7XG4gICAgZWwub25jZSA9IHRydWU7XG4gIH1cbn1cblxuLy8gaGFuZGxlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIGEgY29tcG9uZW50IGFzIHNsb3QsXG4vLyBlLmcuIDx0ZW1wbGF0ZSBzbG90PVwieHh4XCI+LCA8ZGl2IHNsb3Qtc2NvcGU9XCJ4eHhcIj5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90Q29udGVudCAoZWwpIHtcbiAgdmFyIHNsb3RTY29wZTtcbiAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChzbG90U2NvcGUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJ0aGUgXFxcInNjb3BlXFxcIiBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBzbG90cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgXCIgK1xuICAgICAgICBcInJlcGxhY2VkIGJ5IFxcXCJzbG90LXNjb3BlXFxcIiBzaW5jZSAyLjUuIFRoZSBuZXcgXFxcInNsb3Qtc2NvcGVcXFwiIGF0dHJpYnV0ZSBcIiArXG4gICAgICAgIFwiY2FuIGFsc28gYmUgdXNlZCBvbiBwbGFpbiBlbGVtZW50cyBpbiBhZGRpdGlvbiB0byA8dGVtcGxhdGU+IHRvIFwiICtcbiAgICAgICAgXCJkZW5vdGUgc2NvcGVkIHNsb3RzLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsnc2NvcGUnXSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJyk7XG4gIH0gZWxzZSBpZiAoKHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJykpKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiQW1iaWd1b3VzIGNvbWJpbmVkIHVzYWdlIG9mIHNsb3Qtc2NvcGUgYW5kIHYtZm9yIG9uIDxcIiArIChlbC50YWcpICsgXCI+IFwiICtcbiAgICAgICAgXCIodi1mb3IgdGFrZXMgaGlnaGVyIHByaW9yaXR5KS4gVXNlIGEgd3JhcHBlciA8dGVtcGxhdGU+IGZvciB0aGUgXCIgK1xuICAgICAgICBcInNjb3BlZCBzbG90IHRvIG1ha2UgaXQgY2xlYXJlci5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3Nsb3Qtc2NvcGUnXSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlO1xuICB9XG5cbiAgLy8gc2xvdD1cInh4eFwiXG4gIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gIGlmIChzbG90VGFyZ2V0KSB7XG4gICAgZWwuc2xvdFRhcmdldCA9IHNsb3RUYXJnZXQgPT09ICdcIlwiJyA/ICdcImRlZmF1bHRcIicgOiBzbG90VGFyZ2V0O1xuICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xuICAgIC8vIHByZXNlcnZlIHNsb3QgYXMgYW4gYXR0cmlidXRlIGZvciBuYXRpdmUgc2hhZG93IERPTSBjb21wYXRcbiAgICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzLlxuICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgYWRkQXR0cihlbCwgJ3Nsb3QnLCBzbG90VGFyZ2V0LCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gMi42IHYtc2xvdCBzeW50YXhcbiAge1xuICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIC8vIHYtc2xvdCBvbiA8dGVtcGxhdGU+XG4gICAgICB2YXIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGVsLnNsb3RUYXJnZXQgfHwgZWwuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5wYXJlbnQgJiYgIW1heWJlQ29tcG9uZW50KGVsLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgXCI8dGVtcGxhdGUgdi1zbG90PiBjYW4gb25seSBhcHBlYXIgYXQgdGhlIHJvb3QgbGV2ZWwgaW5zaWRlIFwiICtcbiAgICAgICAgICAgICAgXCJ0aGUgcmVjZWl2aW5nIHRoZSBjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciByZWYgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyk7XG4gICAgICAgIHZhciBuYW1lID0gcmVmLm5hbWU7XG4gICAgICAgIHZhciBkeW5hbWljID0gcmVmLmR5bmFtaWM7XG4gICAgICAgIGVsLnNsb3RUYXJnZXQgPSBuYW1lO1xuICAgICAgICBlbC5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWM7XG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47IC8vIGZvcmNlIGl0IGludG8gYSBzY29wZWQgc2xvdCBmb3IgcGVyZlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2LXNsb3Qgb24gY29tcG9uZW50LCBkZW5vdGVzIGRlZmF1bHQgc2xvdFxuICAgICAgdmFyIHNsb3RCaW5kaW5nJDEgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgIGlmIChzbG90QmluZGluZyQxKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIW1heWJlQ29tcG9uZW50KGVsKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcInYtc2xvdCBjYW4gb25seSBiZSB1c2VkIG9uIGNvbXBvbmVudHMgb3IgPHRlbXBsYXRlPi5cIixcbiAgICAgICAgICAgICAgc2xvdEJpbmRpbmckMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsLnNsb3RTY29wZSB8fCBlbC5zbG90VGFyZ2V0KSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIixcbiAgICAgICAgICAgICAgZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIlRvIGF2b2lkIHNjb3BlIGFtYmlndWl0eSwgdGhlIGRlZmF1bHQgc2xvdCBzaG91bGQgYWxzbyB1c2UgXCIgK1xuICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZT4gc3ludGF4IHdoZW4gdGhlcmUgYXJlIG90aGVyIG5hbWVkIHNsb3RzLlwiLFxuICAgICAgICAgICAgICBzbG90QmluZGluZyQxXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuIHRvIGl0cyBkZWZhdWx0IHNsb3RcbiAgICAgICAgdmFyIHNsb3RzID0gZWwuc2NvcGVkU2xvdHMgfHwgKGVsLnNjb3BlZFNsb3RzID0ge30pO1xuICAgICAgICB2YXIgcmVmJDEgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyQxKTtcbiAgICAgICAgdmFyIG5hbWUkMSA9IHJlZiQxLm5hbWU7XG4gICAgICAgIHZhciBkeW5hbWljJDEgPSByZWYkMS5keW5hbWljO1xuICAgICAgICB2YXIgc2xvdENvbnRhaW5lciA9IHNsb3RzW25hbWUkMV0gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCk7XG4gICAgICAgIHNsb3RDb250YWluZXIuc2xvdFRhcmdldCA9IG5hbWUkMTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWMkMTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGlmICghYy5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgIGMucGFyZW50ID0gc2xvdENvbnRhaW5lcjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90U2NvcGUgPSBzbG90QmluZGluZyQxLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47XG4gICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBhcyB0aGV5IGFyZSByZXR1cm5lZCBmcm9tIHNjb3BlZFNsb3RzIG5vd1xuICAgICAgICBlbC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAvLyBtYXJrIGVsIG5vbi1wbGFpbiBzbyBkYXRhIGdldHMgZ2VuZXJhdGVkXG4gICAgICAgIGVsLnBsYWluID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNsb3ROYW1lIChiaW5kaW5nKSB7XG4gIHZhciBuYW1lID0gYmluZGluZy5uYW1lLnJlcGxhY2Uoc2xvdFJFLCAnJyk7XG4gIGlmICghbmFtZSkge1xuICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgbmFtZSA9ICdkZWZhdWx0JztcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybiQyKFxuICAgICAgICBcInYtc2xvdCBzaG9ydGhhbmQgc3ludGF4IHJlcXVpcmVzIGEgc2xvdCBuYW1lLlwiLFxuICAgICAgICBiaW5kaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSlcbiAgICAvLyBkeW5hbWljIFtuYW1lXVxuICAgID8geyBuYW1lOiBuYW1lLnNsaWNlKDEsIC0xKSwgZHluYW1pYzogdHJ1ZSB9XG4gICAgLy8gc3RhdGljIG5hbWVcbiAgICA6IHsgbmFtZTogKFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIlwiKSwgZHluYW1pYzogZmFsc2UgfVxufVxuXG4vLyBoYW5kbGUgPHNsb3QvPiBvdXRsZXRzXG5mdW5jdGlvbiBwcm9jZXNzU2xvdE91dGxldCAoZWwpIHtcbiAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICBpZiAoZWwua2V5KSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgIFwiYW5kIGNhbiBwb3NzaWJseSBleHBhbmQgaW50byBtdWx0aXBsZSBlbGVtZW50cy4gXCIgK1xuICAgICAgICBcIlVzZSB0aGUga2V5IG9uIGEgd3JhcHBpbmcgZWxlbWVudCBpbnN0ZWFkLlwiLFxuICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50IChlbCkge1xuICB2YXIgYmluZGluZztcbiAgaWYgKChiaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdpcycpKSkge1xuICAgIGVsLmNvbXBvbmVudCA9IGJpbmRpbmc7XG4gIH1cbiAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICdpbmxpbmUtdGVtcGxhdGUnKSAhPSBudWxsKSB7XG4gICAgZWwuaW5saW5lVGVtcGxhdGUgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyAoZWwpIHtcbiAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gIHZhciBpLCBsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBzeW5jR2VuLCBpc0R5bmFtaWM7XG4gIGZvciAoaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgIHZhbHVlID0gbGlzdFtpXS52YWx1ZTtcbiAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkge1xuICAgICAgLy8gbWFyayBlbGVtZW50IGFzIGR5bmFtaWNcbiAgICAgIGVsLmhhc0JpbmRpbmdzID0gdHJ1ZTtcbiAgICAgIC8vIG1vZGlmaWVyc1xuICAgICAgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllcnMobmFtZS5yZXBsYWNlKGRpclJFLCAnJykpO1xuICAgICAgLy8gc3VwcG9ydCAuZm9vIHNob3J0aGFuZCBzeW50YXggZm9yIHRoZSAucHJvcCBtb2RpZmllclxuICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kUkUudGVzdChuYW1lKSkgeyAvLyB2LWJpbmRcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZpbHRlcnModmFsdWUpO1xuICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAoXCJUaGUgdmFsdWUgZm9yIGEgdi1iaW5kIGV4cHJlc3Npb24gY2Fubm90IGJlIGVtcHR5LiBGb3VuZCBpbiBcXFwidi1iaW5kOlwiICsgbmFtZSArIFwiXFxcIlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgIGlmIChtb2RpZmllcnMucHJvcCAmJiAhaXNEeW5hbWljKSB7XG4gICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpIHsgbmFtZSA9ICdpbm5lckhUTUwnOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgIHN5bmNHZW4gPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgXCIkZXZlbnRcIik7XG4gICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChjYW1lbGl6ZShuYW1lKSkpLFxuICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoXG4gICAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChoeXBoZW5hdGUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgYWRkSGFuZGxlcihcbiAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAoXCJcXFwidXBkYXRlOlxcXCIrKFwiICsgbmFtZSArIFwiKVwiKSxcbiAgICAgICAgICAgICAgICBzeW5jR2VuLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgd2FybiQyLFxuICAgICAgICAgICAgICAgIGxpc3RbaV0sXG4gICAgICAgICAgICAgICAgdHJ1ZSAvLyBkeW5hbWljXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgobW9kaWZpZXJzICYmIG1vZGlmaWVycy5wcm9wKSB8fCAoXG4gICAgICAgICAgIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSlcbiAgICAgICAgKSkge1xuICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9uUkUudGVzdChuYW1lKSkgeyAvLyB2LW9uXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob25SRSwgJycpO1xuICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiQyLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgfSBlbHNlIHsgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShkaXJSRSwgJycpO1xuICAgICAgICAvLyBwYXJzZSBhcmdcbiAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgIHZhciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRjaFsxXTtcbiAgICAgICAgaXNEeW5hbWljID0gZmFsc2U7XG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCAtKGFyZy5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhZGREaXJlY3RpdmUoZWwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIGlzRHluYW1pYywgbW9kaWZpZXJzLCBsaXN0W2ldKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICBjaGVja0ZvckFsaWFzTW9kZWwoZWwsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsaXRlcmFsIGF0dHJpYnV0ZVxuICAgICAge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHZhbHVlLCBkZWxpbWl0ZXJzKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgaWQ9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDppZD1cInZhbFwiPi4nLFxuICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAvLyAjNjg4NyBmaXJlZm94IGRvZXNuJ3QgdXBkYXRlIG11dGVkIHN0YXRlIGlmIHNldCB2aWEgYXR0cmlidXRlXG4gICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cbiAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgbmFtZSA9PT0gJ211dGVkJyAmJlxuICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xuICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCAndHJ1ZScsIGxpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0luRm9yIChlbCkge1xuICB2YXIgcGFyZW50ID0gZWw7XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LmZvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBwYXJzZU1vZGlmaWVycyAobmFtZSkge1xuICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKG1vZGlmaWVyUkUpO1xuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgcmV0ID0ge307XG4gICAgbWF0Y2guZm9yRWFjaChmdW5jdGlvbiAobSkgeyByZXRbbS5zbGljZSgxKV0gPSB0cnVlOyB9KTtcbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUF0dHJzTWFwIChhdHRycykge1xuICB2YXIgbWFwID0ge307XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKFxuICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2VcbiAgICApIHtcbiAgICAgIHdhcm4kMignZHVwbGljYXRlIGF0dHJpYnV0ZTogJyArIGF0dHJzW2ldLm5hbWUsIGF0dHJzW2ldKTtcbiAgICB9XG4gICAgbWFwW2F0dHJzW2ldLm5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG4vLyBmb3Igc2NyaXB0IChlLmcuIHR5cGU9XCJ4L3RlbXBsYXRlXCIpIG9yIHN0eWxlLCBkbyBub3QgZGVjb2RlIGNvbnRlbnRcbmZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwpIHtcbiAgcmV0dXJuIGVsLnRhZyA9PT0gJ3NjcmlwdCcgfHwgZWwudGFnID09PSAnc3R5bGUnXG59XG5cbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkge1xuICByZXR1cm4gKFxuICAgIGVsLnRhZyA9PT0gJ3N0eWxlJyB8fFxuICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmIChcbiAgICAgICFlbC5hdHRyc01hcC50eXBlIHx8XG4gICAgICBlbC5hdHRyc01hcC50eXBlID09PSAndGV4dC9qYXZhc2NyaXB0J1xuICAgICkpXG4gIClcbn1cblxudmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG52YXIgaWVOU1ByZWZpeCA9IC9eTlNcXGQrOi87XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRycykge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgIGlmICghaWVOU0J1Zy50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGF0dHIubmFtZSA9IGF0dHIubmFtZS5yZXBsYWNlKGllTlNQcmVmaXgsICcnKTtcbiAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yQWxpYXNNb2RlbCAoZWwsIHZhbHVlKSB7XG4gIHZhciBfZWwgPSBlbDtcbiAgd2hpbGUgKF9lbCkge1xuICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlhcyA9PT0gdmFsdWUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICAgIFwiWW91IGFyZSBiaW5kaW5nIHYtbW9kZWwgZGlyZWN0bHkgdG8gYSB2LWZvciBpdGVyYXRpb24gYWxpYXMuIFwiICtcbiAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAgICAgICBcIkNvbnNpZGVyIHVzaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHVzZSB2LW1vZGVsIG9uIGFuIG9iamVjdCBwcm9wZXJ0eSBpbnN0ZWFkLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICApO1xuICAgIH1cbiAgICBfZWwgPSBfZWwucGFyZW50O1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBwcmVUcmFuc2Zvcm1Ob2RlIChlbCwgb3B0aW9ucykge1xuICBpZiAoZWwudGFnID09PSAnaW5wdXQnKSB7XG4gICAgdmFyIG1hcCA9IGVsLmF0dHJzTWFwO1xuICAgIGlmICghbWFwWyd2LW1vZGVsJ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciB0eXBlQmluZGluZztcbiAgICBpZiAobWFwWyc6dHlwZSddIHx8IG1hcFsndi1iaW5kOnR5cGUnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3R5cGUnKTtcbiAgICB9XG4gICAgaWYgKCFtYXAudHlwZSAmJiAhdHlwZUJpbmRpbmcgJiYgbWFwWyd2LWJpbmQnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIiArIChtYXBbJ3YtYmluZCddKSArIFwiKS50eXBlXCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVCaW5kaW5nKSB7XG4gICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgdmFyIGlmQ29uZGl0aW9uRXh0cmEgPSBpZkNvbmRpdGlvbiA/IChcIiYmKFwiICsgaWZDb25kaXRpb24gKyBcIilcIikgOiBcIlwiO1xuICAgICAgdmFyIGhhc0Vsc2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJywgdHJ1ZSkgIT0gbnVsbDtcbiAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAvLyAxLiBjaGVja2JveFxuICAgICAgdmFyIGJyYW5jaDAgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgcHJvY2Vzc0ZvcihicmFuY2gwKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMCwgJ3R5cGUnLCAnY2hlY2tib3gnKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgYnJhbmNoMC5wcm9jZXNzZWQgPSB0cnVlOyAvLyBwcmV2ZW50IGl0IGZyb20gZG91YmxlLXByb2Nlc3NlZFxuICAgICAgYnJhbmNoMC5pZiA9IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0nY2hlY2tib3gnXCIgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IGJyYW5jaDAuaWYsXG4gICAgICAgIGJsb2NrOiBicmFuY2gwXG4gICAgICB9KTtcbiAgICAgIC8vIDIuIGFkZCByYWRpbyBlbHNlLWlmIGNvbmRpdGlvblxuICAgICAgdmFyIGJyYW5jaDEgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMSwgJ3R5cGUnLCAncmFkaW8nKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDEsIG9wdGlvbnMpO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0ncmFkaW8nXCIgKyBpZkNvbmRpdGlvbkV4dHJhLFxuICAgICAgICBibG9jazogYnJhbmNoMVxuICAgICAgfSk7XG4gICAgICAvLyAzLiBvdGhlclxuICAgICAgdmFyIGJyYW5jaDIgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMiwgJzp0eXBlJywgdHlwZUJpbmRpbmcpO1xuICAgICAgcHJvY2Vzc0VsZW1lbnQoYnJhbmNoMiwgb3B0aW9ucyk7XG4gICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgIGV4cDogaWZDb25kaXRpb24sXG4gICAgICAgIGJsb2NrOiBicmFuY2gyXG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc0Vsc2UpIHtcbiAgICAgICAgYnJhbmNoMC5lbHNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgIGJyYW5jaDAuZWxzZWlmID0gZWxzZUlmQ29uZGl0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnJhbmNoMFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUFTVEVsZW1lbnQgKGVsKSB7XG4gIHJldHVybiBjcmVhdGVBU1RFbGVtZW50KGVsLnRhZywgZWwuYXR0cnNMaXN0LnNsaWNlKCksIGVsLnBhcmVudClcbn1cblxudmFyIG1vZGVsJDEgPSB7XG4gIHByZVRyYW5zZm9ybU5vZGU6IHByZVRyYW5zZm9ybU5vZGVcbn07XG5cbnZhciBtb2R1bGVzJDEgPSBbXG4gIGtsYXNzJDEsXG4gIHN0eWxlJDEsXG4gIG1vZGVsJDFcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0ZXh0IChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCAoXCJfcyhcIiArIChkaXIudmFsdWUpICsgXCIpXCIpLCBkaXIpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBodG1sIChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSwgZGlyKTtcbiAgfVxufVxuXG52YXIgZGlyZWN0aXZlcyQxID0ge1xuICBtb2RlbDogbW9kZWwsXG4gIHRleHQ6IHRleHQsXG4gIGh0bWw6IGh0bWxcbn07XG5cbi8qICAqL1xuXG52YXIgYmFzZU9wdGlvbnMgPSB7XG4gIGV4cGVjdEhUTUw6IHRydWUsXG4gIG1vZHVsZXM6IG1vZHVsZXMkMSxcbiAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyQxLFxuICBpc1ByZVRhZzogaXNQcmVUYWcsXG4gIGlzVW5hcnlUYWc6IGlzVW5hcnlUYWcsXG4gIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgY2FuQmVMZWZ0T3BlblRhZzogY2FuQmVMZWZ0T3BlblRhZyxcbiAgaXNSZXNlcnZlZFRhZzogaXNSZXNlcnZlZFRhZyxcbiAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gIHN0YXRpY0tleXM6IGdlblN0YXRpY0tleXMobW9kdWxlcyQxKVxufTtcblxuLyogICovXG5cbnZhciBpc1N0YXRpY0tleTtcbnZhciBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWc7XG5cbnZhciBnZW5TdGF0aWNLZXlzQ2FjaGVkID0gY2FjaGVkKGdlblN0YXRpY0tleXMkMSk7XG5cbi8qKlxuICogR29hbCBvZiB0aGUgb3B0aW1pemVyOiB3YWxrIHRoZSBnZW5lcmF0ZWQgdGVtcGxhdGUgQVNUIHRyZWVcbiAqIGFuZCBkZXRlY3Qgc3ViLXRyZWVzIHRoYXQgYXJlIHB1cmVseSBzdGF0aWMsIGkuZS4gcGFydHMgb2ZcbiAqIHRoZSBET00gdGhhdCBuZXZlciBuZWVkcyB0byBjaGFuZ2UuXG4gKlxuICogT25jZSB3ZSBkZXRlY3QgdGhlc2Ugc3ViLXRyZWVzLCB3ZSBjYW46XG4gKlxuICogMS4gSG9pc3QgdGhlbSBpbnRvIGNvbnN0YW50cywgc28gdGhhdCB3ZSBubyBsb25nZXIgbmVlZCB0b1xuICogICAgY3JlYXRlIGZyZXNoIG5vZGVzIGZvciB0aGVtIG9uIGVhY2ggcmUtcmVuZGVyO1xuICogMi4gQ29tcGxldGVseSBza2lwIHRoZW0gaW4gdGhlIHBhdGNoaW5nIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIG9wdGltaXplIChyb290LCBvcHRpb25zKSB7XG4gIGlmICghcm9vdCkgeyByZXR1cm4gfVxuICBpc1N0YXRpY0tleSA9IGdlblN0YXRpY0tleXNDYWNoZWQob3B0aW9ucy5zdGF0aWNLZXlzIHx8ICcnKTtcbiAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAvLyBmaXJzdCBwYXNzOiBtYXJrIGFsbCBub24tc3RhdGljIG5vZGVzLlxuICBtYXJrU3RhdGljJDEocm9vdCk7XG4gIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgbWFya1N0YXRpY1Jvb3RzKHJvb3QsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxIChrZXlzKSB7XG4gIHJldHVybiBtYWtlTWFwKFxuICAgICd0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcCcgK1xuICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKVxuICApXG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9kZSkge1xuICBub2RlLnN0YXRpYyA9IGlzU3RhdGljKG5vZGUpO1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgLy8gMS4gY29tcG9uZW50cyBub3QgYWJsZSB0byBtdXRhdGUgc2xvdCBub2Rlc1xuICAgIC8vIDIuIHN0YXRpYyBzbG90IGNvbnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxvYWRpbmdcbiAgICBpZiAoXG4gICAgICAhaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJlxuICAgICAgbm9kZS50YWcgIT09ICdzbG90JyAmJlxuICAgICAgbm9kZS5hdHRyc01hcFsnaW5saW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XG4gICAgICBtYXJrU3RhdGljJDEoY2hpbGQpO1xuICAgICAgaWYgKCFjaGlsZC5zdGF0aWMpIHtcbiAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkkMSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgdmFyIGJsb2NrID0gbm9kZS5pZkNvbmRpdGlvbnNbaSQxXS5ibG9jaztcbiAgICAgICAgbWFya1N0YXRpYyQxKGJsb2NrKTtcbiAgICAgICAgaWYgKCFibG9jay5zdGF0aWMpIHtcbiAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNSb290cyAobm9kZSwgaXNJbkZvcikge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgaWYgKG5vZGUuc3RhdGljIHx8IG5vZGUub25jZSkge1xuICAgICAgbm9kZS5zdGF0aWNJbkZvciA9IGlzSW5Gb3I7XG4gICAgfVxuICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgLy8gYXJlIG5vdCBqdXN0IHN0YXRpYyB0ZXh0LiBPdGhlcndpc2UgdGhlIGNvc3Qgb2YgaG9pc3Rpbmcgb3V0IHdpbGxcbiAgICAvLyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9mZiB0byBqdXN0IGFsd2F5cyByZW5kZXIgaXQgZnJlc2guXG4gICAgaWYgKG5vZGUuc3RhdGljICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmICEoXG4gICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgbm9kZS5jaGlsZHJlblswXS50eXBlID09PSAzXG4gICAgKSkge1xuICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnN0YXRpY1Jvb3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlzSW5Gb3IgfHwgISFub2RlLmZvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJsb2NrLCBpc0luRm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0aWMgKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMikgeyAvLyBleHByZXNzaW9uXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gMykgeyAvLyB0ZXh0XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gISEobm9kZS5wcmUgfHwgKFxuICAgICFub2RlLmhhc0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGluZ3NcbiAgICAhbm9kZS5pZiAmJiAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgIWlzQnVpbHRJblRhZyhub2RlLnRhZykgJiYgLy8gbm90IGEgYnVpbHQtaW5cbiAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGNvbXBvbmVudFxuICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgIE9iamVjdC5rZXlzKG5vZGUpLmV2ZXJ5KGlzU3RhdGljS2V5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvciAobm9kZSkge1xuICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbnZhciBmbkV4cFJFID0gL14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb25cXHMqKD86W1xcdyRdKyk/XFxzKlxcKC87XG52YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xudmFyIHNpbXBsZVBhdGhSRSA9IC9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC87XG5cbi8vIEtleWJvYXJkRXZlbnQua2V5Q29kZSBhbGlhc2VzXG52YXIga2V5Q29kZXMgPSB7XG4gIGVzYzogMjcsXG4gIHRhYjogOSxcbiAgZW50ZXI6IDEzLFxuICBzcGFjZTogMzIsXG4gIHVwOiAzOCxcbiAgbGVmdDogMzcsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gICdkZWxldGUnOiBbOCwgNDZdXG59O1xuXG4vLyBLZXlib2FyZEV2ZW50LmtleSBhbGlhc2VzXG52YXIga2V5TmFtZXMgPSB7XG4gIC8vICM3ODgwOiBJRTExIGFuZCBFZGdlIHVzZSBgRXNjYCBmb3IgRXNjYXBlIGtleSBuYW1lLlxuICBlc2M6IFsnRXNjJywgJ0VzY2FwZSddLFxuICB0YWI6ICdUYWInLFxuICBlbnRlcjogJ0VudGVyJyxcbiAgLy8gIzkxMTI6IElFMTEgdXNlcyBgU3BhY2ViYXJgIGZvciBTcGFjZSBrZXkgbmFtZS5cbiAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAvLyAjNzgwNjogSUUxMSB1c2VzIGtleSBuYW1lcyB3aXRob3V0IGBBcnJvd2AgcHJlZml4IGZvciBhcnJvdyBrZXlzLlxuICB1cDogWydVcCcsICdBcnJvd1VwJ10sXG4gIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgcmlnaHQ6IFsnUmlnaHQnLCAnQXJyb3dSaWdodCddLFxuICBkb3duOiBbJ0Rvd24nLCAnQXJyb3dEb3duJ10sXG4gIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgJ2RlbGV0ZSc6IFsnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdEZWwnXVxufTtcblxuLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcbi8vIHRoZSBsaXN0ZW5lciBmb3IgLm9uY2VcbnZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIChcImlmKFwiICsgY29uZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuXG52YXIgbW9kaWZpZXJDb2RlID0ge1xuICBzdG9wOiAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOycsXG4gIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICBzZWxmOiBnZW5HdWFyZChcIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLFxuICBjdHJsOiBnZW5HdWFyZChcIiEkZXZlbnQuY3RybEtleVwiKSxcbiAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgYWx0OiBnZW5HdWFyZChcIiEkZXZlbnQuYWx0S2V5XCIpLFxuICBtZXRhOiBnZW5HdWFyZChcIiEkZXZlbnQubWV0YUtleVwiKSxcbiAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgbWlkZGxlOiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIpLFxuICByaWdodDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMlwiKVxufTtcblxuZnVuY3Rpb24gZ2VuSGFuZGxlcnMgKFxuICBldmVudHMsXG4gIGlzTmF0aXZlXG4pIHtcbiAgdmFyIHByZWZpeCA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOicgOiAnb246JztcbiAgdmFyIHN0YXRpY0hhbmRsZXJzID0gXCJcIjtcbiAgdmFyIGR5bmFtaWNIYW5kbGVycyA9IFwiXCI7XG4gIGZvciAodmFyIG5hbWUgaW4gZXZlbnRzKSB7XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV0pO1xuICAgIGlmIChldmVudHNbbmFtZV0gJiYgZXZlbnRzW25hbWVdLmR5bmFtaWMpIHtcbiAgICAgIGR5bmFtaWNIYW5kbGVycyArPSBuYW1lICsgXCIsXCIgKyBoYW5kbGVyQ29kZSArIFwiLFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aWNIYW5kbGVycyArPSBcIlxcXCJcIiArIG5hbWUgKyBcIlxcXCI6XCIgKyBoYW5kbGVyQ29kZSArIFwiLFwiO1xuICAgIH1cbiAgfVxuICBzdGF0aWNIYW5kbGVycyA9IFwie1wiICsgKHN0YXRpY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIn1cIjtcbiAgaWYgKGR5bmFtaWNIYW5kbGVycykge1xuICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiICsgc3RhdGljSGFuZGxlcnMgKyBcIixbXCIgKyAoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgc3RhdGljSGFuZGxlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5IYW5kbGVyIChoYW5kbGVyKSB7XG4gIGlmICghaGFuZGxlcikge1xuICAgIHJldHVybiAnZnVuY3Rpb24oKXt9J1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICByZXR1cm4gKFwiW1wiICsgKGhhbmRsZXIubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBnZW5IYW5kbGVyKGhhbmRsZXIpOyB9KS5qb2luKCcsJykpICsgXCJdXCIpXG4gIH1cblxuICB2YXIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gIHZhciBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IGZuRXhwUkUudGVzdChoYW5kbGVyLnZhbHVlKTtcbiAgdmFyIGlzRnVuY3Rpb25JbnZvY2F0aW9uID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZS5yZXBsYWNlKGZuSW52b2tlUkUsICcnKSk7XG5cbiAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgIGlmIChpc01ldGhvZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlXG4gICAgfVxuICAgIHJldHVybiAoXCJmdW5jdGlvbigkZXZlbnQpe1wiICsgKGlzRnVuY3Rpb25JbnZvY2F0aW9uID8gKFwicmV0dXJuIFwiICsgKGhhbmRsZXIudmFsdWUpKSA6IGhhbmRsZXIudmFsdWUpICsgXCJ9XCIpIC8vIGlubGluZSBzdGF0ZW1lbnRcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29kZSA9ICcnO1xuICAgIHZhciBnZW5Nb2RpZmllckNvZGUgPSAnJztcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBtb2RpZmllckNvZGVba2V5XTtcbiAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2V4YWN0Jykge1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0gKGhhbmRsZXIubW9kaWZpZXJzKTtcbiAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFxuICAgICAgICAgIFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnbWV0YSddXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gIW1vZGlmaWVyc1trZXlNb2RpZmllcl07IH0pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gKFwiJGV2ZW50LlwiICsga2V5TW9kaWZpZXIgKyBcIktleVwiKTsgfSlcbiAgICAgICAgICAgIC5qb2luKCd8fCcpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIG1vZGlmaWVycyBsaWtlIHByZXZlbnQgYW5kIHN0b3AgZ2V0IGV4ZWN1dGVkIGFmdGVyIGtleSBmaWx0ZXJpbmdcbiAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICB9XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gaXNNZXRob2RQYXRoXG4gICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKCRldmVudClcIilcbiAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgPyAoXCJyZXR1cm4gKFwiICsgKGhhbmRsZXIudmFsdWUpICsgXCIpKCRldmVudClcIilcbiAgICAgICAgOiBpc0Z1bmN0aW9uSW52b2NhdGlvblxuICAgICAgICAgID8gKFwicmV0dXJuIFwiICsgKGhhbmRsZXIudmFsdWUpKVxuICAgICAgICAgIDogaGFuZGxlci52YWx1ZTtcbiAgICByZXR1cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIGNvZGUgKyBoYW5kbGVyQ29kZSArIFwifVwiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbktleUZpbHRlciAoa2V5cykge1xuICByZXR1cm4gKFxuICAgIC8vIG1ha2Ugc3VyZSB0aGUga2V5IGZpbHRlcnMgb25seSBhcHBseSB0byBLZXlib2FyZEV2ZW50c1xuICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgLy8ga2V5IGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGtleUNvZGUgcHJvcGVydHkuLi5cbiAgICBcImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIgK1xuICAgIChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpKSArIFwiKXJldHVybiBudWxsO1wiXG4gIClcbn1cblxuZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZSAoa2V5KSB7XG4gIHZhciBrZXlWYWwgPSBwYXJzZUludChrZXksIDEwKTtcbiAgaWYgKGtleVZhbCkge1xuICAgIHJldHVybiAoXCIkZXZlbnQua2V5Q29kZSE9PVwiICsga2V5VmFsKVxuICB9XG4gIHZhciBrZXlDb2RlID0ga2V5Q29kZXNba2V5XTtcbiAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICByZXR1cm4gKFxuICAgIFwiX2soJGV2ZW50LmtleUNvZGUsXCIgK1xuICAgIChKU09OLnN0cmluZ2lmeShrZXkpKSArIFwiLFwiICtcbiAgICAoSlNPTi5zdHJpbmdpZnkoa2V5Q29kZSkpICsgXCIsXCIgK1xuICAgIFwiJGV2ZW50LmtleSxcIiArXG4gICAgXCJcIiArIChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgIFwiKVwiXG4gIClcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG9uIChlbCwgZGlyKSB7XG4gIGlmIChkaXIubW9kaWZpZXJzKSB7XG4gICAgd2FybihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XG4gIH1cbiAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJfZyhcIiArIGNvZGUgKyBcIixcIiArIChkaXIudmFsdWUpICsgXCIpXCIpOyB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZCQxIChlbCwgZGlyKSB7XG4gIGVsLndyYXBEYXRhID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICByZXR1cm4gKFwiX2IoXCIgKyBjb2RlICsgXCIsJ1wiICsgKGVsLnRhZykgKyBcIicsXCIgKyAoZGlyLnZhbHVlKSArIFwiLFwiICsgKGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5wcm9wID8gJ3RydWUnIDogJ2ZhbHNlJykgKyAoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnN5bmMgPyAnLHRydWUnIDogJycpICsgXCIpXCIpXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gIG9uOiBvbixcbiAgYmluZDogYmluZCQxLFxuICBjbG9hazogbm9vcFxufTtcblxuLyogICovXG5cblxuXG5cblxudmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLndhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICB0aGlzLmRhdGFHZW5GbnMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ2dlbkRhdGEnKTtcbiAgdGhpcy5kaXJlY3RpdmVzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmFzZURpcmVjdGl2ZXMpLCBvcHRpb25zLmRpcmVjdGl2ZXMpO1xuICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgdGhpcy5tYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcbiAgdGhpcy5vbmNlSWQgPSAwO1xuICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xuICB0aGlzLnByZSA9IGZhbHNlO1xufTtcblxuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgYXN0LFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgdmFyIGNvZGUgPSBhc3QgPyBnZW5FbGVtZW50KGFzdCwgc3RhdGUpIDogJ19jKFwiZGl2XCIpJztcbiAgcmV0dXJuIHtcbiAgICByZW5kZXI6IChcIndpdGgodGhpcyl7cmV0dXJuIFwiICsgY29kZSArIFwifVwiKSxcbiAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRlLnN0YXRpY1JlbmRlckZuc1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbkVsZW1lbnQgKGVsLCBzdGF0ZSkge1xuICBpZiAoZWwucGFyZW50KSB7XG4gICAgZWwucHJlID0gZWwucHJlIHx8IGVsLnBhcmVudC5wcmU7XG4gIH1cblxuICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0ICYmICFzdGF0ZS5wcmUpIHtcbiAgICByZXR1cm4gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndm9pZCAwJ1xuICB9IGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgcmV0dXJuIGdlblNsb3QoZWwsIHN0YXRlKVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbXBvbmVudCBvciBlbGVtZW50XG4gICAgdmFyIGNvZGU7XG4gICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgY29kZSA9IGdlbkNvbXBvbmVudChlbC5jb21wb25lbnQsIGVsLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkYXRhO1xuICAgICAgaWYgKCFlbC5wbGFpbiB8fCAoZWwucHJlICYmIHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKSkpIHtcbiAgICAgICAgZGF0YSA9IGdlbkRhdGEkMihlbCwgc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1wbGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIHRydWUpO1xuICAgICAgY29kZSA9IFwiX2MoJ1wiICsgKGVsLnRhZykgKyBcIidcIiArIChkYXRhID8gKFwiLFwiICsgZGF0YSkgOiAnJykgKyAoY2hpbGRyZW4gPyAoXCIsXCIgKyBjaGlsZHJlbikgOiAnJykgKyBcIilcIjtcbiAgICB9XG4gICAgLy8gbW9kdWxlIHRyYW5zZm9ybXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvZGVcbiAgfVxufVxuXG4vLyBob2lzdCBzdGF0aWMgc3ViLXRyZWVzIG91dFxuZnVuY3Rpb24gZ2VuU3RhdGljIChlbCwgc3RhdGUpIHtcbiAgZWwuc3RhdGljUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgLy8gU29tZSBlbGVtZW50cyAodGVtcGxhdGVzKSBuZWVkIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSBpbnNpZGUgb2YgYSB2LXByZVxuICAvLyBub2RlLiAgQWxsIHByZSBub2RlcyBhcmUgc3RhdGljIHJvb3RzLCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBsb2NhdGlvbiB0b1xuICAvLyB3cmFwIGEgc3RhdGUgY2hhbmdlIGFuZCByZXNldCBpdCB1cG9uIGV4aXRpbmcgdGhlIHByZSBub2RlLlxuICB2YXIgb3JpZ2luYWxQcmVTdGF0ZSA9IHN0YXRlLnByZTtcbiAgaWYgKGVsLnByZSkge1xuICAgIHN0YXRlLnByZSA9IGVsLnByZTtcbiAgfVxuICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5FbGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtcbiAgc3RhdGUucHJlID0gb3JpZ2luYWxQcmVTdGF0ZTtcbiAgcmV0dXJuIChcIl9tKFwiICsgKHN0YXRlLnN0YXRpY1JlbmRlckZucy5sZW5ndGggLSAxKSArIChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJykgKyBcIilcIilcbn1cblxuLy8gdi1vbmNlXG5mdW5jdGlvbiBnZW5PbmNlIChlbCwgc3RhdGUpIHtcbiAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgdmFyIGtleSA9ICcnO1xuICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5mb3IpIHtcbiAgICAgICAga2V5ID0gcGFyZW50LmtleTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIGlmICgha2V5KSB7XG4gICAgICBzdGF0ZS53YXJuKFxuICAgICAgICBcInYtb25jZSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSB2LWZvciB0aGF0IGlzIGtleWVkLiBcIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3Ytb25jZSddXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgICByZXR1cm4gKFwiX28oXCIgKyAoZ2VuRWxlbWVudChlbCwgc3RhdGUpKSArIFwiLFwiICsgKHN0YXRlLm9uY2VJZCsrKSArIFwiLFwiICsga2V5ICsgXCIpXCIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdlblN0YXRpYyhlbCwgc3RhdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuSWYgKFxuICBlbCxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0RW1wdHlcbikge1xuICBlbC5pZlByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICByZXR1cm4gZ2VuSWZDb25kaXRpb25zKGVsLmlmQ29uZGl0aW9ucy5zbGljZSgpLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSlcbn1cblxuZnVuY3Rpb24gZ2VuSWZDb25kaXRpb25zIChcbiAgY29uZGl0aW9ucyxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0RW1wdHlcbikge1xuICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsdEVtcHR5IHx8ICdfZSgpJ1xuICB9XG5cbiAgdmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnMuc2hpZnQoKTtcbiAgaWYgKGNvbmRpdGlvbi5leHApIHtcbiAgICByZXR1cm4gKFwiKFwiICsgKGNvbmRpdGlvbi5leHApICsgXCIpP1wiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkgKyBcIjpcIiArIChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyAoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKSlcbiAgfVxuXG4gIC8vIHYtaWYgd2l0aCB2LW9uY2Ugc2hvdWxkIGdlbmVyYXRlIGNvZGUgbGlrZSAoYSk/X20oMCk6X20oMSlcbiAgZnVuY3Rpb24gZ2VuVGVybmFyeUV4cCAoZWwpIHtcbiAgICByZXR1cm4gYWx0R2VuXG4gICAgICA/IGFsdEdlbihlbCwgc3RhdGUpXG4gICAgICA6IGVsLm9uY2VcbiAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgOiBnZW5FbGVtZW50KGVsLCBzdGF0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5Gb3IgKFxuICBlbCxcbiAgc3RhdGUsXG4gIGFsdEdlbixcbiAgYWx0SGVscGVyXG4pIHtcbiAgdmFyIGV4cCA9IGVsLmZvcjtcbiAgdmFyIGFsaWFzID0gZWwuYWxpYXM7XG4gIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IxKSkgOiAnJztcbiAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IChcIixcIiArIChlbC5pdGVyYXRvcjIpKSA6ICcnO1xuXG4gIGlmIChzdGF0ZS5tYXliZUNvbXBvbmVudChlbCkgJiZcbiAgICBlbC50YWcgIT09ICdzbG90JyAmJlxuICAgIGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICFlbC5rZXlcbiAgKSB7XG4gICAgc3RhdGUud2FybihcbiAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LWZvcj1cXFwiXCIgKyBhbGlhcyArIFwiIGluIFwiICsgZXhwICsgXCJcXFwiPjogY29tcG9uZW50IGxpc3RzIHJlbmRlcmVkIHdpdGggXCIgK1xuICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICBcIlNlZSBodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9saXN0Lmh0bWwja2V5IGZvciBtb3JlIGluZm8uXCIsXG4gICAgICBlbC5yYXdBdHRyc01hcFsndi1mb3InXSxcbiAgICAgIHRydWUgLyogdGlwICovXG4gICAgKTtcbiAgfVxuXG4gIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICByZXR1cm4gKGFsdEhlbHBlciB8fCAnX2wnKSArIFwiKChcIiArIGV4cCArIFwiKSxcIiArXG4gICAgXCJmdW5jdGlvbihcIiArIGFsaWFzICsgaXRlcmF0b3IxICsgaXRlcmF0b3IyICsgXCIpe1wiICtcbiAgICAgIFwicmV0dXJuIFwiICsgKChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICd9KSdcbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSQyIChlbCwgc3RhdGUpIHtcbiAgdmFyIGRhdGEgPSAneyc7XG5cbiAgLy8gZGlyZWN0aXZlcyBmaXJzdC5cbiAgLy8gZGlyZWN0aXZlcyBtYXkgbXV0YXRlIHRoZSBlbCdzIG90aGVyIHByb3BlcnRpZXMgYmVmb3JlIHRoZXkgYXJlIGdlbmVyYXRlZC5cbiAgdmFyIGRpcnMgPSBnZW5EaXJlY3RpdmVzKGVsLCBzdGF0ZSk7XG4gIGlmIChkaXJzKSB7IGRhdGEgKz0gZGlycyArICcsJzsgfVxuXG4gIC8vIGtleVxuICBpZiAoZWwua2V5KSB7XG4gICAgZGF0YSArPSBcImtleTpcIiArIChlbC5rZXkpICsgXCIsXCI7XG4gIH1cbiAgLy8gcmVmXG4gIGlmIChlbC5yZWYpIHtcbiAgICBkYXRhICs9IFwicmVmOlwiICsgKGVsLnJlZikgKyBcIixcIjtcbiAgfVxuICBpZiAoZWwucmVmSW5Gb3IpIHtcbiAgICBkYXRhICs9IFwicmVmSW5Gb3I6dHJ1ZSxcIjtcbiAgfVxuICAvLyBwcmVcbiAgaWYgKGVsLnByZSkge1xuICAgIGRhdGEgKz0gXCJwcmU6dHJ1ZSxcIjtcbiAgfVxuICAvLyByZWNvcmQgb3JpZ2luYWwgdGFnIG5hbWUgZm9yIGNvbXBvbmVudHMgdXNpbmcgXCJpc1wiIGF0dHJpYnV0ZVxuICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgZGF0YSArPSBcInRhZzpcXFwiXCIgKyAoZWwudGFnKSArIFwiXFxcIixcIjtcbiAgfVxuICAvLyBtb2R1bGUgZGF0YSBnZW5lcmF0aW9uIGZ1bmN0aW9uc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmRhdGFHZW5GbnMubGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhICs9IHN0YXRlLmRhdGFHZW5GbnNbaV0oZWwpO1xuICB9XG4gIC8vIGF0dHJpYnV0ZXNcbiAgaWYgKGVsLmF0dHJzKSB7XG4gICAgZGF0YSArPSBcImF0dHJzOlwiICsgKGdlblByb3BzKGVsLmF0dHJzKSkgKyBcIixcIjtcbiAgfVxuICAvLyBET00gcHJvcHNcbiAgaWYgKGVsLnByb3BzKSB7XG4gICAgZGF0YSArPSBcImRvbVByb3BzOlwiICsgKGdlblByb3BzKGVsLnByb3BzKSkgKyBcIixcIjtcbiAgfVxuICAvLyBldmVudCBoYW5kbGVyc1xuICBpZiAoZWwuZXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSkpICsgXCIsXCI7XG4gIH1cbiAgaWYgKGVsLm5hdGl2ZUV2ZW50cykge1xuICAgIGRhdGEgKz0gKGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSkpICsgXCIsXCI7XG4gIH1cbiAgLy8gc2xvdCB0YXJnZXRcbiAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICBpZiAoZWwuc2xvdFRhcmdldCAmJiAhZWwuc2xvdFNjb3BlKSB7XG4gICAgZGF0YSArPSBcInNsb3Q6XCIgKyAoZWwuc2xvdFRhcmdldCkgKyBcIixcIjtcbiAgfVxuICAvLyBzY29wZWQgc2xvdHNcbiAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgZGF0YSArPSAoZ2VuU2NvcGVkU2xvdHMoZWwsIGVsLnNjb3BlZFNsb3RzLCBzdGF0ZSkpICsgXCIsXCI7XG4gIH1cbiAgLy8gY29tcG9uZW50IHYtbW9kZWxcbiAgaWYgKGVsLm1vZGVsKSB7XG4gICAgZGF0YSArPSBcIm1vZGVsOnt2YWx1ZTpcIiArIChlbC5tb2RlbC52YWx1ZSkgKyBcIixjYWxsYmFjazpcIiArIChlbC5tb2RlbC5jYWxsYmFjaykgKyBcIixleHByZXNzaW9uOlwiICsgKGVsLm1vZGVsLmV4cHJlc3Npb24pICsgXCJ9LFwiO1xuICB9XG4gIC8vIGlubGluZS10ZW1wbGF0ZVxuICBpZiAoZWwuaW5saW5lVGVtcGxhdGUpIHtcbiAgICB2YXIgaW5saW5lVGVtcGxhdGUgPSBnZW5JbmxpbmVUZW1wbGF0ZShlbCwgc3RhdGUpO1xuICAgIGlmIChpbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgZGF0YSArPSBpbmxpbmVUZW1wbGF0ZSArIFwiLFwiO1xuICAgIH1cbiAgfVxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC8sJC8sICcnKSArICd9JztcbiAgLy8gdi1iaW5kIGR5bmFtaWMgYXJndW1lbnQgd3JhcFxuICAvLyB2LWJpbmQgd2l0aCBkeW5hbWljIGFyZ3VtZW50cyBtdXN0IGJlIGFwcGxpZWQgdXNpbmcgdGhlIHNhbWUgdi1iaW5kIG9iamVjdFxuICAvLyBtZXJnZSBoZWxwZXIgc28gdGhhdCBjbGFzcy9zdHlsZS9tdXN0VXNlUHJvcCBhdHRycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXG4gIGlmIChlbC5keW5hbWljQXR0cnMpIHtcbiAgICBkYXRhID0gXCJfYihcIiArIGRhdGEgKyBcIixcXFwiXCIgKyAoZWwudGFnKSArIFwiXFxcIixcIiArIChnZW5Qcm9wcyhlbC5keW5hbWljQXR0cnMpKSArIFwiKVwiO1xuICB9XG4gIC8vIHYtYmluZCBkYXRhIHdyYXBcbiAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgZGF0YSA9IGVsLndyYXBEYXRhKGRhdGEpO1xuICB9XG4gIC8vIHYtb24gZGF0YSB3cmFwXG4gIGlmIChlbC53cmFwTGlzdGVuZXJzKSB7XG4gICAgZGF0YSA9IGVsLndyYXBMaXN0ZW5lcnMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gZ2VuRGlyZWN0aXZlcyAoZWwsIHN0YXRlKSB7XG4gIHZhciBkaXJzID0gZWwuZGlyZWN0aXZlcztcbiAgaWYgKCFkaXJzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSAnZGlyZWN0aXZlczpbJztcbiAgdmFyIGhhc1J1bnRpbWUgPSBmYWxzZTtcbiAgdmFyIGksIGwsIGRpciwgbmVlZFJ1bnRpbWU7XG4gIGZvciAoaSA9IDAsIGwgPSBkaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgbmVlZFJ1bnRpbWUgPSB0cnVlO1xuICAgIHZhciBnZW4gPSBzdGF0ZS5kaXJlY3RpdmVzW2Rpci5uYW1lXTtcbiAgICBpZiAoZ2VuKSB7XG4gICAgICAvLyBjb21waWxlLXRpbWUgZGlyZWN0aXZlIHRoYXQgbWFuaXB1bGF0ZXMgQVNULlxuICAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGl0IGFsc28gbmVlZHMgYSBydW50aW1lIGNvdW50ZXJwYXJ0LlxuICAgICAgbmVlZFJ1bnRpbWUgPSAhIWdlbihlbCwgZGlyLCBzdGF0ZS53YXJuKTtcbiAgICB9XG4gICAgaWYgKG5lZWRSdW50aW1lKSB7XG4gICAgICBoYXNSdW50aW1lID0gdHJ1ZTtcbiAgICAgIHJlcyArPSBcIntuYW1lOlxcXCJcIiArIChkaXIubmFtZSkgKyBcIlxcXCIscmF3TmFtZTpcXFwiXCIgKyAoZGlyLnJhd05hbWUpICsgXCJcXFwiXCIgKyAoZGlyLnZhbHVlID8gKFwiLHZhbHVlOihcIiArIChkaXIudmFsdWUpICsgXCIpLGV4cHJlc3Npb246XCIgKyAoSlNPTi5zdHJpbmdpZnkoZGlyLnZhbHVlKSkpIDogJycpICsgKGRpci5hcmcgPyAoXCIsYXJnOlwiICsgKGRpci5pc0R5bmFtaWNBcmcgPyBkaXIuYXJnIDogKFwiXFxcIlwiICsgKGRpci5hcmcpICsgXCJcXFwiXCIpKSkgOiAnJykgKyAoZGlyLm1vZGlmaWVycyA/IChcIixtb2RpZmllcnM6XCIgKyAoSlNPTi5zdHJpbmdpZnkoZGlyLm1vZGlmaWVycykpKSA6ICcnKSArIFwifSxcIjtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc1J1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKSArICddJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlIChlbCwgc3RhdGUpIHtcbiAgdmFyIGFzdCA9IGVsLmNoaWxkcmVuWzBdO1xuICBpZiAoZWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8IGFzdC50eXBlICE9PSAxKSB7XG4gICAgc3RhdGUud2FybihcbiAgICAgICdJbmxpbmUtdGVtcGxhdGUgY29tcG9uZW50cyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudC4nLFxuICAgICAgeyBzdGFydDogZWwuc3RhcnQgfVxuICAgICk7XG4gIH1cbiAgaWYgKGFzdCAmJiBhc3QudHlwZSA9PT0gMSkge1xuICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5lcmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xuICAgIHJldHVybiAoXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIgKyAoaW5saW5lUmVuZGVyRm5zLnJlbmRlcikgKyBcIn0sc3RhdGljUmVuZGVyRm5zOltcIiArIChpbmxpbmVSZW5kZXJGbnMuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gKFwiZnVuY3Rpb24oKXtcIiArIGNvZGUgKyBcIn1cIik7IH0pLmpvaW4oJywnKSkgKyBcIl19XCIpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdHMgKFxuICBlbCxcbiAgc2xvdHMsXG4gIHN0YXRlXG4pIHtcbiAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcbiAgLy8gY29tcG9uZW50cyB3aXRoIG9ubHkgc2NvcGVkIHNsb3RzIHRvIHNraXAgZm9yY2VkIHVwZGF0ZXMgZnJvbSBwYXJlbnQuXG4gIC8vIGJ1dCBpbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gYmFpbC1vdXQgb2YgdGhpcyBvcHRpbWl6YXRpb25cbiAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxuICB2YXIgbmVlZHNGb3JjZVVwZGF0ZSA9IGVsLmZvciB8fCBPYmplY3Qua2V5cyhzbG90cykuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNsb3QgPSBzbG90c1trZXldO1xuICAgIHJldHVybiAoXG4gICAgICBzbG90LnNsb3RUYXJnZXREeW5hbWljIHx8XG4gICAgICBzbG90LmlmIHx8XG4gICAgICBzbG90LmZvciB8fFxuICAgICAgY29udGFpbnNTbG90Q2hpbGQoc2xvdCkgLy8gaXMgcGFzc2luZyBkb3duIHNsb3QgZnJvbSBwYXJlbnQgd2hpY2ggbWF5IGJlIGR5bmFtaWNcbiAgICApXG4gIH0pO1xuXG4gIC8vICM5NTM0OiBpZiBhIGNvbXBvbmVudCB3aXRoIHNjb3BlZCBzbG90cyBpcyBpbnNpZGUgYSBjb25kaXRpb25hbCBicmFuY2gsXG4gIC8vIGl0J3MgcG9zc2libGUgZm9yIHRoZSBzYW1lIGNvbXBvbmVudCB0byBiZSByZXVzZWQgYnV0IHdpdGggZGlmZmVyZW50XG4gIC8vIGNvbXBpbGVkIHNsb3QgY29udGVudC4gVG8gYXZvaWQgdGhhdCwgd2UgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IGJhc2VkIG9uXG4gIC8vIHRoZSBnZW5lcmF0ZWQgY29kZSBvZiBhbGwgdGhlIHNsb3QgY29udGVudHMuXG4gIHZhciBuZWVkc0tleSA9ICEhZWwuaWY7XG5cbiAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXG4gIC8vIGRpc2Nvbm5lY3RlZCBkdWUgdG8gdGhlIGludGVybWVkaWF0ZSBzY29wZSB2YXJpYWJsZSlcbiAgLy8gIzk0MzgsICM5NTA2XG4gIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xuICAvLyBhbmQgc2tpcCBmb3JjZSB1cGRhdGluZyBvbmVzIHRoYXQgZG8gbm90IGFjdHVhbGx5IHVzZSBzY29wZSB2YXJpYWJsZXMuXG4gIGlmICghbmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKFxuICAgICAgICAocGFyZW50LnNsb3RTY29wZSAmJiBwYXJlbnQuc2xvdFNjb3BlICE9PSBlbXB0eVNsb3RTY29wZVRva2VuKSB8fFxuICAgICAgICBwYXJlbnQuZm9yXG4gICAgICApIHtcbiAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAocGFyZW50LmlmKSB7XG4gICAgICAgIG5lZWRzS2V5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdlbmVyYXRlZFNsb3RzID0gT2JqZWN0LmtleXMoc2xvdHMpXG4gICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBnZW5TY29wZWRTbG90KHNsb3RzW2tleV0sIHN0YXRlKTsgfSlcbiAgICAuam9pbignLCcpO1xuXG4gIHJldHVybiAoXCJzY29wZWRTbG90czpfdShbXCIgKyBnZW5lcmF0ZWRTbG90cyArIFwiXVwiICsgKG5lZWRzRm9yY2VVcGRhdGUgPyBcIixudWxsLHRydWVcIiA6IFwiXCIpICsgKCFuZWVkc0ZvcmNlVXBkYXRlICYmIG5lZWRzS2V5ID8gKFwiLG51bGwsZmFsc2UsXCIgKyAoaGFzaChnZW5lcmF0ZWRTbG90cykpKSA6IFwiXCIpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGhhc2goc3RyKSB7XG4gIHZhciBoYXNoID0gNTM4MTtcbiAgdmFyIGkgPSBzdHIubGVuZ3RoO1xuICB3aGlsZShpKSB7XG4gICAgaGFzaCA9IChoYXNoICogMzMpIF4gc3RyLmNoYXJDb2RlQXQoLS1pKTtcbiAgfVxuICByZXR1cm4gaGFzaCA+Pj4gMFxufVxuXG5mdW5jdGlvbiBjb250YWluc1Nsb3RDaGlsZCAoZWwpIHtcbiAgaWYgKGVsLnR5cGUgPT09IDEpIHtcbiAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBlbC5jaGlsZHJlbi5zb21lKGNvbnRhaW5zU2xvdENoaWxkKVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBnZW5TY29wZWRTbG90IChcbiAgZWwsXG4gIHN0YXRlXG4pIHtcbiAgdmFyIGlzTGVnYWN5U3ludGF4ID0gZWwuYXR0cnNNYXBbJ3Nsb3Qtc2NvcGUnXTtcbiAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCAmJiAhaXNMZWdhY3lTeW50YXgpIHtcbiAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90LCBcIm51bGxcIilcbiAgfVxuICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSwgZ2VuU2NvcGVkU2xvdClcbiAgfVxuICB2YXIgc2xvdFNjb3BlID0gZWwuc2xvdFNjb3BlID09PSBlbXB0eVNsb3RTY29wZVRva2VuXG4gICAgPyBcIlwiXG4gICAgOiBTdHJpbmcoZWwuc2xvdFNjb3BlKTtcbiAgdmFyIGZuID0gXCJmdW5jdGlvbihcIiArIHNsb3RTY29wZSArIFwiKXtcIiArXG4gICAgXCJyZXR1cm4gXCIgKyAoZWwudGFnID09PSAndGVtcGxhdGUnXG4gICAgICA/IGVsLmlmICYmIGlzTGVnYWN5U3ludGF4XG4gICAgICAgID8gKFwiKFwiICsgKGVsLmlmKSArIFwiKT9cIiArIChnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnKSArIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3VuZGVmaW5lZCdcbiAgICAgIDogZ2VuRWxlbWVudChlbCwgc3RhdGUpKSArIFwifVwiO1xuICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gIHZhciByZXZlcnNlUHJveHkgPSBzbG90U2NvcGUgPyBcIlwiIDogXCIscHJveHk6dHJ1ZVwiO1xuICByZXR1cm4gKFwie2tleTpcIiArIChlbC5zbG90VGFyZ2V0IHx8IFwiXFxcImRlZmF1bHRcXFwiXCIpICsgXCIsZm46XCIgKyBmbiArIHJldmVyc2VQcm94eSArIFwifVwiKVxufVxuXG5mdW5jdGlvbiBnZW5DaGlsZHJlbiAoXG4gIGVsLFxuICBzdGF0ZSxcbiAgY2hlY2tTa2lwLFxuICBhbHRHZW5FbGVtZW50LFxuICBhbHRHZW5Ob2RlXG4pIHtcbiAgdmFyIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICB2YXIgZWwkMSA9IGNoaWxkcmVuWzBdO1xuICAgIC8vIG9wdGltaXplIHNpbmdsZSB2LWZvclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgIGVsJDEuZm9yICYmXG4gICAgICBlbCQxLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgZWwkMS50YWcgIT09ICdzbG90J1xuICAgICkge1xuICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlID0gY2hlY2tTa2lwXG4gICAgICAgID8gc3RhdGUubWF5YmVDb21wb25lbnQoZWwkMSkgPyBcIiwxXCIgOiBcIiwwXCJcbiAgICAgICAgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcIlwiICsgKChhbHRHZW5FbGVtZW50IHx8IGdlbkVsZW1lbnQpKGVsJDEsIHN0YXRlKSkgKyBub3JtYWxpemF0aW9uVHlwZSlcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlJDEgPSBjaGVja1NraXBcbiAgICAgID8gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIHN0YXRlLm1heWJlQ29tcG9uZW50KVxuICAgICAgOiAwO1xuICAgIHZhciBnZW4gPSBhbHRHZW5Ob2RlIHx8IGdlbk5vZGU7XG4gICAgcmV0dXJuIChcIltcIiArIChjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGdlbihjLCBzdGF0ZSk7IH0pLmpvaW4oJywnKSkgKyBcIl1cIiArIChub3JtYWxpemF0aW9uVHlwZSQxID8gKFwiLFwiICsgbm9ybWFsaXphdGlvblR5cGUkMSkgOiAnJykpXG4gIH1cbn1cblxuLy8gZGV0ZXJtaW5lIHRoZSBub3JtYWxpemF0aW9uIG5lZWRlZCBmb3IgdGhlIGNoaWxkcmVuIGFycmF5LlxuLy8gMDogbm8gbm9ybWFsaXphdGlvbiBuZWVkZWRcbi8vIDE6IHNpbXBsZSBub3JtYWxpemF0aW9uIG5lZWRlZCAocG9zc2libGUgMS1sZXZlbCBkZWVwIG5lc3RlZCBhcnJheSlcbi8vIDI6IGZ1bGwgbm9ybWFsaXphdGlvbiBuZWVkZWRcbmZ1bmN0aW9uIGdldE5vcm1hbGl6YXRpb25UeXBlIChcbiAgY2hpbGRyZW4sXG4gIG1heWJlQ29tcG9uZW50XG4pIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWwgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoZWwudHlwZSAhPT0gMSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5lZWRzTm9ybWFsaXphdGlvbihlbCkgfHxcbiAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbmVlZHNOb3JtYWxpemF0aW9uKGMuYmxvY2spOyB9KSkpIHtcbiAgICAgIHJlcyA9IDI7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBpZiAobWF5YmVDb21wb25lbnQoZWwpIHx8XG4gICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG1heWJlQ29tcG9uZW50KGMuYmxvY2spOyB9KSkpIHtcbiAgICAgIHJlcyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gbmVlZHNOb3JtYWxpemF0aW9uIChlbCkge1xuICByZXR1cm4gZWwuZm9yICE9PSB1bmRlZmluZWQgfHwgZWwudGFnID09PSAndGVtcGxhdGUnIHx8IGVsLnRhZyA9PT0gJ3Nsb3QnXG59XG5cbmZ1bmN0aW9uIGdlbk5vZGUgKG5vZGUsIHN0YXRlKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICByZXR1cm4gZ2VuRWxlbWVudChub2RlLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5pc0NvbW1lbnQpIHtcbiAgICByZXR1cm4gZ2VuQ29tbWVudChub2RlKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZW5UZXh0KG5vZGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuVGV4dCAodGV4dCkge1xuICByZXR1cm4gKFwiX3YoXCIgKyAodGV4dC50eXBlID09PSAyXG4gICAgPyB0ZXh0LmV4cHJlc3Npb24gLy8gbm8gbmVlZCBmb3IgKCkgYmVjYXVzZSBhbHJlYWR5IHdyYXBwZWQgaW4gX3MoKVxuICAgIDogdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKEpTT04uc3RyaW5naWZ5KHRleHQudGV4dCkpKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5Db21tZW50IChjb21tZW50KSB7XG4gIHJldHVybiAoXCJfZShcIiArIChKU09OLnN0cmluZ2lmeShjb21tZW50LnRleHQpKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBnZW5TbG90IChlbCwgc3RhdGUpIHtcbiAgdmFyIHNsb3ROYW1lID0gZWwuc2xvdE5hbWUgfHwgJ1wiZGVmYXVsdFwiJztcbiAgdmFyIGNoaWxkcmVuID0gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKTtcbiAgdmFyIHJlcyA9IFwiX3QoXCIgKyBzbG90TmFtZSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKTtcbiAgdmFyIGF0dHJzID0gZWwuYXR0cnMgfHwgZWwuZHluYW1pY0F0dHJzXG4gICAgPyBnZW5Qcm9wcygoZWwuYXR0cnMgfHwgW10pLmNvbmNhdChlbC5keW5hbWljQXR0cnMgfHwgW10pLm1hcChmdW5jdGlvbiAoYXR0cikgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgIG5hbWU6IGNhbWVsaXplKGF0dHIubmFtZSksXG4gICAgICAgIHZhbHVlOiBhdHRyLnZhbHVlLFxuICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgIH0pOyB9KSlcbiAgICA6IG51bGw7XG4gIHZhciBiaW5kJCQxID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICBpZiAoKGF0dHJzIHx8IGJpbmQkJDEpICYmICFjaGlsZHJlbikge1xuICAgIHJlcyArPSBcIixudWxsXCI7XG4gIH1cbiAgaWYgKGF0dHJzKSB7XG4gICAgcmVzICs9IFwiLFwiICsgYXR0cnM7XG4gIH1cbiAgaWYgKGJpbmQkJDEpIHtcbiAgICByZXMgKz0gKGF0dHJzID8gJycgOiAnLG51bGwnKSArIFwiLFwiICsgYmluZCQkMTtcbiAgfVxuICByZXR1cm4gcmVzICsgJyknXG59XG5cbi8vIGNvbXBvbmVudE5hbWUgaXMgZWwuY29tcG9uZW50LCB0YWtlIGl0IGFzIGFyZ3VtZW50IHRvIHNodW4gZmxvdydzIHBlc3NpbWlzdGljIHJlZmluZW1lbnRcbmZ1bmN0aW9uIGdlbkNvbXBvbmVudCAoXG4gIGNvbXBvbmVudE5hbWUsXG4gIGVsLFxuICBzdGF0ZVxuKSB7XG4gIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gIHJldHVybiAoXCJfYyhcIiArIGNvbXBvbmVudE5hbWUgKyBcIixcIiArIChnZW5EYXRhJDIoZWwsIHN0YXRlKSkgKyAoY2hpbGRyZW4gPyAoXCIsXCIgKyBjaGlsZHJlbikgOiAnJykgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuUHJvcHMgKHByb3BzKSB7XG4gIHZhciBzdGF0aWNQcm9wcyA9IFwiXCI7XG4gIHZhciBkeW5hbWljUHJvcHMgPSBcIlwiO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICB2YXIgdmFsdWUgPSB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMocHJvcC52YWx1ZSk7XG4gICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgZHluYW1pY1Byb3BzICs9IChwcm9wLm5hbWUpICsgXCIsXCIgKyB2YWx1ZSArIFwiLFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUpICsgXCJcXFwiOlwiICsgdmFsdWUgKyBcIixcIjtcbiAgICB9XG4gIH1cbiAgc3RhdGljUHJvcHMgPSBcIntcIiArIChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSkpICsgXCJ9XCI7XG4gIGlmIChkeW5hbWljUHJvcHMpIHtcbiAgICByZXR1cm4gKFwiX2QoXCIgKyBzdGF0aWNQcm9wcyArIFwiLFtcIiArIChkeW5hbWljUHJvcHMuc2xpY2UoMCwgLTEpKSArIFwiXSlcIilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGljUHJvcHNcbiAgfVxufVxuXG4vLyAjMzg5NSwgIzQyNjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyAodGV4dCkge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKVxuICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKVxufVxuXG4vKiAgKi9cblxuXG5cbi8vIHRoZXNlIGtleXdvcmRzIHNob3VsZCBub3QgYXBwZWFyIGluc2lkZSBleHByZXNzaW9ucywgYnV0IG9wZXJhdG9ycyBsaWtlXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG52YXIgcHJvaGliaXRlZEtleXdvcmRSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIChcbiAgJ2RvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3QsJyArXG4gICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXG4gICdleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzJ1xuKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxifFxcXFxiJykgKyAnXFxcXGInKTtcblxuLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbnZhciB1bmFyeU9wZXJhdG9yc1JFID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgKFxuICAnZGVsZXRlLHR5cGVvZix2b2lkJ1xuKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG5cbi8vIHN0cmlwIHN0cmluZ3MgaW4gZXhwcmVzc2lvbnNcbnZhciBzdHJpcFN0cmluZ1JFID0gLycoPzpbXidcXFxcXXxcXFxcLikqJ3xcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8YCg/OlteYFxcXFxdfFxcXFwuKSpcXCRcXHt8XFx9KD86W15gXFxcXF18XFxcXC4pKmB8YCg/OlteYFxcXFxdfFxcXFwuKSpgL2c7XG5cbi8vIGRldGVjdCBwcm9ibGVtYXRpYyBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlXG5mdW5jdGlvbiBkZXRlY3RFcnJvcnMgKGFzdCwgd2Fybikge1xuICBpZiAoYXN0KSB7XG4gICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlIChub2RlLCB3YXJuKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG5vZGUuYXR0cnNNYXApIHtcbiAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByYW5nZSA9IG5vZGUucmF3QXR0cnNNYXBbbmFtZV07XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICd2LWZvcicpIHtcbiAgICAgICAgICAgIGNoZWNrRm9yKG5vZGUsIChcInYtZm9yPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvblJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tFeHByZXNzaW9uKHZhbHVlLCAobmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2hlY2tOb2RlKG5vZGUuY2hpbGRyZW5baV0sIHdhcm4pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICBjaGVja0V4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBub2RlLnRleHQsIHdhcm4sIG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRXZlbnQgKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgdmFyIHN0aXBwZWQgPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJyk7XG4gIHZhciBrZXl3b3JkTWF0Y2ggPSBzdGlwcGVkLm1hdGNoKHVuYXJ5T3BlcmF0b3JzUkUpO1xuICBpZiAoa2V5d29yZE1hdGNoICYmIHN0aXBwZWQuY2hhckF0KGtleXdvcmRNYXRjaC5pbmRleCAtIDEpICE9PSAnJCcpIHtcbiAgICB3YXJuKFxuICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCIgaW4gZXhwcmVzc2lvbiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICByYW5nZVxuICAgICk7XG4gIH1cbiAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpO1xufVxuXG5mdW5jdGlvbiBjaGVja0ZvciAobm9kZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZm9yIHx8ICcnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMSwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjIsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZGVudGlmaWVyIChcbiAgaWRlbnQsXG4gIHR5cGUsXG4gIHRleHQsXG4gIHdhcm4sXG4gIHJhbmdlXG4pIHtcbiAgaWYgKHR5cGVvZiBpZGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEZ1bmN0aW9uKChcInZhciBcIiArIGlkZW50ICsgXCI9X1wiKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgd2FybigoXCJpbnZhbGlkIFwiICsgdHlwZSArIFwiIFxcXCJcIiArIGlkZW50ICsgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSksIHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tFeHByZXNzaW9uIChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gIHRyeSB7XG4gICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBcIiArIGV4cCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGtleXdvcmRNYXRjaCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKS5tYXRjaChwcm9oaWJpdGVkS2V5d29yZFJFKTtcbiAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQga2V5d29yZCBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXG4gICAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImludmFsaWQgZXhwcmVzc2lvbjogXCIgKyAoZS5tZXNzYWdlKSArIFwiIGluXFxuXFxuXCIgK1xuICAgICAgICBcIiAgICBcIiArIGV4cCArIFwiXFxuXFxuXCIgK1xuICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSArIFwiXFxuXCIsXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHJhbmdlID0gMjtcblxuZnVuY3Rpb24gZ2VuZXJhdGVDb2RlRnJhbWUgKFxuICBzb3VyY2UsXG4gIHN0YXJ0LFxuICBlbmRcbikge1xuICBpZiAoIHN0YXJ0ID09PSB2b2lkIDAgKSBzdGFydCA9IDA7XG4gIGlmICggZW5kID09PSB2b2lkIDAgKSBlbmQgPSBzb3VyY2UubGVuZ3RoO1xuXG4gIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICB2YXIgY291bnQgPSAwO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3VudCArPSBsaW5lc1tpXS5sZW5ndGggKyAxO1xuICAgIGlmIChjb3VudCA+PSBzdGFydCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgLSByYW5nZTsgaiA8PSBpICsgcmFuZ2UgfHwgZW5kID4gY291bnQ7IGorKykge1xuICAgICAgICBpZiAoaiA8IDAgfHwgaiA+PSBsaW5lcy5sZW5ndGgpIHsgY29udGludWUgfVxuICAgICAgICByZXMucHVzaCgoXCJcIiArIChqICsgMSkgKyAocmVwZWF0JDEoXCIgXCIsIDMgLSBTdHJpbmcoaiArIDEpLmxlbmd0aCkpICsgXCJ8ICBcIiArIChsaW5lc1tqXSkpKTtcbiAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgIGlmIChqID09PSBpKSB7XG4gICAgICAgICAgLy8gcHVzaCB1bmRlcmxpbmVcbiAgICAgICAgICB2YXIgcGFkID0gc3RhcnQgLSAoY291bnQgLSBsaW5lTGVuZ3RoKSArIDE7XG4gICAgICAgICAgdmFyIGxlbmd0aCA9IGVuZCA+IGNvdW50ID8gbGluZUxlbmd0aCAtIHBhZCA6IGVuZCAtIHN0YXJ0O1xuICAgICAgICAgIHJlcy5wdXNoKFwiICAgfCAgXCIgKyByZXBlYXQkMShcIiBcIiwgcGFkKSArIHJlcGVhdCQxKFwiXlwiLCBsZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgIGlmIChlbmQgPiBjb3VudCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCQxID0gTWF0aC5taW4oZW5kIC0gY291bnQsIGxpbmVMZW5ndGgpO1xuICAgICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdCQxKFwiXlwiLCBsZW5ndGgkMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb3VudCArPSBsaW5lTGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKCdcXG4nKVxufVxuXG5mdW5jdGlvbiByZXBlYXQkMSAoc3RyLCBuKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKG4gPiAwKSB7XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgaWYgKG4gJiAxKSB7IHJlc3VsdCArPSBzdHI7IH1cbiAgICAgIG4gPj4+PSAxO1xuICAgICAgaWYgKG4gPD0gMCkgeyBicmVhayB9XG4gICAgICBzdHIgKz0gc3RyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24gKGNvZGUsIGVycm9ycykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JzLnB1c2goeyBlcnI6IGVyciwgY29kZTogY29kZSB9KTtcbiAgICByZXR1cm4gbm9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4gKGNvbXBpbGUpIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb25zIChcbiAgICB0ZW1wbGF0ZSxcbiAgICBvcHRpb25zLFxuICAgIHZtXG4gICkge1xuICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMpO1xuICAgIHZhciB3YXJuJCQxID0gb3B0aW9ucy53YXJuIHx8IHdhcm47XG4gICAgZGVsZXRlIG9wdGlvbnMud2FybjtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIHtcbiAgICAgIC8vIGRldGVjdCBwb3NzaWJsZSBDU1AgcmVzdHJpY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUudG9TdHJpbmcoKS5tYXRjaCgvdW5zYWZlLWV2YWx8Q1NQLykpIHtcbiAgICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgICAgJ0l0IHNlZW1zIHlvdSBhcmUgdXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xuICAgICAgICAgICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJpdHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxpbmcgeW91ciAnICtcbiAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25zLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgY2FjaGVcbiAgICB2YXIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXG4gICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgIDogdGVtcGxhdGU7XG4gICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVtrZXldXG4gICAgfVxuXG4gICAgLy8gY29tcGlsZVxuICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuXG4gICAgLy8gY2hlY2sgY29tcGlsYXRpb24gZXJyb3JzL3RpcHNcbiAgICB7XG4gICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBjb21waWxlZC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyAoZS5tc2cpICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICAgIGdlbmVyYXRlQ29kZUZyYW1lKHRlbXBsYXRlLCBlLnN0YXJ0LCBlLmVuZCksXG4gICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIiArIHRlbXBsYXRlICsgXCJcXG5cXG5cIiArXG4gICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiAoXCItIFwiICsgZSk7IH0pLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21waWxlZC50aXBzICYmIGNvbXBpbGVkLnRpcHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aXAoZS5tc2csIHZtKTsgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHsgcmV0dXJuIHRpcChtc2csIHZtKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0dXJuIGNvZGUgaW50byBmdW5jdGlvbnNcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgcmVzLnJlbmRlciA9IGNyZWF0ZUZ1bmN0aW9uKGNvbXBpbGVkLnJlbmRlciwgZm5HZW5FcnJvcnMpO1xuICAgIHJlcy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZC5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgfSk7XG5cbiAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICB7XG4gICAgICBpZiAoKCFjb21waWxlZC5lcnJvcnMgfHwgIWNvbXBpbGVkLmVycm9ycy5sZW5ndGgpICYmIGZuR2VuRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGdlbmVyYXRlIHJlbmRlciBmdW5jdGlvbjpcXG5cXG5cIiArXG4gICAgICAgICAgZm5HZW5FcnJvcnMubWFwKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSByZWYuZXJyO1xuICAgICAgICAgICAgdmFyIGNvZGUgPSByZWYuY29kZTtcblxuICAgICAgICAgICAgcmV0dXJuICgoZXJyLnRvU3RyaW5nKCkpICsgXCIgaW5cXG5cXG5cIiArIGNvZGUgKyBcIlxcblwiKTtcbiAgICAgICAgfSkuam9pbignXFxuJyksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKGNhY2hlW2tleV0gPSByZXMpXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyQ3JlYXRvciAoYmFzZUNvbXBpbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyIChiYXNlT3B0aW9ucykge1xuICAgIGZ1bmN0aW9uIGNvbXBpbGUgKFxuICAgICAgdGVtcGxhdGUsXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgZmluYWxPcHRpb25zID0gT2JqZWN0LmNyZWF0ZShiYXNlT3B0aW9ucyk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgdGlwcyA9IFtdO1xuXG4gICAgICB2YXIgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcbiAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgdmFyIGxlYWRpbmdTcGFjZUxlbmd0aCA9IHRlbXBsYXRlLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aDtcblxuICAgICAgICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHsgbXNnOiBtc2cgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRhdGEuc3RhcnQgPSByYW5nZS5zdGFydCArIGxlYWRpbmdTcGFjZUxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmVuZCA9IHJhbmdlLmVuZCArIGxlYWRpbmdTcGFjZUxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2goZGF0YSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXJnZSBjdXN0b20gbW9kdWxlc1xuICAgICAgICBpZiAob3B0aW9ucy5tb2R1bGVzKSB7XG4gICAgICAgICAgZmluYWxPcHRpb25zLm1vZHVsZXMgPVxuICAgICAgICAgICAgKGJhc2VPcHRpb25zLm1vZHVsZXMgfHwgW10pLmNvbmNhdChvcHRpb25zLm1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICBmaW5hbE9wdGlvbnMuZGlyZWN0aXZlcyA9IGV4dGVuZChcbiAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSxcbiAgICAgICAgICAgIG9wdGlvbnMuZGlyZWN0aXZlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZmluYWxPcHRpb25zLndhcm4gPSB3YXJuO1xuXG4gICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0ZS50cmltKCksIGZpbmFsT3B0aW9ucyk7XG4gICAgICB7XG4gICAgICAgIGRldGVjdEVycm9ycyhjb21waWxlZC5hc3QsIHdhcm4pO1xuICAgICAgfVxuICAgICAgY29tcGlsZWQuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgY29tcGlsZWQudGlwcyA9IHRpcHM7XG4gICAgICByZXR1cm4gY29tcGlsZWRcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tcGlsZTogY29tcGlsZSxcbiAgICAgIGNvbXBpbGVUb0Z1bmN0aW9uczogY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihjb21waWxlKVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gYGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcmAgYWxsb3dzIGNyZWF0aW5nIGNvbXBpbGVycyB0aGF0IHVzZSBhbHRlcm5hdGl2ZVxuLy8gcGFyc2VyL29wdGltaXplci9jb2RlZ2VuLCBlLmcgdGhlIFNTUiBvcHRpbWl6aW5nIGNvbXBpbGVyLlxuLy8gSGVyZSB3ZSBqdXN0IGV4cG9ydCBhIGRlZmF1bHQgY29tcGlsZXIgdXNpbmcgdGhlIGRlZmF1bHQgcGFydHMuXG52YXIgY3JlYXRlQ29tcGlsZXIgPSBjcmVhdGVDb21waWxlckNyZWF0b3IoZnVuY3Rpb24gYmFzZUNvbXBpbGUgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHZhciBhc3QgPSBwYXJzZSh0ZW1wbGF0ZS50cmltKCksIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5vcHRpbWl6ZSAhPT0gZmFsc2UpIHtcbiAgICBvcHRpbWl6ZShhc3QsIG9wdGlvbnMpO1xuICB9XG4gIHZhciBjb2RlID0gZ2VuZXJhdGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICBhc3Q6IGFzdCxcbiAgICByZW5kZXI6IGNvZGUucmVuZGVyLFxuICAgIHN0YXRpY1JlbmRlckZuczogY29kZS5zdGF0aWNSZW5kZXJGbnNcbiAgfVxufSk7XG5cbi8qICAqL1xuXG52YXIgcmVmJDEgPSBjcmVhdGVDb21waWxlcihiYXNlT3B0aW9ucyk7XG52YXIgY29tcGlsZSA9IHJlZiQxLmNvbXBpbGU7XG52YXIgY29tcGlsZVRvRnVuY3Rpb25zID0gcmVmJDEuY29tcGlsZVRvRnVuY3Rpb25zO1xuXG4vKiAgKi9cblxuLy8gY2hlY2sgd2hldGhlciBjdXJyZW50IGJyb3dzZXIgZW5jb2RlcyBhIGNoYXIgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXNcbnZhciBkaXY7XG5mdW5jdGlvbiBnZXRTaG91bGREZWNvZGUgKGhyZWYpIHtcbiAgZGl2ID0gZGl2IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuaW5uZXJIVE1MID0gaHJlZiA/IFwiPGEgaHJlZj1cXFwiXFxuXFxcIi8+XCIgOiBcIjxkaXYgYT1cXFwiXFxuXFxcIi8+XCI7XG4gIHJldHVybiBkaXYuaW5uZXJIVE1MLmluZGV4T2YoJyYjMTA7JykgPiAwXG59XG5cbi8vICMzNjYzOiBJRSBlbmNvZGVzIG5ld2xpbmVzIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzIHdoaWxlIG90aGVyIGJyb3dzZXJzIGRvbid0XG52YXIgc2hvdWxkRGVjb2RlTmV3bGluZXMgPSBpbkJyb3dzZXIgPyBnZXRTaG91bGREZWNvZGUoZmFsc2UpIDogZmFsc2U7XG4vLyAjNjgyODogY2hyb21lIGVuY29kZXMgY29udGVudCBpbiBhW2hyZWZdXG52YXIgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKHRydWUpIDogZmFsc2U7XG5cbi8qICAqL1xuXG52YXIgaWRUb1RlbXBsYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChpZCkge1xuICB2YXIgZWwgPSBxdWVyeShpZCk7XG4gIHJldHVybiBlbCAmJiBlbC5pbm5lckhUTUxcbn0pO1xuXG52YXIgbW91bnQgPSBWdWUucHJvdG90eXBlLiRtb3VudDtcblZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKFxuICBlbCxcbiAgaHlkcmF0aW5nXG4pIHtcbiAgZWwgPSBlbCAmJiBxdWVyeShlbCk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChlbCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgd2FybihcbiAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICApO1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gIC8vIHJlc29sdmUgdGVtcGxhdGUvZWwgYW5kIGNvbnZlcnQgdG8gcmVuZGVyIGZ1bmN0aW9uXG4gIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSBvcHRpb25zLnRlbXBsYXRlO1xuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgdGVtcGxhdGUgPSBpZFRvVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIChcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIiArIChvcHRpb25zLnRlbXBsYXRlKSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRlbXBsYXRlLm5vZGVUeXBlKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHdhcm4oJ2ludmFsaWQgdGVtcGxhdGUgb3B0aW9uOicgKyB0ZW1wbGF0ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsKSB7XG4gICAgICB0ZW1wbGF0ZSA9IGdldE91dGVySFRNTChlbCk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gY29tcGlsZVRvRnVuY3Rpb25zKHRlbXBsYXRlLCB7XG4gICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBcImRldmVsb3BtZW50XCIgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IHNob3VsZERlY29kZU5ld2xpbmVzLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgZGVsaW1pdGVyczogb3B0aW9ucy5kZWxpbWl0ZXJzLFxuICAgICAgICBjb21tZW50czogb3B0aW9ucy5jb21tZW50c1xuICAgICAgfSwgdGhpcyk7XG4gICAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICAgIHZhciBzdGF0aWNSZW5kZXJGbnMgPSByZWYuc3RhdGljUmVuZGVyRm5zO1xuICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7XG4gICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZucztcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodGhpcy5fbmFtZSkgKyBcIiBjb21waWxlXCIpLCAnY29tcGlsZScsICdjb21waWxlIGVuZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKVxufTtcblxuLyoqXG4gKiBHZXQgb3V0ZXJIVE1MIG9mIGVsZW1lbnRzLCB0YWtpbmcgY2FyZVxuICogb2YgU1ZHIGVsZW1lbnRzIGluIElFIGFzIHdlbGwuXG4gKi9cbmZ1bmN0aW9uIGdldE91dGVySFRNTCAoZWwpIHtcbiAgaWYgKGVsLm91dGVySFRNTCkge1xuICAgIHJldHVybiBlbC5vdXRlckhUTUxcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUxcbiAgfVxufVxuXG5WdWUuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxubW9kdWxlLmV4cG9ydHMgPSBWdWU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue/dist/vue.common.dev.js\n");
/***/ }),
/***/ "./node_modules/vue/dist/vue.common.js":
/*!*********************************************!*\
!*** ./node_modules/vue/dist/vue.common.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("if (false) {} else {\n module.exports = __webpack_require__(/*! ./vue.common.dev.js */ \"./node_modules/vue/dist/vue.common.dev.js\")\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcz81ZWU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksS0FBcUMsRUFBRSxFQUUxQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLHNFQUFxQjtBQUNoRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuY29tbW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3Z1ZS5jb21tb24ucHJvZC5qcycpXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vdnVlLmNvbW1vbi5kZXYuanMnKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/vue/dist/vue.common.js\n");
/***/ }),
/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
!*** (webpack)/buildin/global.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n");
/***/ }),
/***/ "./node_modules/webpack/buildin/module.js":
/*!***********************************!*\
!*** (webpack)/buildin/module.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2NlZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9tb2R1bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/module.js\n");
/***/ }),
/***/ "./test/js/src/index.js":
/*!******************************!*\
!*** ./test/js/src/index.js ***!
\******************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.common.js\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _dist_js_vue_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../dist/js/vue-context */ \"./dist/js/vue-context.js\");\n/* harmony import */ var _dist_js_vue_context__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_dist_js_vue_context__WEBPACK_IMPORTED_MODULE_1__);\n // import { VueContext } from '../../../src/js/index';\n\n\nnew vue__WEBPACK_IMPORTED_MODULE_0___default.a({\n components: {\n VueContext: _dist_js_vue_context__WEBPACK_IMPORTED_MODULE_1__[\"VueContext\"]\n },\n data: {\n close: true,\n closeCount: 0,\n items: ['Cras justo odio', 'Dapibus ac facilisis in', 'Morbi leo risus', 'Porta ac consectetur ac', 'Vestibulum at eros']\n },\n methods: {\n onClick: function onClick(text) {// alert(text);\n },\n onClose: function onClose() {\n console.log('close fired');\n console.log(++this.closeCount);\n }\n }\n}).$mount('#app');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi90ZXN0L2pzL3NyYy9pbmRleC5qcz84YTkyIl0sIm5hbWVzIjpbIlZ1ZSIsImNvbXBvbmVudHMiLCJWdWVDb250ZXh0IiwiZGF0YSIsImNsb3NlIiwiY2xvc2VDb3VudCIsIml0ZW1zIiwibWV0aG9kcyIsIm9uQ2xpY2siLCJ0ZXh0Iiwib25DbG9zZSIsImNvbnNvbGUiLCJsb2ciLCIkbW91bnQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FDQTs7QUFDQTtBQUVBLElBQUlBLDBDQUFKLENBQVE7QUFDSkMsWUFBVSxFQUFFO0FBQ1JDLGNBQVUsRUFBVkEsK0RBQVVBO0FBREYsR0FEUjtBQUtKQyxNQUFJLEVBQUU7QUFDRkMsU0FBSyxFQUFFLElBREw7QUFFRkMsY0FBVSxFQUFFLENBRlY7QUFHRkMsU0FBSyxFQUFFLENBQ0gsaUJBREcsRUFFSCx5QkFGRyxFQUdILGlCQUhHLEVBSUgseUJBSkcsRUFLSCxvQkFMRztBQUhMLEdBTEY7QUFpQkpDLFNBQU8sRUFBRTtBQUNMQyxXQURLLG1CQUNJQyxJQURKLEVBQ1UsQ0FDWDtBQUNILEtBSEk7QUFLTEMsV0FMSyxxQkFLSztBQUNOQyxhQUFPLENBQUNDLEdBQVIsQ0FBWSxhQUFaO0FBQ0FELGFBQU8sQ0FBQ0MsR0FBUixDQUFZLEVBQUUsS0FBS1AsVUFBbkI7QUFDSDtBQVJJO0FBakJMLENBQVIsRUEyQkdRLE1BM0JILENBMkJVLE1BM0JWIiwiZmlsZSI6Ii4vdGVzdC9qcy9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG4vLyBpbXBvcnQgeyBWdWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vc3JjL2pzL2luZGV4JztcbmltcG9ydCB7IFZ1ZUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9kaXN0L2pzL3Z1ZS1jb250ZXh0JztcblxubmV3IFZ1ZSh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBWdWVDb250ZXh0XG4gICAgfSxcblxuICAgIGRhdGE6IHtcbiAgICAgICAgY2xvc2U6IHRydWUsXG4gICAgICAgIGNsb3NlQ291bnQ6IDAsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAnQ3JhcyBqdXN0byBvZGlvJyxcbiAgICAgICAgICAgICdEYXBpYnVzIGFjIGZhY2lsaXNpcyBpbicsXG4gICAgICAgICAgICAnTW9yYmkgbGVvIHJpc3VzJyxcbiAgICAgICAgICAgICdQb3J0YSBhYyBjb25zZWN0ZXR1ciBhYycsXG4gICAgICAgICAgICAnVmVzdGlidWx1bSBhdCBlcm9zJ1xuICAgICAgICBdXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgb25DbGljayAodGV4dCkge1xuICAgICAgICAgICAgLy8gYWxlcnQodGV4dCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25DbG9zZSgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbG9zZSBmaXJlZCcpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coKyt0aGlzLmNsb3NlQ291bnQpO1xuICAgICAgICB9LFxuICAgIH0sXG59KS4kbW91bnQoJyNhcHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./test/js/src/index.js\n");
/***/ }),
/***/ "./test/js/src/index.scss":
/*!********************************!*\
!*** ./test/js/src/index.scss ***!
\********************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// removed by extract-text-webpack-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi90ZXN0L2pzL3NyYy9pbmRleC5zY3NzPzQ5YmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiLi90ZXN0L2pzL3NyYy9pbmRleC5zY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./test/js/src/index.scss\n");
/***/ }),
/***/ 0:
/*!*************************************************************!*\
!*** multi ./test/js/src/index.js ./test/js/src/index.scss ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! C:\Users\Randall\projects\npm\vue-context\test\js\src\index.js */"./test/js/src/index.js");
module.exports = __webpack_require__(/*! C:\Users\Randall\projects\npm\vue-context\test\js\src\index.scss */"./test/js/src/index.scss");
/***/ })
/******/ });